IP數據報、TCP報文、UDP報文格式

總是記不得TCP/IP協議的各個協議格式,特在此做個記錄,好方便回顧。

信息來自衆多網絡大神們的總結,我再結合自己的理解整理所得。

====================================================================================

一、IP數據報


ps:圖轉自http://blog.csdn.net/ce123/article/details/17453033

  1. 版本 4bit 指IP協議的版本。目前廣泛使用的IP協議版本號爲4(即IPv4),IPv6,目前還處於草案階段。
  2. 首部長度 4bit 單位是字(32bit-4Bytes),即首部長度=0x5(0101),代表首部有5x32bit=160bit(5x4bytes=20bytes)。首部長度大小取值範圍5(20Bytes,常規值,不附加任何可選項)-15(60B)。當IP分組的首部長度不是4字節的整數倍時,必須利用最後的填充字段加以填充。因此數據部分永遠在4字節的整數倍開始,這樣在實現IP協議時較爲方便。首部長度限制爲60字節的缺點是有時可能不夠用。但這樣做是希望用戶儘量減少開銷。
  3. 區分服務 8bit 目前經已很少使用。
  4. 總長度 16bit 首部長度+數據長度,單位是字節。數據報的最大長度爲2^16-1=65535字節。但由於數據鏈路層的最大傳送單元MTU(Maximum Transfer Unit)<65535,所與當一個數據報封裝成鏈路層的幀時,此數據報的總長度(即首部加上數據部分)一定不能超過下面的數據鏈路層的MTU值,若超過則需要分片(因此有上圖的第二行)。
  5. 標識 16bit 軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加1,並將此值賦給標識字段。但這個“標識”並不是序號,因爲IP是無連接服務,數據報不存在按序接收的問題。當數據報由於長度超過網絡的MTU而必須分片時,這個標識字段的值就被複制到所有的數據報的標識字段中。相同的標識字段的值使分片後的各數據報片最後能正確地重裝成爲原來的數據報。
  6. 標誌 3bit 目前只有2位有意義。
    ● 標誌字段中的最低位記爲MF(More Fragment)。MF=1即表示後面“還有分片”的數據報。MF=0表示這已是若干數據報片中的最後一個。
    ● 標誌字段中間的一位記爲DF(Don’t Fragment),意思是“不能分片”。只有當DF=0時才允許分片。
  7. 片偏移 13bit 較長的IP數據報在分片後,某片在原分組中的相對位置(形象理解爲分片後的序列)。也就是說,相對用戶數據字段的起點,該片從何處開始。片偏移以8個字節爲偏移單位。這就是說,每個分片的長度一定是8字節(64位)的整數倍。
  8. 生存時間 8bit TTL(Time To Live),表明是數據報在網絡中的壽命。形象理解爲,IP數據報最大能經過多少個路由器跳轉(每經過一個路由器,TTL--)。防止數據報在網絡中無限循環浪費網絡資源。
  9. 協議 8bit 標誌此數據報攜帶的數據是使用協議類型(例如TCP、UDP等),以便使目的主機的IP層知道應將數據部分上交給哪個處理過程。
  10. 首部檢驗和 16bit 注意這個字段只檢驗數據報的首部,但不包括數據部分(與TCP不同)。這是因爲數據報每經過一個路由器,路由器都要重新計算一下首部檢驗和(一些字段,如生存時間、標誌、片偏移等都可能發生變化)。不檢驗數據部分可減少計算的工作量。
  11. 源IP地址 佔32位。
  12. 目的IP地址 佔32位。

====================================================================================

二、TCP報文

  1. 源端口號 16bit 標識源主機的一個應用進程端口。
  2. 目的端口號 16bit 標識目的主機的一個應用進程端口。
  3. 順序號 32bit 三次握手建立連接後傳輸的TCP報文序列號。2^32-1 後從 0 循環開始。當建立一個新的連接時, SYN 標誌變 1 ,順序號字段包含由這個主機選擇的該連接的初始順序號(即在三次握手時就告訴對方,我發送的分組按照這個序號開始編號
  4. 確認號 32bit 包含發送確認的一端所期望收到的下一個順序號(即在三次握手後傳輸數據時,告訴對方,這個順序號以前的我都已經正確收到,你從這個順序號開始發送)。因此,確認序號應當是上次已成功收到數據字節順序號加 1 。只有 ACK 標誌爲 1時確認序號字段纔有效
  5. 首部長度 4bit 單位是字(32bit-4Bytes),與IP數據報的首部含義同,即首部長度=0x5(0101),代表首部有5x32bit=160bit(5x4bytes=20bytes)。首部長度大小取值範圍5(20Bytes,常規值,不附加任何可選項)-15(60B)。當首部長度不是4字節的整數倍時,必須利用最後的填充字段加以填充。因此數據部分永遠在4字節的整數倍開始。
  6. 保留位 6bit 保留給將來使用,目前必須置爲 0 。
  7. 控制位 6bit 在 TCP 報頭中有 6 個標誌比特,它們中的多個可同時被設置爲 1 。依次爲:
    URG :爲 1 表示緊急指針有效,爲 0 則忽略緊急指針值。
    ACK :爲 1 表示確認號有效,爲 0 表示報文中不包含確認信息,忽略確認號字段。
    PSH :爲 1 表示帶有 PUSH 標誌的數據,指示接收方應該儘快將這個報文段交給應用層而不等待緩衝區裝滿。
    RST :用於復位由於主機崩潰或其他原因而出現錯誤的連接。它還可以用於拒絕非法的報文段和拒絕連接請求。一般情況下,如果收到一個 RST 爲 1的報文,那麼一定發生了某些問題。
    SYN :同步序號,爲 1 表示連接請求,用於建立連接和使順序號同步( synchronize )。
    FIN :用於釋放連接,爲 1 表示發送方已經沒有數據發送了,即關閉本方數據流。
  8. 窗口大小 16bit TCP採用滑動窗口協議(自行查資料),此子段標誌窗口的大小。表示從確認號(確認已經正確接受的數據順序號)開始,本報文的源方可以接收的字節數,即源方接收窗口大小。窗口大小是一個 16bit 字段,因而窗口大小最大爲 65535
  9. 校驗和 16bit 此校驗和是對首部+數據的校驗和。此處與IP數據報不同。這是一個強制性的字段,一定是由發送端計算和存儲,並由接收端進行驗證。
  10. 緊急指針 16bit 只有當 URG 標誌置 1 時緊急指針纔有效。緊急指針是一個正的偏移量,和順序號字段中的值相加表示緊急數據最後一個字節的序號。 TCP 的緊急方式是發送端向另一端發送緊急數據的一種方式。
  11. 選項+填充 不定長 最常見的可選字段是最長報文大小,又稱爲 MSS(Maximum Segment Size) 。每個連接方通常都在通信的第一個報文段(爲建立連接而設置 SYN標誌的那個段)中指明這個選項,它指明本端所能接收的最大長度的報文段。選項長度不一定是 32 位字的整數倍,所以要加填充位,使得報頭長度成爲整字數。
  12. 數據 不定長 報文段中的數據部分是可選的(即有時可以沒有數據,只有TCP首部)。在一個連接建立和一個連接終止時,雙方交換的報文段僅有 TCP 首部。如果一方沒有數據要發送,也使用沒有任何數據的首部來確認收到的數據。在處理超時的許多情況中,也會發送不帶任何數據的報文段。
====================================================================================
三、UDP報文
  1. 源端口號 16bit 標識源主機的一個應用進程端口。
  2. 目的端口號 16bit 標識目的主機的一個應用進程端口。
  3. 總長度 16bit 首部長度+數據長度,單位是字節(TCP報文並沒有總長度
  4. 校驗和 16bit 檢驗UDP首部和數據部分的正確性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章