计算机网络协议包头赏析-TCP
轉載自博客地址為http://roclinux.cn。
仍然先把TCP報文段的格式放在這里,然后我們看圖說話:
TCP報文段也分為首部和數據兩部分,首部默認情況下一般是20字節長度,但在一些需求情況下,會使用“可選字段”,這時,首部長度會有所增加。
下面,我們仍然延續講解IP協議的思路,針對不同的域,分別進行講解:
【源端口】- 16bit
來源處的端口號;
【目的端口】- 16bit
目的處的端口號;
【序號】- 32bit
每一個TCP報文段都會有一個序號,序號字段的值其實是本報文段所發送的數據的第一個字節的序號。這是因為TCP是面向連接的可靠服務,其每一個字節都會對應一個序號,通過序號來確保服務的可靠性和有序性。
【確認號】- 32bit
確認號,是期望收到對方的下一個報文段的數據的第一個字節的序號。(這句話有些拗口,但是在后面我們講解三次握手和四次揮手時,大家會更深刻的理解這句話的含義)
【數據偏移】- 4bit
其實它本質上就是“首部長度”,因為“數據偏移”是指TCP報文段的數據部分的起始處距離TCP報文段的起始處的距離。(仍然很拗口,但相信你能明白)。
數據偏移總共占4bit,因此最大能表示的數值為15。而數據偏移的單位是“4字節”,此處的設計和IP數據報的設計是完全相同的,所以說TCP報文段首部的長度最長為15×4=60字節,且首部長度必須為4字節的整數倍。
【保留字段】- 6bit
這6bit在標準中是保留字段,我猜測,有兩個目的,第一個是預留除URG/ACK/PSH/RST/SYN/FIN/之外的冗余功能位;第二個是為了對其字節位。
【緊急字段URG】- 1bit
此字段告訴系統此報文段中有緊急數據,應盡快傳送。當URG=1時,
【確認字段ACK】- 1bit
當ACK=1時,表示確認,且確認號有效;當ACK=0時,確認號字段無效。
【推送字段PSH】- 1bit
當PSH=1時,則報文段會被盡快地交付給目的方,不會對這樣的報文段使用緩存策略。
【復位字段RST】- 1bit
當RST為1時,表明TCP連接中出現了嚴重的差錯,必須釋放連接,然后再重新建立連接。
【同步字段SYN】- 1bit
當SYN=1時,表示發起一個連接請求。
【終止字段FIN】- 1bit
用來釋放連接。當FIN=1時,表明此報文段的發送端的數據已發送完成,并要求釋放連接。
【窗口字段】- 16bit
此字段用來控制對方發送的數據量,單位為字節。
一般TCP連接的其中一端會根據自身的緩存空間大小來確定自己的接收窗口大小,然后告知另一端以確定另一端的發送窗口大小。
【校驗和字段】- 16bit
這個校驗和是針對首部和數據兩部分的。
【緊急指針字段】- 16bit
緊急指針指出在本報文段中的緊急數據的最后一個字節的序號。
總結
以上是生活随笔為你收集整理的计算机网络协议包头赏析-TCP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python爬虫实例1
- 下一篇: android 隐藏桌面图标