字節一面后續:TCP/IP 四層模型了解么?每一層都有哪些協議?
本文轉載自微信公眾號「CS指南」,作者大白。轉載本文請聯系CS指南公眾號。
大家好,我是大白。
這是 「面試現場」操作系統 的姊妹篇計算機網絡,這個系列我會通過真實面試的形式向你講解某個具體的知識點。
下面是正文。
1內容回顧
面試官:上次我們聊了網絡分層相關的內容,今天我們繼續延伸一下,來聊聊每一層具體做了什么事情。
大白:好的好的!
面試官:開始之前,我們先來回顧一下 TCP/IP 4 層模型。
- 應用層
- 傳輸層
- 網絡層
- 網絡接口層
TCP-IP-4-model
2應用層
面試官:通常我們建議從應用層向網絡接口層學習。你先說說應用層主要做了什么工作吧?
大白: 應用層位于傳輸層之上,主要提供兩個終端設備上的應用程序之間信息交換的服務,它定義了信息交換的格式,消息會交給下一層傳輸層來傳輸。 我們把應用層交互的數據單元稱為報文。
應用層協議定義了網絡通信規則,對于不同的網絡應用需要不同的應用層協議。在互聯網中應用層協議很多,如支持 Web 應用的 HTTP 協議,支持電子郵件的 SMTP 協議等等。
network-layer
HTTP:超文本傳輸協議
面試官:那你先聊聊 HTTP 協議吧!
大白:超文本傳輸協議(HTTP,HyperText Transfer Protocol)主要是為 Web 瀏覽器與 Web 服務器之間的通信而設計的。
當我們使用瀏覽器瀏覽網頁的時候,我們網頁就是通過 HTTP 請求進行加載的,整個過程如下圖所示。
HTTP請求過程
https://www.seobility.net/en/wiki/HTTP_headers
HTTP 協議是基于 TCP 協議的,發送 HTTP 請求之前首先要建立 TCP 連接也就是要經歷 3 次握手。目前使用的 HTTP 協議大部分都是 1.1。在 1.1 的協議里面,默認是開啟了 Keep-Alive 的,這樣的話建立的連接就可以在多次請求中被復用了。
另外, HTTP 協議是”無狀態”的協議,它無法記錄客戶端用戶的狀態 一般我們都是通過 Session 來記錄客戶端用戶的狀態如何判斷郵箱是真正存在的?。
SMTP:簡單郵件傳輸(發送)協議
面試官:SMTP 協議了解嗎?
大白:簡單郵件傳輸協議(SMTP,Simple Mail Transfer Protocol)的縮寫,基于 TCP 協議,用來發送電子郵件。
注意 :接受郵件的協議不是 SMTP 而是 POP3 協議。
SMTP 協議這塊涉及的內容比較多,下面這兩個問題比較重要:
- 電子郵件的發送過程
- 如何判斷郵箱是真正存在的?
電子郵件的發送過程?
比如我的郵箱是“dabai@cszhinan.com”,我要向“xiaoma@qq.com”發送郵件,整個過程可以簡單分為下面幾步:
- 通過 SMTP 協議,我將我寫好的郵件交給 163 郵箱服務器(郵局)。
- 163 郵箱服務器發現我發送的郵箱是 qq 郵箱,然后它使用 SMTP 協議將我的郵件轉發到 qq 郵箱服務器。
- qq 郵箱服務器接收郵件之后就通知郵箱為“xiaoma@qq.com”的用戶來收郵件,然后用戶就通過 POP3/IMAP 協議將郵件取出。
一個電子郵件被發送的過程
https://www.campaignmonitor.com/resources/knowledge-base/what-is-the-code-that-makes-bcc-or-cc-operate-in-an-email/
如何判斷郵箱是真正存在的?
很多場景(比如郵件營銷)下面我們需要判斷我們要發送的郵箱地址是否真的存在,這個時候我們可以利用 SMTP 協議來檢測:
- 查找郵箱域名對應的 SMTP 服務器地址
- 嘗試與服務器建立連接
- 連接成功后嘗試向需要驗證的郵箱發送郵件
- 根據返回結果判定郵箱地址的真實性
推薦幾個在線郵箱是否有效檢測工具:
- https://verify-email.org/
- http://tool.chacuo.net/mailverify
- https://www.emailcamel.com/
POP3/IMAP:郵件接收的協議
面試官:POP3/IMAP 協議了解嗎?
大白:巴拉巴拉說了一大堆。。。
面試官:這兩個協議沒必要多做闡述,只需要了解 POP3 和 IMAP 兩者都是負責郵件接收的協議即可。另外,需要注意不要將這兩者和 SMTP 協議搞混淆了。SMTP 協議只負責郵件的發送,真正負責接收的協議是 POP3/IMAP。
IMAP 協議相比于 POP3 更新一點,為用戶提供的可選功能也更多一點,幾乎所有現代電子郵件客戶端和服務器都支持 IMAP。大部分網絡郵件服務提供商都支持 POP3 和 IMAP。
FTP:文件傳輸協議
面試官:應用層文件傳輸使用的是什么協議?
大白:文件傳輸協議 FTP(File Transfer Protocol)
面試官:可以簡單介紹一下嗎?
大白:FTP 協議主要提供文件傳輸服務,基于 TCP 實現可靠的傳輸。使用 FTP 傳輸文件的好處是可以屏蔽操作系統和文件存儲方式。
FTP 是基于客戶—服務器(C/S)模型而設計的,在客戶端與 FTP 服務器之間建立兩個連接。如果我們要基于 FTP 協議開發一個文件傳輸的軟件的話,首先需要搞清楚 FTP 的原理。關于 FTP 的原理,很多書籍上已經描述的非常詳細了:
FTP 的獨特的優勢同時也是與其它客戶服務器程序最大的不同點就在于它在兩臺通信的主機之間使用了兩條 TCP 連接(其它客戶服務器應用程序一般只有一條 TCP 連接):
- 控制連接:用于傳送控制信息(命令和響應)
- 數據連接:用于數據傳送;
這種將命令和數據分開傳送的思想大大提高了 FTP 的效率。
FTP工作過程
DNS:域名系統
面試官:域名是是如何被解析為 IP 地址的?
大白:域名系統(DNS,Domain Name System)將人類可讀的域名 (例如,www.baidu.com) 轉換為機器可讀的 IP 地址 (例如,220.181.38.148)。 我們可以將其理解為專為互聯網設計的電話薄。
dns-overview
IP 地址是一個網卡再網絡世界中的通訊地址,我們可以把它理解為我們現實世界中的家庭地址。
DNS 解析的完整流程是怎樣的呢? (這個會在后面的文章中詳細介紹到)
DNS 解析的完整流程
https://aws.amazon.com/cn/route53/what-is-dns/
Telnet:遠程登錄協議
面試官:遠程登錄協議了解嗎?
大白:遠程登陸協議,通過一個終端登陸到其他服務器,建立在可靠的傳輸協議 TCP 之上。Telnet 協議的最大缺點之一是所有數據(包括用戶名和密碼)均以明文形式發送,這有潛在的安全風險。這就是為什么如今很少使用 Telnet 并被一種稱為 SSH 的非常安全的協議所取代的主要原因。
SSH:安全的網絡傳輸協議
大白:SSH( Secure Shell)是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。SSH 建立在可靠的傳輸協議 TCP 之上。
Telnet 和 SSH 之間的主要區別在于 SSH 協議會對傳輸的數據進行加密保證數據安全性。
3傳輸層(Transport layer)
面試官:好了!看來你小子沒少花時間準備啊!我們再來看看傳輸層吧!
面試官:你先說說傳輸層主要做了什么工作吧?
大白: 傳輸層的主要任務就是負責向兩臺終端設備進程之間的通信提供通用的數據傳輸服務。 應用進程利用該服務傳送應用層報文。“通用的”是指并不針對某一個特定的網絡應用,而是多種應用可以使用同一個運輸層服務。
運輸層主要使用以下兩種協議:
- 傳輸控制協議 TCP(Transmisson Control Protocol)--提供面向連接的,可靠的數據傳輸服務。
- 用戶數據協議 UDP(User Datagram Protocol)--提供無連接的,盡最大努力的數據傳輸服務(不保證數據傳輸的可靠性)。
transport-layer
大白:關于 TCP 和 UDP 的詳細介紹咱們會在后面的文章中介紹到。
4網絡層(Network layer)
面試官:好家伙!TCP 和 UDP 還要留一手是吧?
大白:不急嘛!我們先把網絡層聊完(反客為主)。
大白:網絡層負責為分組交換網上的不同主機提供通信服務。 在發送數據時,網絡層把運輸層產生的報文段或用戶數據報封裝成分組和包進行傳送。在 TCP/IP 體系結構中,由于網絡層使用 IP 協議,因此分組也叫 IP 數據報,簡稱數據報。
注意 ??:不要把運輸層的“用戶數據報 UDP”和網絡層的“IP 數據報”弄混。
網絡層的還有一個任務就是選擇合適的路由,使源主機運輸層所傳下來的分株,能通過網絡層中的路由器找到目的主機。
這里強調指出,網絡層中的“網絡”二字已經不是我們通常談到的具體網絡,而是指計算機網絡體系結構模型中第三層的名稱.
互聯網是由大量的異構(heterogeneous)網絡通過路由器(router)相互連接起來的。互聯網使用的網絡層協議是無連接的網際協議(Intert Prococol)和許多路由選擇協議,因此互聯網的網絡層也叫做網際層或IP 層。
nerwork-layer
面試官:那我挑幾個比較重要的協議,你給介紹一下唄!大白。
IP:網際協議
面試官:IP 協議了解么?
大白:網際協議 IP 是 TCP/IP 協議中最重要的協議之一,也是網絡層最重要的協議之一,IP 協議的作用包括尋址規約、定義數據包的格式等等,是網絡層信息傳輸的主力協議。目前 IP 協議主要分為兩種,一種是過去的 IPv4,另一種是較新的 IPv6,目前這兩種協議都在使用,但后者已經被提議來取代前者。
大白:關于 IP 協議的詳細介紹咱們會在后面的文章中介紹到。
ARP:地址解析協議
面試官:ARP 協議呢?
大白:ARP 協議,全稱地址解析協議(Address Resolution Protocol),它解決的是網絡層地址和鏈路層地址之間的轉換問題。因為一個 IP 數據報在物理上傳輸的過程中,總是需要知道下一跳(物理上的下一個目的地)該去往何處,但 IP 地址屬于邏輯地址,而 MAC 地址才是物理地址,ARP 協議解決了 IP 地址轉 MAC 地址的一些問題。
大白:關于 ARP 協議的詳細介紹咱們會在后面的文章中介紹到。
NAT:網絡地址轉換協議
面試官:哎呦!有點東西!再說說 NAT 協議吧!
大白:NAT 協議(Network Address Translation)的應用場景如同它的名稱——網絡地址轉換,應用于內部網到外部網的地址轉換過程中。具體地說,在一個小的子網(局域網,LAN)內,各主機使用的是同一個 LAN 下的 IP 地址,但在該 LAN 以外,在廣域網(WAN)中,需要一個統一的 IP 地址來標識該 LAN 在整個 Internet 上的位置。
大白:關于 NAT 協議的詳細介紹咱們會在后面的文章中介紹到。
5網絡接口層(Network interface layer)
面試官:網絡接口層呢?
大白:我們可以把網絡接口層看作是數據鏈路層和物理層的合體。
- 數據鏈路層(data link layer)通常簡稱為鏈路層( 兩臺主機之間的數據傳輸,總是在一段一段的鏈路上傳送的)。數據鏈路層的作用是將網絡層交下來的 IP 數據報組裝成幀,在兩個相鄰節點間的鏈路上傳送幀。每一幀包括數據和必要的控制信息(如同步信息,地址信息,差錯控制等)。
- 物理層的作用是實現相鄰計算機節點之間比特流的透明傳送,盡可能屏蔽掉具體傳輸介質和物理設備的差異
network-interface-layer
最后再分享一個關于 OSI 七層模型非常不錯的總結圖片!
https://wsgzao.github.io/post/osi/
6總結
下面大白帶大家簡單總結一下每一層包含的協議和核心技術:
network-protocol-overview
應用層協議 :
- HTTP 協議(超文本傳輸協議,網頁瀏覽常用的協議)
- DHCP 協議(動態主機配置)
- DNS 系統原理(域名系統)
- FTP 協議(文件傳輸協議)
- Telnet 協議(遠程登陸協議)
- 電子郵件協議等(SMTP、POP3、IMAP)
- ......
傳輸層協議 :
- TCP 協議
- 報文段結構
- 可靠數據傳輸
- 流量控制
- 擁塞控制
- UDP 協議
- 報文段結構
- RDT(可靠數據傳輸協議)
網絡層協議 :
- IP 協議(TCP/IP 協議的基礎,分為 IPv4 和 IPv6)
- ARP 協議(地址解析協議,用于解析 IP 地址和 MAC 地址之間的映射)
- ICMP 協議(控制報文協議,用于發送控制消息)
- NAT 協議(網絡地址轉換協議)
- RIP 協議、OSPF 協議、BGP 協議(路由選擇協議)
- ......
網絡接口層 :
- 差錯檢測技術
- 多路訪問協議(信道復用技術)
- CSMA/CD 協議
- MAC 協議
- 以太網技術
- ......