2017-08-30 93 views

回答

2

如果'DF'位設置在數據包上,那麼通常會將數據包大於MTU的數據包碎片化(並可能按順序傳送),而不會丟棄數據包。期望路由器發送「ICMP Fragmentation Needed」數據包,允許發送主機在通往目標主機的路徑上計算較低的MTU。然後,發送端將減少其對連接的路徑MTU(最大傳輸單元)的估計並以較小的段重新發送。該過程被稱爲PMTU-D(「路徑MTU發現」)。

碎片會導致CPU處理的額外開銷,以在另一端重新組裝數據包(並處理丟失的碎片)。

通常,'DF'位是IP堆棧的可配置參數。我知道ping實用程序和設置DF的選項。

避免碎片通常很有用,因爲除了分段和重新組裝的CPU利用率之外,它可能會影響吞吐量(如果丟失的碎片需要重新傳輸)。出於這個原因,通常需要知道最大傳輸單元。因此,'路徑MTU發現'用於找到這個大小,通過簡單地設置DF位(例如對於ping)

0

我能想到的唯一情況是您可能想要設置此標誌的位置是:

  1. 如果你正在構建一個客戶端 - 服務器應用程序,其中 你不希望另一方必須處理分段 數據包,而寧願丟失數據包。
  2. 或者如果您在 網絡中有一組非常具體的限制,可能是由帶寬問題或特定的防火牆行爲引起的。

除了這些特定的情況下,你可能永遠不會碰它。

從RFC 791:

因特網的數據報的碎片是在必要時它 起源於一個本地網,其允許大的分組大小和必須 橫移一個本地網,其限制數據包發送到更小的尺寸,以到達 其目的地。

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

應用程序是否可以設置此標誌? 是的,如果您編寫足夠低的代碼,您正在處理IP標頭。問題的這一部分對於給出更具體的答案有點寬泛,您應該先弄清楚是否想在設置它之前先設置它。