TCP連接概述
TCP是因特網運輸層面向連接的(connection-oriented)可靠運輸協議。之所以說它是面向連接的是因為
一個應用進程向另外一個應用進程發送數據之前,兩個進程必須先要“握手”(建立連接),初始化一些建立連
接的TCP狀態變量。
TCP協議是在端系統中運行的,不會在中間的網絡元素(路由器和鏈路層交換機)中運行,所以中間元素不
會維持TCP連接狀態。它的連接狀態完全保留在兩個端系統中。在實際中,中間路由器看到的只是數據包而不是
連接。
TCP連接提供的是全雙工服務(full-duplex-service),並且TCP連接也是點對點(piont-to-piont)的,這
就說明TCP連接是單個發送方與單個接收方之間的連接。在一次發送操作中,從一個發送方將數據傳給多個接收
方,即“多播”操作對TCP來說是不可能的。
兩個應用進程經過“三次握手”(three-way handshake)后建立TCP連接。連接建立后兩個應用進程便可以
相互發送數據了。
如圖所實,假設左邊進程為客戶進程,右邊進程為服務器進程。
客戶進程通過套接字傳遞傳遞數據流。TCP將數據引導到該連接的發送緩存(send buffer)里(該緩存是
TCP三次握手初期設置的緩存之一)。TCP會不時的從發送緩存里取出一塊數據,為每塊數據加上一個TCP
首部,從而形成TCP報文段(TCP segment)。這些報文段被傳遞給下層的網絡層,網絡層再將報文段封裝在
IP數據報中。然后,IP數據報被發送到網絡中。TCP在另一端接收到一個報文段后,該報文段就被放入該TCP連
接的接收緩存中。應用程序再從此緩存中讀取數據流。
上文中說的TCP會不時的從發送緩存里取出一塊數據,這里的不時在TCP規范里並沒有提及確切時間,只是
說在它“方便時”。TCP所取數據大小會受限於最大報文段長度(Maximum Segment Size,MSS)。
MSS通常根據最初確定的由本地發送主機發送的最大鏈路幀長度(所謂最大傳輸單元MTU)來確定。
設置MSS時要保證一個TCP報文段(封裝在IP數據報中在加上TCP首部,通常40個字節)適合單個鏈路層幀
以太網和PPP鏈路層協議都具有1500字節的MTU,一次MSS的典型值為1460字節。
需要注意:MSS是報文段里應用層數據的最大長度,不包括TCP首部。
此文為《計算機網絡 自頂向下方法》學習筆記3