1. 程式人生 > >計算機網路-TCP報文段格式

計算機網路-TCP報文段格式

經典格式圖

TCP面向位元組流,為網路提供可靠的連線,是以報文段為資料單位的。

源埠:佔16位字,記錄傳送方的埠值;

目的埠:佔16位字,記錄接收方的埠值;

序號:佔32位字,序號使用 mod 2^32 運算,在一個TCP連線中傳送的位元組流中的每一個位元組都按順序編號。每一個報文段首部的序號都表示該報文段的第一個位元組的序號;

確認號:佔32位字,是接收方告訴傳送方它所期望下一個報文段應該傳來的第一個位元組的序號。確認號與序號組合在一起來看:
傳送方第一次傳送資料,序號初始為0,而每段資料的大小假設為100,則接收方收到第一次的資料以後,確認號就會變成101,然後傳送給傳送方,這時候傳送方的序號就會變成101,當接收方接收到第二次的資料以後,確認號就會變成100+101=201,以此類推

資料偏移:佔4位字,指出tcp報文段首部的長度,資料偏移的單位是以32為字位一個單位的,也就是一個單位佔4個位元組,最大可表示的長度為60位元組;

保留:佔6位字,保留欄位以備日後使用;

標誌符:佔6位字,標誌符分為URG、ACK、PSH、RST、SYN、FIN六個,每一個標誌符佔1位字:
- URG:緊急,表明該報文段有緊急的資料,必須要馬上向上傳遞資料,相當於插隊。最經典的例子就是SSH遠端連線主機的時候,如果遇到突發事件,需要馬上關閉程序,按下control+c,這時候這條命令就會附上URG=1的標識,要求接收方馬上上交該報文段;
- ACK:確認,ACK必須置為1的時候該報文段才有效,當建立起連線以後每一次的資料傳遞ACK都必須為1;
- PSH:推送,當兩個應用程式進行互動的時候,一方希望它所傳送的資訊能夠立刻得到對方的響應,這時候就把PSH置為1,接收方收到這段資訊後應當不用等到快取填滿再向上傳遞資料;
- RST:復位,當TCP的連接出現嚴重的錯誤、崩潰的時候就需要傳送一個帶有RST=1的報文,告訴另一方這一個連線需要重連;
- SYN:同步,在TCP三次握手的過程中需要使用,當SYN=1且ACK=0時表明這是第一次握手,客戶機向服務端請求連線,當SYN=1且ACK=1時表明這是第二次握手,服務端向客戶端表明它能正常接收資訊;
- FIN:終止,當FIN=1時表明這一次連線所傳送的資料已經發送完畢,並要求釋放連線;

視窗大小:佔16位字,這是接收方告訴傳送方它每次能容納多大的資料,因為快取的限制,每一個報文段不可以無限的大,所以需要視窗值來限制資料的大小,具體可看滑動視窗實現流量控制

檢驗和:佔16位字,報文段的檢驗和檢驗方式不同於資料報的檢驗和的檢驗方式,報文段在計算檢驗和的時候需要在TCP的報文段首部之前再加一個偽首部,這個偽首部不會發送給表示層,也不會發送給網路層,它只會在運輸層工作,並且計算完畢後就會丟掉。TCP的偽首部格式包含32位源IP地址,32位目的IP地址,8位全0的字元,8位協議,16位TCP使用者資料報的長度。報文段檢驗和的驗證方式與資料報不同的是,報文段的檢驗把資料部分也包含進去了,而資料報僅僅檢驗首部的資訊;

緊急指標:佔16位字,緊急指標僅僅在URG=1時才有作用,指出了緊急資料的末尾在報文段的位置,當所有緊急資料都發送完畢以後,TCP就告訴應用程式可以處理正常的資料了。當視窗值為0時也可以傳送緊急資料;

參考資料:
維基百科、《計算機網路第6版》謝希仁、百度百科