目錄

簡介

必要條件

需求

採用元件

慣例

封包分段和ICMP訊息

阻止的ICMP消息

解決方案

進一步的解決方案

相關資訊

簡介

有時，當流量通過通用路由封裝(GRE)通道時，您可以成功使用ping指令和Telnet，但無法下載網際網路頁面或使用檔案傳輸通訊協定(FTP)傳輸檔案。 本文說明此問題的常見原因，並提供幾個解決方法。

必要條件

需求

本文檔需要對GRE有基本的瞭解。請參閱這些檔案瞭解有關GRE的詳細資訊：

- 通用路由封裝

- 站點到站點和外聯網VPN業務場景的配置GRE隧道部分

採用元件

本文件所述內容不限於特定軟體和硬體版本。

使用命令查詢工具(僅供已註冊客戶使用)可查詢有關本文檔中所用命令的更多資訊。

慣例

如需文件慣例的詳細資訊，請參閱思科技術提示慣例。

封包分段和ICMP訊息

本檔案使用以下網路圖作為範例：

在上圖中，當客戶端想要訪問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

阻止的ICMP消息

在通往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問題。

相關資訊

- 使用GRE和IPSEC解決IP分段、MTU、MSS和PMTUD問題

- 哪種VPN解決方案適合您？

- GRE支援頁面

- GRE配置示例

- IP 路由支援頁面

- 技術支援 - Cisco Systems