2016-12-04 65 views
0

假設一個TCP消息包含900個字節的數據和20個字節的TCP報頭。現在,如果我們有一個鏈接可以支持512字節的最大幀大小,那麼我們是否會在傳輸層有足夠小的2個TCP數據包,以便它們可以通過此鏈接發送。還是將它們在數據鏈路層進一步分割?在網絡層的TCP數據包的分段

以下哪個會發生:

Transport layer: h1 data 
Network layer:  h2 h1 data 
data link layer: frame 1 - h3 h2 h1 data-part1 
        frame 2 - h3 h2 h1 data-part2 

OR

data link layer: frame 1 - h3 h2 h1 data-part1 
        frame 2 - h3 data-part2 

回答

1

碎片爲IPv4的DNA的一部分,它在第3層發生針對IPv4。 IPv6已經消除了分段,發送主機只能發送正確大小的數據包(預先分段數據)。

路由器在第3層(網絡層)運行,碎片發生在IPv4的路由器中。如果IPv6數據包對於下一跳來說太大,則它們會被路由器毫不客氣地丟棄,並且ICMPv6消息將被髮送回源主機。

RFC 791, INTERNET PROTOCOL

因特網協議還通過「小 分組」網絡提供了分段和長數據報的重組 ,如果必要的話,用於傳輸。

因特網協議實現了兩個基本功能:尋址和 碎片。

在從一個互聯網模塊到另一個消息的路由, 數據報可能需要遍歷網絡的其最大分組大小大於所述數據報的大小較小 。爲了克服這個困難,在因特網協議中提供了一個分段機制。

碎裂過程的描述:

碎片

碎片因特網的數據報的是必要時,它在一個本地網,其允許大的分組大小發起 ,必須遍歷 本地網絡將數據包限制在較小的範圍內,以達到其目的地 。

互聯網數據報可以標記爲「不分段」。任何互聯網 如此標記的數據報不得在任何 的情況下被互聯網分段。如果標記的互聯網數據報不能分段,不能將 傳送到其目的地,而是將其丟棄爲 。

分片,傳輸和重組通過本地網絡 這對互聯網協議模塊是不可見的被稱爲內聯網 分片並可以使用[6]。

互聯網分段和重組過程需要能夠將數據報分成幾乎任意數量的片段,然後再重新組裝。片段的接收者使用標識字段來確保不同數據報的片段不混合。片段偏移量字段告訴接收器原始數據報中片段的位置爲 。片段偏移量爲 ,長度決定了該片段所覆蓋的原始數據報的部分。 more-fragments標誌指示(通過重置)最後一個片段 。這些字段提供足夠的信息給 重組數據報。

標識字段用於區分一個 數據報的片段與另一個的片段。互聯網數據報的始發協議模塊將標識字段設置爲對於該源 - 目的地對和時間協議必須是唯一的值,該數據報將在因特網系統中活動。一個完整的數據報的協議模塊始發 設置更多的片段標誌爲 零,片段偏移量爲零。

要片段長互聯網數據報,因特網協議模塊(爲 例如,在網關),創建兩個新的互聯網數據報和副本 從長數據報網絡報頭字段的內容到 兩個新的互聯網頭部。長數據報的數據在8字節(64位)邊界上被分成兩部分(第二部分 可能不是8個八位組的整數倍,但第一部分必須是)。 在第一部分NFB中調用8個八位字節塊的數量(對於分段塊的 號碼)。數據的第一部分放在第一個新的互聯網數據報的 中,總長度字段設置爲第一個數據報的長度爲 。 more-fragments標誌被設置爲1。 數據的第二部分被放置在第二個新的互聯網 數據報中,並且總長度字段被設置爲第二數據報的長度 。 more-fragments標誌的值與長數據報中的值相同 。第二個新的互聯網數據報的片段偏移量字段被設置爲數據報長加上NFB的長字段 中的那個字段的值。

此過程可以推廣爲n路分裂,而不是所描述的雙向分裂。

向(在目的地主機例如)裝配因特網的數據報的碎片,因特網 協議模塊結合互聯網 數據報都具有用於四個字段的值相同: 識別,源,目的地和協議。組合是 通過將每個片段的數據部分放置在該片段的互聯網 頭部中的片段偏移所指示的相對位置處來完成。第一個片段的片段偏移量爲零, 最後一個片段將會將more-fragments標誌位重置爲零。