1. TCP/IP 網絡分層
TCP/IP協議模型(Transmission Control Protocol/Internet Protocol),包含了一系列構成互聯網基礎的網絡協議,是Internet的核心協議,通過20多年的發展已日漸成熟,并被廣泛應用于局域網和廣域網中,目前已成為事實上的國際標準。TCP/IP協議簇是一組不同層次上的多個協議的組合,通常被認為是一個四層協議系統,與OSI的七層模型相對應。
協議的分層從上往下依次是
- Ethernet II:網絡接口層以太網幀頭部信息
- Internet Protocol Version 4:互聯網層 IP 包頭部信息
- Transmission Control Protocol:傳輸層的數據段頭部信息,此處是 TCP 協議
- Hypertext Transfer Protocol:應用層 HTTP 的信息
1.1 應用層(Application Layer)
應用層負責處理特定的應用程序細節。
應用層的本質是規定了應用程序之間如何相互傳遞報文,很多應用層協議都是由 RFC 文檔定義,應用層協議有
- 域名解析協議 DNS
- 收發郵件 SMTP 和 POP3 協議
- 時鐘同步協議 NTP
- 網絡文件共享協議 NFS
以HTTP為例 - 報文的類型,是請求報文還是響應報文
- 報文的語法,報文分為幾段,各段是什么含義、用什么分隔,每個部分的每個字段什么什么含義
- 進程應該以什么樣的時序發送報文和處理響應報文
1.2 傳輸層(Transport Layer)
運輸層主要為兩臺主機上的應用程序提供端到端的通信。
傳輸層的作用是為兩臺主機之間的「應用進程」提供端到端的邏輯通信,相隔幾千公里的兩臺主機的進程就好像在直接通信一樣。
在 TCP / IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。
1.3 網絡互連層(Internet Layer)
處理分組在網絡中的活動,例如分組的選路。
網絡互連層提供了主機到主機的通信,將傳輸層產生的的數據包封裝成分組數據包發送到目標主機,并提供路由選擇的能力。
網絡互連層協議包括 IP協議(網際協議),ICMP協議(Internet互聯網控制報文協議),以及IGMP協議(In ternet組管理協議)。
IP 協議是網絡層的主要協議,TCP 和 UDP 都是用 IP 協議作為網絡層協議。這一層的主要作用是給包加上源地址和目標地址,將數據包傳送到目標地址。
IP 協議是一個無連接的協議,也不具備重發機制,這也是 TCP 協議復雜的原因之一就是基于了這樣一個「不靠譜」的協議。
1.4 網絡訪問層(Network Access Layer)
通常包括操作系統中的設備驅動程序和計算機中對應的網絡接口卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理接口細節。
網絡訪問層也有說法叫做網絡接口層,以太網、Wifi、藍牙工作在這一層,網絡訪問層提供了主機連接到物理網絡需要的硬件和相關的協議。
2. TCP協議概述
TCP 是一個可靠的(reliable)、面向連接的(connection-oriented)、基于字節流(byte-stream)、全雙工的(full-duplex) 協議。
2.1 面向連接的(connection-oriented)
面向連接意味著兩個使用 TCP的應用(通常是一個客戶和一個服務器)在彼此交換數據
之前必須先建立一個 TCP連接。這一過程與打電話很相似,先撥號振鈴,等待對方摘機說
“喂”,然后才說明是誰。
建立連接的過程是通過「三次握手」來完成的,顧名思義,通過三次數據交換建立一個連接。 通過三次握手協商好雙方后續通信的起始序列號、窗口縮放大小等信息。
2.2 可靠的(reliable)
IP 是一種無連接、不可靠的協議:它盡最大可能將數據報從發送者傳輸給接收者,但并不保證包到達的順序會與它們被傳輸的順序一致,也不保證包是否重復,甚至都不保證包是否會達到接收者。
TCP 的可靠性主要依靠:
- 應用數據被分割成TCP認為最適合發送的數據塊。這和 UDP完全不同,應用程序產生的數據報長度將保持不變。由 TCPTCP傳遞給I P的信息單位稱為報文段或段( segment)
- 當TCP發出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
- 當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒
- TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯, TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時并重發)。
- 既然TCP報文段作為IP數據報來傳輸,而 IP數據報的到達可能會失序,因此 TCP報文段的到達也可能會失序。如果必要, TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。
- 既然IP數據報會發生重復,TCP的接收端必須丟棄重復的數據。
- TCP還能提供流量控制。 TCP連接的每一方都有固定大小的緩沖空間。 TCP的接收端只允許另一端發送接收端緩沖區所能接納的數據。這將防止較快主機致使較慢主機的緩沖區溢出。
2.3 基于字節流(byte-stream)
TCP 是一種字節流(byte-stream)協議,流的含義是沒有固定的報文邊界。每次TCP報文發送的字節數都不是固定的,取決于路徑最大傳輸單元 MTU、發送窗口大小、擁塞窗口大小。
兩個應用程序通過T C P連接交換8 bit字節構成的字節流。T C P不在字節流中插入記錄標識
符。我們將這稱為字節流服務( byte stream service)。如果一方的應用程序先傳 1 0字節,又傳
2 0字節,再傳5 0字節,連接的另一方將無法了解發方每次發送了多少字節。收方可以分 4次接
收這8 0個字節,每次接收 2 0字節。一端將字節流放到 T C P連接上,同樣的字節流將出現在
T C P連接的另一端。
2.4 全雙工的(full-duplex)
在 TCP 中發送端和接收端可以是客戶端/服務端,也可以是服務器/客戶端,通信的雙方在任意時刻既可以是接收數據也可以是發送數據,每個方向的數據流都獨立管理序列號、滑動窗口大小、MSS 等信息。
參考資料
《深入理解 TCP 協議:從原理到實戰》