簡介
本文描述當您的配置包括Web快取通訊協定(WCCP)和路徑最大傳輸單元(MTU)發現時,路由器捨棄封包時遇到的問題,並且提供了問題的解決方案。
背景資訊
前期
單獨檢視時,許多功能在處理特定問題時非常出色。不過,有時候,如果將兩種或三種技術相結合,就會產生一些令人尷尬的行為,而您必須引入其他特徵或應對方法才能使其正常工作。例如,使用生成樹和開放最短路徑優先(OSPF)以及第2層(L2)收斂比OSPF(如果使用最小失效間隔,則為1)花費更長(20秒),但用多生成樹(MST)替換生成樹後,它再次正常工作。
在WCCP和路徑MTU探索之間已觀察到相同的互通性行為;許多人認為這是通用路由封裝(GRE)報頭問題。但是本檔案將說明真正的原因。
路徑MTU發現和WCCP如何獨立工作
路徑MTU探索
每行對資料包的大小都有自己的限制。如果傳送的封包大於支援的封包,就會遭到捨棄。途中L3裝置(路由器)的角色之一是負責將大型資料包從一條線路分割到另一條線路,以確保端到端通訊對每條線路的功能透明。
但是,有時終端主機的配置方式會導致其資料包無法截斷(例如,加密檔案、語音呼叫)。此資訊是透過IP標頭中的「不分段(DF)」位元傳遞的。路由器捨棄此類封包,但路由器嘗試透過網際網路控制訊息通訊協定(ICMP)訊息(型別3 — 無法到達目的地,代碼4 — 需要分段,但已設定DF位元)向終端主機報告。這樣,主機就知道將來會傳送較小的封包。
這是路徑MTU發現的核心。您可以傳送已設定DF位元的大型封包,以瞭解它們是朝著結尾傳送,還是如前所述接收ICMP報告。確定可行的最大資料包大小後,將其用於任何進一步的通訊。如需詳細資訊,請參閱RFC 1191。
預設情況下,網路安全裝置(WSA)採用路徑MTU發現。因此,其所有產生的封包都使用預設組態設定DF位元。
WCCP
如果您需要在他人不知情的情況下對Web流量強制實施網路安全,則可以通過不可見的代理運行其流量。WCCP是用於攔截裝置(路由器/防火牆)和Web快取引擎/代理(本例中為WSA)之間通訊的協定。
此圖說明此場景中的流量傳輸方式:
它的工作方式如下:
- 客戶端傳送帶有IP源、其IP地址(客戶端IP地址)和目標伺服器IP地址的HTTP GET。
- 防火牆或路由器會攔截HTTP GET,並通過WCCP GRE或純L2將其轉送到Web快取/WSA。源仍是客戶端IP地址,目標仍是Web伺服器IP地址。
- WSA檢查請求,如果請求合法,則將其映象到Web伺服器。根據您是否啟用了客戶端IP地址欺騙,這裡的目標IP地址是Web伺服器IP地址,而源IP地址可能是WSA或客戶端。在本範例中,這無關緊要,因為兩種情況下的返回流量都必須命中WSA。
- 在WSA處檢查返回流量。
- WSA使用源IP地址、ALWAYS網路伺服器IP地址(因此客戶端不會受到懷疑)和目標客戶端IP地址將響應傳送到客戶端。
問題
如果圖中的一台路由器必須將流量分段,會發生什麼情況?WSA將DF位元放在封包編號5上,但必須將其分段。路由器將其捨棄,並告訴傳送者需要分段,但已設定DF位元(ICMP型別3代碼4)。畢竟,RFC 1191現在必須工作,傳送者必須降低其封包大小。
使用WCCP時,來源IP位址是Web伺服器IP位址,因此此ICMP從來不會到達WSA;相反,它會嘗試前往實際的Web伺服器(請記住,底部的此路由器並不知道WCCP)。這就是將WCCP和路徑MTU發現結合在一起有時會破壞網路設計的方式。
解決方案
解決此問題有四種方法:
- 發現實際MTU,然後在WSA上使用etherconfig降低介面的MTU。請記住,TCP標頭是60,IP是20,而使用ICMP時,會將8位元組新增到IP標頭。
- 禁用路徑MTU發現(路徑發現CLI WSA命令)。這會導致TCP MSS為536,這可能會導致效能問題。
- 更改網路,以便WSA和客戶端之間沒有L3分段。
- 在相關介面上的每台Cisco路由器上使用ip tcp mss-adjust 1360(或其他計算的數字)命令。
附加說明
調查此問題時,發現如果您將代理明確設定為客戶端幾分鐘,然後刪除,則問題會在接下來的4到5小時內得到解決。這是因為在WSA和客戶端之間的路徑MTU發現機制在顯式模式下工作這一事實。WSA發現路徑MTU後,會將其與發現的TCP MSS一起儲存到內部表以供參考。顯然,此表每4到5個小時刷新一次,這使得解決方案在經過這麼多時間後不再工作。