回覆列表
  • 1 # itdyy43402

    任何時候IP層接收到一份要傳送的IP資料報時,它要判斷向本地哪個介面傳送資料(選路),並查詢該介面獲得其MTU。IP把MTU與資料報長度進行比較,如果需要則進行分片。分片可以發生在原始傳送端主機上,也可以發生在中間路由器上。把一份IP資料報分片以後,只有到達目的地才進行重新組裝(這裡的重新組裝與其他網路協議不同,它們要求在下一站就進行進行重新組裝,而不是在最終的目的地)。重新組裝由目的端的IP層來完成,其目的是使分片和重新組裝過程對運輸層(TCP和UDP)是透明的,除了某些可能的越級操作外。已經分片過的資料報有可能會再次進行分片(可能不止一次)。IP首部中包含的資料為分片和重新組裝提供了足夠的資訊。回憶IP首部(圖3-1),下面這些欄位用於分片過程。對於傳送端傳送的每份IP資料報來說,其標識欄位都包含一個唯一值。該值在資料報分片時被複制到每個片中(我們現在已經看到這個欄位的用途)。標誌欄位用其中一個位元來表示“更多的片”。除了最後一片外,其他每個組成資料報的片都要把該位元置1。片偏移欄位指的是該片偏移原始資料報開始處的位置。另外,當資料報被分片後,每個片的總長度值要改為該片的長度值。最後,標誌欄位中有一個位元稱作“不分片”位。如果將這一位元置1,IP將不對資料報進行分片。相反把資料報丟棄併發送一個ICMP差錯報文(“需要進行分片但設定了不分片位元”,見圖6-3)給起始端。在下一節我們將看到出現這個差錯的例子。當IP資料報被分片後,每一片都成為一個分組,具有自己的IP首部,並在選擇路由時與其他分組獨立。這樣,當資料報的這些片到達目的端時有可能會失序,但是在IP首部中有足夠的資訊讓接收端能正確組裝這些資料報片。儘管IP分片過程看起來是透明的,但有一點讓人不想使用它:即使只丟失一片資料也要重傳整個資料報。為什麼會發生這種情況呢?因為IP層本身沒有超時重傳的機制——由更高層來負責超時和重傳(TCP有超時和重傳機制,但UDP沒有。一些UDP應用程式本身也執行超時和重傳)。當來自TCP報文段的某一片丟失後,TCP在超時後會重發整個TCP報文段,該報文段對應於一份IP資料報。沒有辦法只重傳資料報中的一個數據報片。事實上,如果對資料報分片的是中間路由器,而不是起始端系統,那麼起始端系統就無法知道資料報是如何被分片的。就這個原因,經常要避免分片。文獻[KentandMogul1987]對避免分片進行了論述。使用UDP很容易導致IP分片(在後面我們將看到,TCP試圖避免分片,但對於應用程式來說幾乎不可能強迫TCP傳送一個需要進行分片的長報文段)。我們可以用sock程式來增加資料報的長度,直到分片發生。在一個乙太網上,資料幀的最大長度是1500位元組(見圖2-1),其中1472位元組留給資料,假定IP首部為20位元組,UDP首部為8位元組。我們分別以資料長度為1471,1472,1473和1474位元組執行sock程式。最後兩次應該發生分片:bsdi%sock-u-i-nl-w1471svr4discardbsdi%sock-u-i-nl-w1472svr4discardbsdi%sock-u-i-nl-w1473svr4discardbsdi%sock-u-i-nl-w1474svr4discard相應的tcpdump輸出如圖11-7所示。前兩份UDP資料報(第1行和第2行)能裝入乙太網資料幀,沒有被分片。但是對應於寫1473位元組的IP資料報長度為1501,就必須進行分片(第3行和第4行)。同理,寫1474位元組產生的資料報長度為1502,它也需要進行分片(第5行和第6行)。當IP資料報被分片後,tcpdump打印出其他的資訊。首先,frag26304(第3行和第4行)和frag26313(第5行和第6行)指的是IP首部中標識欄位的值。分片資訊中的下一個數字,即第3行中位於冒號和@號之間的1480,是除IP首部外的片長。兩份資料報第一片的長度均為1480:UDP首部佔8位元組,使用者資料佔1472位元組(加上IP首部的20位元組分組長度正好為1500位元組)。第1份資料報的第2片(第4行)只包含1位元組資料—剩下的使用者資料。第2份資料報的第2片(第6行)包含剩下的2位元組使用者資料。在分片時,除最後一片外,其他每一片中的資料部分(除IP首部外的其餘部分)必須是8位元組的整數倍。在本例中,1480是8的整數倍。位於@符號後的數字是從資料報開始處計算的片偏移值。兩份資料報第1片的偏移值均為0(第3行和第5行),第2片的偏移值為1480(第4行和第6行)。跟在偏移值後面的加號對應於IP首部中3bit標誌欄位中的“更多片”位元。設定這一位元的目的是讓接收端知道在什麼時候完成所有的分片組裝。最後,注意第4行和第6行(不是第1片)省略了協議名(UDP)、源埠號和目的埠號。協議名是可以打印出來的,因為它在IP首部並被複制到各個片中。但是,埠號在UDP首部,只能在第1片中被發現。傳送的第3份資料報(使用者資料為1473位元組)分片情況如圖11-8所示。需要重申的是,任何運輸層首部只出現在第1片資料中。另外需要解釋幾個術語:IP資料報是指IP層端到端的傳輸單元(在分片之前和重新組裝之後),分組是指在IP層和鏈路層之間傳送的資料單元。一個分組可以是一個完整的IP資料報,也可以是IP資料報的一個分片。

  • 中秋節和大豐收的關聯?
  • 朝花夕拾每段的旁批怎麼寫?