有時,當流量通過通用路由封裝(GRE)通道時,您可以成功使用ping指令和Telnet,但無法下載網際網路頁面或使用檔案傳輸通訊協定(FTP)傳輸檔案。 本文說明此問題的常見原因,並提供幾個解決方法。
本文檔需要對GRE有基本的瞭解。請參閱這些檔案瞭解有關GRE的詳細資訊:
本文件所述內容不限於特定軟體和硬體版本。
使用命令查詢工具(僅供已註冊客戶使用)可查詢有關本文檔中所用命令的更多資訊。
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
本檔案使用以下網路圖作為範例:
在上圖中,當客戶端想要訪問Internet上的頁面時,它會與Web伺服器建立TCP會話。在此過程中,使用者端和Web伺服器會公佈其最大區段大小(MSS),並互相指出它們可以接受最大為此大小的TCP區段。在收到MSS選項後,每台裝置都會計算可傳送資料段的大小。這稱為傳送最大片段大小(SMSS),且等於兩個MSS中的較小者。有關TCP最大區段大小的詳細資訊,請參閱RFC 879 。
為了便於討論,假設上例中的Web伺服器確定它最多可以傳送1500位元組的資料包。因此,它會向使用者端傳送1500位元組的封包,並在IP標頭中設定「不分段」(DF)位元。當資料包到達R2時,路由器會嘗試將其封裝到隧道資料包中。若是GRE通道介面,IP最大傳輸單元(MTU)會比實際傳出介面的IP MTU小24位元組。對於表示通道介面上的IP MTU為1500減24或1476位元組的乙太網路傳出介面。
R2正在嘗試將1500位元組的IP封包傳送到1476位元組的IP MTU介面。由於不可能這樣做,R2需要對資料包進行分段,建立一個大小為1476位元組的資料包(資料和IP報頭)和一個大小為44位元組的資料包(24位元組的資料和一個大小為20位元組的新IP報頭)。然後R2將這兩個封包封裝在一起,分別得到1500和68位元組的封包。現在,這些封包可以透過實際傳出介面傳送,該介面具有1500位元組的IP MTU。
但是請記住,R2收到的資料包已設定DF位。因此,R2不能將資料包分段,需要指示Web伺服器傳送更小的資料包。這是透過傳送網際網路控制訊息通訊協定(ICMP)型別3代碼4封包(目的地無法連線;需要分段和設定DF)。 此ICMP消息包含Web伺服器使用的正確MTU,伺服器應接收此消息並相應地調整資料包大小。
附註: 使用 debug 指令之前,請先參閱有關 Debug 指令的重要資訊。
您可以通過啟用debug ip icmp命令檢視R2傳送的ICMP消息:
ICMP: dst (10.10.10.10) frag. needed and DF set unreachable sent to 10.1.3.4
在通往Web伺服器的路徑上封鎖ICMP訊息時,會發生常見問題。發生這種情況時,ICMP資料包永遠不會到達Web伺服器,從而阻止了客戶端和伺服器之間的資料傳輸。
這四種解決方案之一應能解決問題:
瞭解ICMP訊息沿途的封鎖位置,並檢視是否可允許該訊息。
將客戶端網路介面上的MTU設定為1476位元組,迫使SMSS變小,因此資料包到達R2時不必進行分段。但是,如果更改客戶端的MTU,還應更改與此客戶端共用網路的所有裝置的MTU。在乙太網網段上,這可以是大量裝置。
在R2和網關路由器之間使用Proxy伺服器(或者Web快取引擎),讓代理伺服器請求所有Internet頁面。
如果GRE通道執行的連結的MTU可能大於1500位元組,且加上通道標頭,則另一個解決方案是在GRE端點路由器之間的所有介面和連結上的MTU增加到1524(GRE額外負荷為1500加24)。
如果上述選項不可行,則這些選項可能非常有用:
使用策略路由清除和設定資料IP封包中的DF位元(Cisco IOS®軟體版本12.1(6)及更新版本提供此功能)。
interface ethernet0 ... ip policy route-map clear-df !--- This command is used to identify a route map !--- to use for policy routing on an interface, !--- use the ip policy route-map command in !--- interface configuration mode. route-map clear-df permit 10 match ip address 101 set ip df 0 !--- This command is used to change the Don't Fragment (DF) !--- bit value in the IP header, use this command !--- in route-map configuration mode. access-list 101 permit tcp 10.1.3.0 0.0.0.255 any
這將允許資料IP資料包在GRE封裝之前進行分段。然後,接收端主機必須重組資料IP資料包。這通常不是問題。
更改經過路由器的SYN封包上的TCP MSS選項值(IOS 12.2(4)T及更新版本提供此功能)。 這會降低TCP SYN封包中的MSS選項值,使其小於ip tcp adjust-mss value 指令中的值,在本案例中為1436(MTU減去IP、TCP和GRE標頭的大小)。 終端主機現在傳送不大於此值的TCP/IP資料包。
interface tunnel0 ... ip tcp adjust-mss 1436 !--- This command is used to adjust the maximum segment size (MSS) !--- value of TCP SYN packets going through the router. !--- The maximum segment size is in the range from 500 to 1460.
最後一個選項是將通道介面上的IP MTU增加至1500(IOS 12.0及更新版本提供此功能)。 但是,增加通道IP MTU會導致通道封包分段,因為原始封包的DF位元沒有複製到通道封包標頭。在此案例中,GRE通道另一端的路由器必須重組GRE通道封包,才能移除GRE標頭並轉送內部封包。IP資料包重組在進程交換模式下完成並使用記憶體。因此,此選項會顯著降低通過GRE通道的資料包吞吐量。
interface tunnel0 ... ip mtu 1500 !--- This command is used to set the maximum transmission unit (MTU) !--- size of IP packets sent on an interface. The minimum size !--- you can configure is 128 bytes; the maximum depends on the interface medium.
最後,無法透過GRE通道瀏覽Internet的最常見原因是上述分段問題。解決方式為允許ICMP封包或使用上述任一解決方案解決ICMP問題。
修訂 | 發佈日期 | 意見 |
---|---|---|
1.0 |
10-Aug-2005 |
初始版本 |