TCP IP之十 TCP連線的建立與終止

2021-05-25 05:53:33 字數 2061 閱讀 3136

tcp是傳輸層的重量級成員,也是整個tcp/ip協議棧的重要組成部分,也正因為這點,協議棧的名字裡面才有tcp這樣的字樣。tcp是端到端的通訊協議,它向上層應用提供了可靠的,面向連線的服務,為了實現這樣的服務,tcp採用了許多其它協議不曾用到的機制,比如序列號、滑動視窗、超時重傳、慢啟動等等,同步、流量控制等議題在tcp中體現得淋漓盡致。

為了分析tcp的執行機制,我們先來看看tcp的首部結構:

(1)前面四個位元組和udp類似仍然是源埠號和目的埠號;sequence number:序列號,用於通訊雙方的同步,tcp在概念上給每個被傳輸的位元組都編號,序列號字段儲存了該分節中資料字段第乙個位元組的編號;acknowledgment number:確認序號,tcp對通訊雙方傳送的分節都確認(ack分節沒有確認),確認是通過確認序號來完成的,確認序號字段儲存的是傳送方期望收到的下乙個位元組的編號;data offset:資料偏移量,有的資料稱之為首部長度,其實表達的是同乙個概念,這個欄位佔了4位,並且以4位元組為單位,所以和ip首部中的首部長度欄位是一樣的,它的最大值為15,說明tcp首部最長可以為60位元組(20位元組固定長度+最多40位元組的選項字段);接下來是6位的保留字段;接著是6位標誌位元,具體的標誌我們在(2)中闡述;window欄位用以告訴對方本地可以接收的資料編號範圍;checksum:該校驗和的計算和udp首部中的校驗和計算方法完全一樣;urgent pointer:緊急指標,我們在後面會詳述這個字段;接著是選項字段,最常見的選項是用以說明mss;當tcp首部長度不是4位元組的整數倍時需要進行填充。

(2)6位標誌字段:

urg:緊急指標位,該位為1,緊急指標欄位才有效;

ack:確認位,該位為1,確認序號才有效;

psh:用以告知接收方盡快將資料提交給應用程式;

rst:復位標誌,後面會講tcp什麼時候傳送這個標誌;

syn:同步位,建立連線的時候用,用於同步雙方的序號;

fin: 撤銷連線的使用用,用以告訴對方,主機不再往對端傳送資料。

(3)tcp首部的options:

選項格式有以下兩種(第二種格式中的長度包含從選項型別到資料的總長度):

選項型別

選項型別

選項長度

選項資料

在rfc793中第一的選項只有三種,要求每一種tcp實現都必須支援。

0用於表示選項結束;1用於填充使每個選項為4位元組的倍數(對於為什麼要填充不是很明白?另外,不是每個tcp實現都會這麼做);而mss格式如下:

最新的tcp實現往往還支援時間戳選項和視窗擴大因子選項等一些其它選項。(詳情可參考rfc1323)

tcp連線的建立與釋放

tcp正常連線建立與釋放的過程如上圖所示,連線時需要三次握手,釋放時需要四次握手。

三次握手過程:

(1)客戶端傳送設定了syn位的分節,序號欄位為j,並且一般會通告mss;

(2)伺服器端接收到客戶端的請求,立馬做出確認,並且通告本地的序號和mss;

(3)客戶端確認,伺服器端接收到確認,至此,連線建立。

四次握手過程:

(1)客戶端執行主動關閉,傳送帶有fin標誌的分節,說明客戶端不會再往這個連線寫資料;

(2)伺服器端確認這個fin分節;(此時如果伺服器不傳送fin,則連線處理半關閉狀態)

(3)伺服器也傳送fin,說明伺服器端也不傳送資料了;

(4)最後客戶端也需要再做最後的確認。

同時開啟:

同時關閉:

上面所述的正常連線建立和關閉,以及同時關閉和同時開啟,囊括了tcp的所有狀態,也說明了其狀態轉換過程。關於tcp的各種狀態,最需要說明的是time_wait狀態。time_wait狀態發生在連線釋放時,己方傳送完最後的ack。該狀態又稱為2msl(maximum segment lifetime)等待狀態,意思是這個狀態會持續2msl的時間,之所以需要這樣乙個持續時間主要有兩個原因:一是確保最後的ack在丟失時能夠重發;二是保證本連線中的資料報不會被將來新建的這個連線的副本接收(雖然出錯的概率比較小 )。

最後說明兩點:

(1)上面有提到mss,這個mss主要是為了避免ip分片的,mss的計算到分析原始碼的時候我們再詳細闡述;

(2)2msl又是如何計算的呢?分節的msl生存時間又是怎麼實現的呢?

TCP IP詳解學習筆記 TCP連線的建立與終止

由於tcp是乙個面向連線的協議,無論在哪一方傳送資料之前,都必須先在雙方之間建立連線,接下來我們就討論建立連線的具體過程 注意點 當一端建立連線時,所傳送的syn,也包含了此端的乙個初始序號,下圖的倆端的初始序號分別為1和5,此初始序號是由複雜演算法隨機產生的 如上圖所示 1.首先終止端發出乙個fi...

TCP建立連線

3 月,跳不動了?對tcp 面向連線 特性的學習研究。什麼是面向連線?tcp為什麼要進行面向連線的通訊?tcp 連線建立的過程是怎樣的?建立連線的通訊過程 打 是面向連線的通訊 a 呼叫 b b 接受並且此時 a 還沒有結束通話,連線建立成功,a b 雙方正常通訊。如果 b 不接受呼叫,連線無法建立...

iOS開發之TCP IP 建立連線的過程

tcp ip 建立連線的過程 在tcp ip 協議中,tcp協議提供可靠的連線服務,採用三次握手建立連線 第一次握手 建立連線時,客戶端傳送連線請求到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到客戶端連線請求,向客戶端傳送允許連線應答,此時伺服器進入syn recv狀態...