TCP/IP包頭結構


TCP包頭結構

TCP(Transmission Control Protocol)傳輸控制協議是一種面向連接的、可靠的、基於字節流的傳輸層協議

TCP包頭結構

端口號取值范圍0~6535  因為十六位二進制構成 2^16
第一行  四層協議必須干的活 傳輸層 把端口號封裝到數據里
第二行  序號: 保證數據的順序  
第三行  確認序號:去要下一個序號同時代表我已經收到了
第四行  首部長度 數據前面的稱之為頭部
       6位標記位 每一個標記位占一位
       URG緊急標記位
       ACK確認標記位
       PSH若置為1這一數據段不在緩存區里等待,直接優先處理
       RST斷開連接標記位
       SYN請求標記位 置一建立連接的過程
       FIN結束標記位 置一釋放連接的過程
第五行  校驗和,目的是保證數據完整性

二層使用的循環冗余算法   CRC算法
四層使用的是反碼相加法            強度較強
    四層偽頭部校驗 --- 12個字節的內容,32源IP,32目標IP,8位保留,8位協議,16位總長度
    
    
注意:不要將確認序號Ack與標志位中的ACK搞混了。確認方Ack=發起方Seq+1,兩端配對

TCP報文各段詳細說明:

  • 源端口和目的端口:  各占 2 字節.端口是傳輸層與應用層的服務接口.傳輸層的復用和分用功能都要通過端口才能實現
  • 序號:  占 4 字節.TCP 連接中傳送的數據流中的每一個字節都編上一個序號.序號字段的值則指的是本報文段所發送的數據的第一個字節的序號
  • 確認號:  占 4 字節,是期望收到對方的下一個報文段的數據的第一個字節的序號
  • 數據偏移/首部長度:  占 4 位,它指出 TCP 報文段的數據起始處距離 TCP 報文段的起始處有多遠.“數據偏移”的單位是 32 位字(以 4 字節為計算單位)
  • 保留:  占 6 位,保留為今后使用,但目前應置為 0
  • 緊急URG:  當 URG=1 時,表明緊急指針字段有效.它告訴系統此報文段中有緊急數據,應盡快傳送(相當於高優先級的數據)
  • 確認ACK:  只有當 ACK=1 時確認號字段才有效.當 ACK=0 時,確認號無效
  • PSH(PuSH):  接收 TCP 收到 PSH = 1 的報文段,就盡快地交付接收應用進程,而不再等到整個緩存都填滿了后再向上交付
  • RST (ReSeT):  當 RST=1 時,表明 TCP 連接中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接
  • 同步 SYN:  同步 SYN = 1 表示這是一個連接請求或連接接受報文
  • 終止 FIN:  用來釋放一個連接.FIN=1 表明此報文段的發送端的數據已發送完畢,並要求釋放運輸連接
  • 檢驗和:  占 2 字節.檢驗和字段檢驗的范圍包括首部和數據這兩部分.在計算檢驗和時,要在 TCP 報文段的前面加上 12 字節的偽首部
  • 緊急指針:  占 16 位,指出在本報文段中緊急數據共有多少個字節(緊急數據放在本報文段數據的最前面)
  • 選項:  長度可變.TCP 最初只規定了一種選項,即最大報文段長度 MSS.MSS 告訴對方 TCP:“我的緩存所能接收的報文段的數據字段的最大長度是 MSS 個字節.” [MSS(Maximum Segment Size)是 TCP 報文段中的數據字段的最大長度.數據字段加上 TCP 首部才等於整個的 TCP 報文段]
  • 填充:  這是為了使整個首部長度是 4 字節的整數倍

IP包頭結構

img

版本號(Version):

長度4比特。標識目前采用的IP協議的版本號。一般的值為0100(IPv4),0110(IPv6)

IP包頭長度(Header Length):

長度4比特。這個字段的作用是為了描述IP包頭的長度,因為在IP包頭中有變長的可選部分。
該部分占4個bit位,單位為32bit(4個字節),即本區域值= IP頭部長度(單位為bit)/(8*4),
因此,一個IP包頭的長度最長為“1111”,即15*4=60個字節。IP包頭最小長度為20字節。

服務類型(Type of Service):

長度8比特。8位 按位被如下定義 PPP DTRC0

PPP:定義包的優先級,取值越大數據越重要

  000 普通 (Routine)

  001 優先的 (Priority)

  010 立即的發送 (Immediate)

  011 閃電式的 (Flash)

  100 比閃電還閃電式的 (Flash Override)

  101 CRI/TIC/ECP(找不到這個詞的翻譯)

  110 網間控制 (Internetwork Control)

  111 網絡控制 (Network Control)

D 時延: 0:普通 1:延遲盡量小

T 吞吐量: 0:普通 1:流量盡量大

R 可靠性: 0:普通 1:可靠性盡量大

M 傳輸成本: 0:普通 1:成本盡量小

0 最后一位被保留,恆定為0

IP包總長(Total Length):

長度16比特。 以字節為單位計算的IP包的長度 (包括頭部和數據),所以IP包最大長度65535字節。

標識符(Identifier):

長度16比特。該字段和Flags和Fragment Offest字段聯合使用,對較大的上層數據包進行分段(fragment)操作。
路由器將一個包拆分后,所有拆分開的小包被標記相同的值,以便目的端設備能夠區分哪個包屬於被拆分開的包的一部分。

標記(Flags):

長度3比特。該字段第一位不使用。第二位是DF(Don't Fragment)位,DF位設為1時表明路由器不能對該上層數據包分段。
如果一個上層數據包無法在不分段的情況下進行轉發,則路由器會丟棄該上層數據包並返回一個錯誤信息。
第三位是MF(More Fragments)位,當路由器對一個上層數據包分段,則路由器會在除了最后一個分段的IP包的包頭中將MF位設為1。

片偏移(Fragment Offset):

長度13比特。表示該IP包在該組分片包中位置,接收端靠此來組裝還原IP包。

生存時間(TTL):

長度8比特。當IP包進行傳送時,先會對該字段賦予某個特定的值。
當IP包經過每一個沿途的路由器的時候,每個沿途的路由器會將IP包的TTL值減少1。
如果TTL減少為0,則該IP包會被丟棄。這個字段可以防止由於路由環路而導致IP包在網絡中不停被轉發。 

協議(Protocol):

長度8比特。標識了上層所使用的協議。

以下是比較常用的協議號:

  1  ICMP

  2  IGMP

  6  TCP

  17  UDP

  88  IGRP

  89  OSPF

頭部校驗(Header Checksum):

長度16位。用來做IP頭部的正確性檢測,但不包含數據部分。 
因為每個路由器要改變TTL的值,所以路由器會為每個通過的數據包重新計算這個值

起源和目標地址(Source and Destination Addresses):

這兩個地段都是32比特。標識了這個IP包的起源和目標地址。要注意除非使用NAT,否則整個傳輸的過程中,這兩個地址不會改變。
至此,IP包頭基本的20字節已介紹完畢,此后部分屬於可選項,不是必須的部分。

可選項(Options):

這是一個可變長的字段。該字段屬於可選項,主要用於測試,由起源設備根據需要改寫。可選項目包含以下內容:

1、松散源路由(Loose source routing):給出一連串路由器接口的IP地址。IP包必須沿着這些IP地址傳送,但是允許在相繼的兩個IP地址之間跳過多個路由器。

2、嚴格源路由(Strict source routing):給出一連串路由器接口的IP地址。IP包必須沿着這些IP地址傳送,如果下一跳不在IP地址表中則表示發生錯誤。

3、路由記錄(Record route):當IP包離開每個路由器的時候記錄路由器的出站接口的IP地址。

4、時間戳(Timestamps):當IP包離開每個路由器的時候記錄時間。

填充(Padding):

因為IP包頭長度(Header Length)部分的單位為32bit,所以IP包頭的長度必須為32bit的整數倍。
因此,在可選項后面,IP協議會填充若干個0,以達到32bit的整數倍。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM