?? rfc1191.txt
字號:
組織:中國互動出版網(http://www.china-pub.com/)
RFC文檔中文翻譯計劃(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
譯者:馬東輝(eaststone ma_donghui@263.net)
譯文發布時間:2001-4-12
版權:本中文翻譯文檔版權歸中國互動出版網所有。可以用于非商業用途自由轉載,但必須保留本文檔的翻譯及版權信息。
Network Working Group J. Mogul
Request for Comments: 1191 DECWRL
Obsoletes: RFC 1063 S. Deering
Stanford University
November 1990
RFC1191 路徑MTU發現
(RFC1191 Path MTU Discovery)
本備忘錄狀態
This memo provides information for the Internet community. It does
not specify an Internet standard of any kind. Distribution of this
memo is unlimited.
摘要
此備忘錄描述了一種動態發現因特網上任意一條路徑的最大傳輸單元(MTU)的技術。它對這條路徑上的路由器產生的一種ICMP消息作了很小的修改。在路徑上的路由器如果沒有作出這樣的改變,這種技術將不能發現正確的路徑MTU,但是這種技術選擇出來的路徑MTU將和當前使用的其它方法選擇出來的MTU同樣準確,而且在許多情況下更加精確。
致謝
這個建議是IETF MTU發現工作組的產品。
這種被建議的機制首先由Geof Cooper [2]提出,他在兩個簡短的段落中陳述了所有基本的思想,IETF MTU發現工作組用了幾個月的時間重新修訂。
目錄
1. 簡介 2
2. 協議概覽 2
3, 主機規范 3
3.1 TCP MSS選項 4
4. 路由器規范 5
5. 主機對老式報文的處理 5
6. 主機實現 6
6.1 分層 7
6.2 存儲PMTU信息 7
6.3 清除過時的PMTU信息 8
6.4 TCP層的行為 9
6.5 其它傳輸協議的問題 10
6.6 管理接口 11
7. 路徑MTU的可能值 11
7.1 一種較好的檢測PMTU增長的方法 12
8. 安全性的考慮 13
參考書目: 13
作者地址: 14
1. 簡介
當一臺IP主機有大量的數據要發送給另一臺主機的時候,數據是作為一系列的IP數據報傳輸。數據報最好具有在從源點到目的點的路徑上不需要分片的最大尺寸。(避免分片的情況,見[5]。)這種數據報的尺寸稱作為路徑MTU(PMTU),它等于路徑上每一跳的MTU之中的最小值。當前因特網協議族的缺點就是對一臺主機來說缺乏發現任意一條路徑的PMTU的標準機制。
注意:路徑MTU在[1]中被稱作為“用于發送的有效MTU" (EMTU_S).
PMTU與一條路徑相關,路徑是IP的源地址、目的地址,也許還有
服務類型(TOS)的特定組合。
當前實際[1]采用的是576和第一跳MTU中的較小者作為任何不與源地址網絡或者子網直接相連的目的地址的PMTU。在許多情況下,這導致了使用比必須要求小的數據報,因為許多路徑的PMTU比576大。一臺主機發送比路徑MTU小的多的數據報是浪費因特網的資源,達不到最優的吞吐量。而且,當前的實現在所有的情況下不防止分片,因為一些路徑的MTU比576小。
期望未來的路由協議將能夠在一個路徑區域中提供準確的PMTU信息,盡管也許不能越過多級路由層次。還要多久這種未來的路由協議才能廣泛應用現在還不清楚。所以在以后的幾年中,因特網在所有主機和路由器被修改前為了不浪費資源需要一種簡單的發現PMTU的機制。
2. 協議概覽
在此備忘錄中,我們描述了一種技術,在IP首部使用不分片(DF)比特位動態發現一條路徑的PMTU。基本思想就是源主機開始假定一條路徑的PMTU是它的(已知的)第一跳的MTU,在這條路徑上發送的數據報都設置DF比特位。如果有的數據報太大,不被路徑中的某些路由器分片就不能轉發,那么路由器將丟棄這些數據報,然后返回一個意思為“需要分片,設置了DF位 [7]”的ICMP目的不可達報文。在收到這樣一條報文后(以后稱它為“數據報太大”報文),源主機減小它假定的這條路徑的PMTU。
當主機對PMTU的估計值小到它的數據報不需要分片也能轉發的時候,PMTU發現過程結束。或者,主機可以選擇停止在數據報首部中設置DF比特位來結束發現過程;它可能會這樣做,例如主機想在某些情況下讓數據報分片。通常,主機繼續在所有的數據報中設置DF,這是為了如果路由改變并且新的PMTU減小的時候,將會被發現。
不幸的是,當前指定的數據報太大報文不報告拒絕太大數據報的那一跳的MTU。所以源主機不能準確地判定把它假設的PMTU減小多少。為了彌補這個缺點,我們建議使用當前在數據報太大報文中沒有使用的一個報頭字段來報告減小的那一跳的MTU。這是支持PMTU發現的路由器唯一被指定的改變。
路徑的PMTU可能隨著時間而改變,因為路由的拓撲結構可能改變。PMTU的減小通過數據報太大報文被檢測到,除非主機停止設置沿此路徑的數據報的DF比特位。為了檢測路徑的PMTU值的增加,主機周期地增加它假定的PMTU(如果它已經停止,再重新設置DF比特位)。這幾乎總是導致數據報被丟棄,數據報太大報文產生,因為在大多數情況下,路徑的PMTU不會改變,所以不應該頻繁地做這種工作。
因為這種機制本質上保證了主機接收不到來自另一臺進行PMTU發現的對等者的分片,它可能對與某個不能重新裝配分片的數據報的主機進行互操作有幫助。
3, 主機規范
當主機收到一個數據報太大報文時,它必須基于此報文中的下一跳MTU字段中的值(見第四節),減少對相關路徑的PMTU估計值。因為不同的應用程序有不同的需要,不同的實現體系傾向于不同的策略,所以我們不能在這種情況下指定確定的行為。
我們要求在收到數據報太大報文后,主機必須盡量去避免在最近一段時間再引出這樣的報文。主機可以減小沿著這條路徑發送的數據報的尺寸,或者在這些數據報首部停止設置不分段比特位。顯然,前一種策略在一段時間內可能繼續導致產生數據報太大報文,但是因為這些報文中任何一個(和它們所響應的被丟棄的數據報)都消耗因特網的資源,主機必須強迫PMTU發現過程匯聚。
使用PMTU發現的主機一定要盡可能快地檢測到路徑MTU的減少。主機可以檢測到路徑MTU的增加,但是,因為這樣做需要發送比當前估計的PMTU大的數據報, 而且PMTU很可能不增加,所以這種工作一定不要頻繁地做。檢測一個增加的嘗試(通過發送一個比當前估計值大的數據報)一定不要在數據報太大報文收到后5分鐘內做,或者在前一個成功的增加嘗試之后1分鐘內做。我們建議把計時器設置為它們最小值的兩倍(分別為10分鐘和2分鐘)。
主機必須能夠處理不包括下一跳MTU的數據報太大報文,因為不可能在有限的時間內升級因特網中的所有路由器。來自一個沒有修改的路由器的數據報太大報文中的下一跳MTU字段(新定義的)中的值為0(這對于ICMP規范[7]是必需的,ICMP規范要求“未使用”字段必須要是0)。在第五節中,我們討論響應老式的數據報太大報文(由一個沒有修改的路由器發出)的主機可能遵守的策略。
主機一定不要使對路徑MTU的估計值低于68字節。
主機一定不能增加它對路徑MTU的估計值來響應數據報太大報文的內容。一個通告路徑MTU增加的報文可能是一個在因特網中飄移的過時的數據報,一個作為服務拒絕攻擊一部分的虛假的數據報,或者是由于到目的地址有多條路徑造成的結果。
3.1 TCP MSS選項
作PMTU發現的主機一定要遵守不發送大于576字節的IP數據報的規則,除非它具有接收者的許可。對于TCP連接來說,這意味著主機一定不能發送大于40字節加上它的對等者發來的最大段尺寸(MSS)的數據報。
注意:TCP MSS 被定義為相關的IP數據報尺寸減40[9]。最大IP數據報尺寸的默認值576將導致TCP MSS的默認值是536字節。
"Requirements for Internet Hosts -- Communication Layers" [1]的 4.2.2.6節中陳述了:
一些TCP實現只有當目的主機在一個非直接連接網絡上才發送MSS選項。但是,通常TCP層不可能有適當地信息來作出這種決定,所有它更愿意把決定因特網路徑合適的MTU的工作留給IP層來完成。
實際上,很多TCP實現總是發送MSS選項, 但是,如果目的地不是本地的,把值設置為536。當因特網中充滿了不遵守超過576字節的數據報不發給非本地的目的地址規則的主機的時候,這種行為是正確的。現在大多數主機遵守這個規則,所以對非本地的對等者來說也不必把TCP MSS選項的值限制為536。
而且,這樣做防止發現超過576的PMTU,所以,主機應該不再減少它們在MSS選項中發送的值。MSS選項應該比主機能夠重組的最大數據報(MSS_R,在[1]中定義)的尺寸小40字節; 在許多情況下,這將有65495 (65535 - 40)字節結構上的限制。主機可能發送從它連接網絡上的MTU(對一個多宿主主機來說,是在它所有連接網絡中的最大MTU)得到的MSS值;這應該不會對PMTU發現造成問題,可以阻止一個損壞的對等者發送巨大的數據報。
注意:這時,我們沒有看到發送比連接的網絡最大的MTU還要大的MSS的原因。我們建議主機不使用65495。因為一些IP實現可能有負比特位的錯誤,這種錯誤在在沒有必要使用這么大的MSS的時候被觸發。
4. 路由器規范
路由器不能轉發數據報,是因為數據報超過了下一跳網絡的MTU并且它的不分段比特位被設置, 路由器需要給數據報的源地址返回一個ICMP的目的不可達報文,此報文帶有表示“需要分段,設置了DF位”的代碼。為了支持在此備忘錄中說明的路徑MTU發現技術,路由器必須在ICMP首部字段中低序的16bit中包含下一跳網絡的MTU,這個字段在ICMP規范[7]中被標記為“未使用”。高序的16bit保持未用,必須設置為0。因此,報文具有下面的格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 類型 = 3 | 代碼 = 4 | 校驗和 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 未使用 = 0 | 下一跳 MTU |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet 首部 + 原始數據報中的前 64 bit |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
在下一跳MTU字段中的值是:
沿著原始數據報的路徑,在此路由器上不需分段能夠轉發的最大數據報的用字節表示的尺寸,這個尺寸包含IP首部和IP數據,不包含任何低層的首部。
這個字段不會包含小于68字節的值,因為每一個路由器都“必須不分段轉發68字節的數據報”[8]。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -