TCP/IP具體解釋--UDP數據報中的IP分片



1、UDP首部



2、UDP分片



在第二章,講鏈路層是,提到過以太網。刨除數據幀幀頭。最多傳輸的長度為1500。也就是說,假設一個ip數據報,長度大於1500,則須要分片。
分片方法:
  1. 在ip頭中3位標志,13位片偏移,這倆東西就是用來分片的。
  2. 3位標志中:一個很多其他的片標識。除了最后一個分片,其他分片都要有這個標識,另一個不分片標識,假設置上。則即便IP數據報再長。也不分片。可是會將該IP數據報丟棄,並發送一個ICMP差錯報文給發送端。
  3. 13位片偏移:用於表示相對於起始的偏移量,就是個offset。
  4. 每一個分片都有一個獨立的IP頭,20個字節。

  5. IP的分片和組裝都是在IP層完畢的,其對UDP/TCP網絡層是透明的。
  6. 假設在傳輸過程中,某個分片丟失,則須要重傳整個IP數據報。不能單獨傳遞某個分片,這主要是,假設是中間某個路由器做的分片,起始端也不知道怎樣分片的,所以僅僅能重傳整個IP數據報。

  7. 至於重不重傳。

    則僅僅能有網絡層來決定。TCP會丟包重傳,可是UDP則不會,IP層是沒有丟包重傳機制的。

  8. 傳輸單元,IP層叫IP數據報,鏈路層叫分組

IP報分片例如以下圖所看到的,注意,僅僅有第一個分片有UDP頭,可是每一個分片都有IP首部。


3、ICMP不可達差錯(須要分片)



假設在IP首部設置了不可分片標志。可是達到MTU上限,必須分片。則會丟棄該IP報,返回ICMP不可達差錯。




U D P長度字段指的是U D P首部和U D P數據的字節長度。該字段的最小值為8字節(發送一
份0字節的U D P數據報是O K)。

這個U D P長度是有冗余的。

I P數據報長度指的是數據報全長
(圖3 - 1),因此U D P數據報長度是全長減去I P首部的長度

Host Requirements RFC聲明,U D P檢驗和選項在默認條件下是打開的。

它還聲明,
假設發送端已經計算了檢驗和,那么接收端必須檢驗接收到的檢驗和(如接收到檢驗
和不為0)。可是。很多系統沒有遵守這一點,僅僅是在出口檢驗和選項被打開時才驗證
接收到的檢驗和。


IP分片
     物理網絡層一般要限制每次發送數據幀的最大長度。不論什么時候I P層接收到一份要發送的I P數據報時,它要推斷向本地哪個接口發送數據(選路),並查詢該接口獲得其M T U。I P把M T U與數據報長度進行比較。假設須要則進行分片。分片能夠發生在原始發送端主機上。也能夠發生在中間路由器上。把一份I P數據報分片以后,僅僅有到達目的地才進行又一次組裝(這里的又一次組裝與其它網
絡協議不同。它們要求在下一站就進行進行又一次組裝。而不是在終於的目的地)。又一次組裝由
目的端的I P層來完畢。其目的是使分片和又一次組裝過程對運輸層(T C P和U D P)是透明的,
除了某些可能的越級操作外。已經分片過的數據報有可能會再次進行分片(可能不止一次)。


I P首部中包括的數據為分片和又一次組裝提供了足夠的信息。

對於發送端發送的每份I P數據報來說,
其標識字段都包括一個唯一值。該值在數據報分片時被拷貝到每一個片中(我們如今已經看到
這個字段的用途)。標志字段用當中一個比特來表示“很多其它的片”。

除了最后一片外。其它每
個組成數據報的片都要把該比特置1。

片偏移字段指的是該片偏移原始數據報開始處的位置。
另外,當數據報被分片后。每一個片的總長度值要改為該片的長度值。


最后,標志字段中有一個比特稱作“不分片”位。

假設將這一比特置1,I P將不正確數據報
進行分片。相反把數據報丟棄並發送一個I C M P差錯報文(“須要進行分片但設置了不分片比
特”,見圖6 - 3)給起始端。

在下一節我們將看到出現這個差錯的樣例。
當I P數據報被分片后,每一片都成為一個分組,具有自己的I P首部。並在選擇路由時與
其它分組獨立。這樣,當數據報的這些片到達目的端時有可能會失序。可是在I P首部中有足
夠的信息讓接收端能正確組裝這些數據報片。
雖然I P分片過程看起來是透明的,但有一點讓人不想使用它:即使僅僅丟失一片數據也要重
傳整個數據報。

為什么會發生這樣的情況呢?由於I P層本身沒有超時重傳的機制——由更高層來
負責超時和重傳(T C P有超時和重傳機制,但U D P沒有。

一些U D P應用程序本身也運行超時和
重傳)。當來自T C P報文段的某一片丟失后,T C P在超時后會重發整個T C P報文段,該報文段對
應於一份I P數據報。沒有辦法僅僅重傳數據報中的一個數據報片。其實。假設對數據報分片的
是中間路由器。而不是起始端系統,那么起始端系統就無法知道數據報是怎樣被分片的。就這
個原因,常常要避免分片。



前兩份U D P數據報(第1行和第2行)能裝入以太網數據幀,沒有被分片。可是相應於寫
1 4 7 3字節的I P數據報長度為1 5 0 1,就必須進行分片(第3行和第4行)。同理。寫1 4 7 4字節產生
的數據報長度為1 5 0 2,它也須要進行分片(第5行和第6行)。


當I P數據報被分片后,t c p d u m p打印出其它的信息。首先,frag 26304(第3行和第4
行)和frag 26313(第5行和第6行)指的是I P首部中標識字段的值。
分片信息中的下一個數字。即第3行中位於冒號和@號之間的1 4 8 0,是除I P首部外的片長。
兩份數據報第一片的長度均為1 4 8 0:U D P首部占8字節。用戶數據占1 4 7 2字節(加上I P首部的
2 0字節分組長度正好為1 5 0 0字節)。第1份數據報的第2片(第4行)僅僅包括1字節數據—剩下
的用戶數據。第2份數據報的第2片(第6行)包括剩下的2字節用戶數據。
在分片時,除最后一片外,其它每一片中的數據部分(除I P首部外的其余部分)必須是8
字節的整數倍。在本例中,1 4 8 0是8的整數倍。
位於@符號后的數字是從數據報開始處計算的片偏移值。兩份數據報第1片的偏移值均為0(第3行
和第5行),第2片的偏移值為1 4 8 0(第4行和第6行)。跟在偏移值后面的加號相應於I P首部中3 bit標志
字段中的“很多其它片”比特。

設置這一比特的目的是讓接收端知道在什么時候完畢全部的分片組裝。


最后。注意第4行和第6行(不是第1片)省略了協議名(U D P)、源port號和目的port號。


協議名是能夠打印出來的。由於它在I P首部並被拷貝到各個片中。

可是,port號在U D P首部,
僅僅能在第1片中被發現。


發送的第3份數據報(用戶數據為1 4 7 3字節)分片情況如圖11 - 8所看到的。

須要重申的是。任
何運輸層首部僅僅出如今第1片數據中。


另外須要解釋幾個術語:I P數據報是指I P層端到端的傳輸單元(在分片之前和又一次組裝
之后)。分組是指在I P層和鏈路層之間傳送的數據單元。

一個分組能夠是一個完整的I P數據報。
也能夠是I P數據報的一個分片。


理論上,I P數據報的最大長度是6 5 5 3 5字節。這是由I P首部(圖3 - 1)1 6比特總長度字段所
限制的。

去除2 0字節的I P首部和8個字節的U D P首部。U D P數據報中用戶數據的最長長度為
6 5 5 0 7字節。可是,大多數實現所提供的長度比這個最大值小。


免責聲明!

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



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