圖中括號中的數字表明的是當前域所佔的空間大小,單位是bit位。算法
黃色的是數據鏈路層的頭部,一共14字節網絡
綠色的部分是IP頭部,通常是20字節大數據
紫色部分是TCP頭部,通常是20字節spa
最內部的是數據包內容指針
目的MAC:當前step目的主機的mac地址blog
源MAC:當前step的源主機的mac地址進程
類型:指定網絡層所用的協議類型,一般是IP協議,0x0800路由
版本:記錄數據報屬於哪個版本的協議,如IPv4或IPv6it
首部長度:指明IP頭部長度,單位是字,也就是兩個字節。該域的值最小爲5,就是標準的頭部長度;最大爲15,代表有擴展部分。class
服務類型:用來區分不一樣服務的須要
數據報總長:包含IP頭部的數據報的總長度。注意,這裏不包括鏈路層的頭部,目前最大值是65535字節。
分組ID:這個域的做用是當一個大的數據報被拆分時,拆分紅的小的數據段的這個域都是同樣的。
標記:共三個bit,第一個未使用;第二個DF(Don’t Fragment),設置成1表示這個數據包不能被分割,這個是針對路由器的一條指令;第三個MF(MoreFragment),若是一個數據包被分割了,那麼除了最後一個分段之外的全部分段都必須設置爲1,用來表示後面還有更多的分段沒有到達,最後一個設置爲0,用來表示分割的段所有到達。
段偏移量:這個域有13bit,也就是每個數據報最多有8192個分段。每個分段的長度必須是8字節的倍數,也就是說8字節是分段的基本單位,固然分組的最後一個段不作限制。這樣最大的數據報長度爲8*8192=65536字節,比目前限制的最大數據報長度還多1,可以知足對網絡中全部數據報傳送的需求。
生存時間:這是一個生存期計數器,最大爲255s,可是實際上使用的時候用做跳數計數器,當值爲0時數據報被丟棄,用來避免一個數據報太久的逗留在網絡中。
高層協議:這裏和鏈路層的類型做用相同,用來表示更高層的協議,這個數據報裏是TCP
首部校驗和:IP頭部的校驗和
源IP地址:數據報來源主機的IP地址
目的IP地址:數據報目的主機的IP地址
源端口號:數據報來源主機的端口號
目的端口號:數據報目的主機的端口號
注意:源IP地址,目的IP地址,源端口號,目的端口號這四個字段惟一的肯定了一個TCP連接。
TCP序號(sq):發送的TCP的序號,從0開始,實際中這個值就是發送的數據報中內容的字節數,好比我發送的第一個報中sq=0,數據報內容20字節,那麼下一個數據報的sq就應該是21。
捎帶的確認(ack):確認收到上一個數據報,而後act的值是指定本身想要收到的下一個數據報的sq,好比我收到一個數據報的sq=0,數據報內容20字節,那麼個人ack就應該是21,用來標明我sq=0,內容爲20字節的數據報已經收到,我接下來指望收到的是sq=21的數據報。
首部長度:和IP頭部的長度域相似,這個域用來標明TCP頭部的長度,單位也是字。
保留:6bit未使用的域
Flag:從左到右,[URG|ACK|PSH|RST|SYN|FIN]
窗口大小:指定了從被確認的字節算起能夠發送多少個字節。要深刻理解這個域的含義,能夠參看TCP用色控制和慢啓動算法
校驗和:校驗範圍包括TCP頭、數據報內容和概念性僞頭部。概念性僞頭部又包括源IP,目的IP,TCP協議號。
緊急指針:指向數據報中緊急數據最後一個字節的下一個字節。