本檔案將說明L2TP連結上的分段和重組,並說明最大傳輸單元(MTU)調整如何協助緩解部分相關問題。
本文檔的讀者應瞭解:
通用虛擬專用撥接網路(VPDN)組態指令
常規IP主題,例如分段、重組、MTU、封裝、報頭等。
此處討論的大部分組態和功能增強功能都在Cisco IOS®軟體版本12.1T或12.2T及更新版本中提供。但是,有關詳細資訊,請參閱下面的各個部分。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您在即時網路中工作,請確保在使用任何命令之前瞭解其潛在影響。
如需文件慣例的詳細資訊,請參閱思科技術提示慣例。
有時,您必須對通道封裝的封包進行分段,以便線上路上傳輸這些封包。以下提供範例。
在使用L2TP over UDP的情況下,所有協定的開銷都包括額外的一組IP、UDP和L2TP報頭。IP報頭為20位元組,UDP報頭為8位元組,L2TP報頭通常為12位元組。L2TP報頭的12位元組包括:
版本和標誌欄位(2個位元組)
通道id和會話id欄位(每個2位元組)
2位元組的填充偏移量
4位元組點對點通訊協定(PPP)封裝
此圖顯示更多詳細資訊:
如果啟用資料排序(在Cisco裝置上預設禁用該排序),則必須為Ns和Nr欄位新增額外4個位元組。新增IP、UDP和L2TP報頭,檢視L2TP over UDP為資料包新增40位元組的協定封裝。
將1500位元組的IP封包封裝到L2TP中時,封裝的封包會變成1540位元組(1500 + 40位元組的IP、UDP和L2TP標頭)。 您必須將封包分段,以便透過標準乙太網路型別介面(具有1500位元組的MTU)傳輸封包。 封裝的封包分段為兩份。第一個片段包括1500位元組(原始IP封包的1460位元組+ L2TP封裝的40位元組)。 第二個片段由60位元組組成(原始IP封包的最後40位元組+ 20位元組的IP額外負荷)。
注意:只有第一個片段包含L2TP標頭;第二個片段僅包含IP報頭。這允許L2TP對等路由器(無論是LAC還是LNS)將兩個片段重組為原始的1540位元組通道封裝封包。
使用使用者資料包通訊協定(UDP)的第2層通道通訊協定(L2TP)和其他第2層和第3層IP型通道通訊協定所面臨的其中一個問題就是通道通訊協定的額外負荷會增加通道封裝封包的大小。原始封包大小已滿時,您必須將通道封裝的封包分段,以便線上路上傳輸該封包。
在L2TP存取集中器(LAC)和L2TP網路伺服器(LNS)上分段和重組L2TP封包所造成的問題之一是,在Cisco IOS軟體中,分段和重組是在處理層級完成的。當在LNS上聚合大量L2TP會話和流量時,進程交換會顯著降低效能。因此,非常希望減少或消除在L2TP交換路徑中對分段和重組的需求。
使用本文中介紹的方法之一調整最大傳輸單位(MTU)以解決此問題。
Cisco IOS軟體中的各種組態和功能均設計為通過調整MTU來避免在L2TP交換路徑中進行分段和重組。
使用ip mtu命令在虛擬模板介面上配置較低的IP MTU。設定較低的IP MTU會強制路由器捨棄超過IP MTU並在IP標頭中設定DF(不分段)位元的任何IP封包。然後路由器會產生Internet控制訊息通訊協定(ICMP)型別3主機無法連線,代碼4需要分段訊息前往封包的來源(原始主機)。 此訊息表示介面的IP MTU,以便來源可以縮小封包大小以適應介面。此程式也稱為路徑MTU偵測(PMTUD)。 如需詳細資訊,請參閱RFC 1191 。將IP MTU配置為最大IP資料包大小,當新增完整的L2TP報頭時,該大小不會超過LAC和LNS之間的PMTU。對於1500位元組的PMTU和標準40位元組的L2TP標頭,請將IP MTU設定為1460(1500-40位元組標頭)。
如果LAC和LNS之間的PMTU未知(或發生更改),您可以在vpdn-group下配置命令ip pmtu。ip pmtu指令已使用錯誤ID CSCds72714(外部使用者無法檢視)新增到Cisco IOS軟體版本12.2(4)T中。 ip pmtu功能將DF位元從內部封包複製到外部L2TP標頭,並在路由器及其L2TP通道端點之間開啟PMTUD。
Microsoft Windows有一個登錄檔設定,允許您為其PMTU發現啟用回退功能。有關Windows NT的資訊,請參閱Microsoft網站上的以下文章:適用於Windows NT 3.51(Q136970)的PMTU黑洞檢測演算法更 改。
對於Windows 2000/XP,Microsoft文章How to Troubleshoot Black Hole Router Issues(Q314825)介紹Windows中用於避免此問題的各種方法 。本文定義了「黑洞」路由器的術語,描述了定位黑洞路由器的一種方法,並建議了三種方法以避免因黑洞路由器而發生資料丟失。
您還可以啟用IP MTU的自動調整。此功能允許路由器自動調整虛擬存取介面上的IP MTU,以補償L2TP標頭大小和輸出介面的MTU。此功能已使用錯誤ID CSCdr01713(僅限註冊客戶)新增到Cisco IOS軟體版本12.1(5)T中。
注意:僅當虛擬模板介面上未手動配置IP MTU時,才會自動調整IP MTU(使用上一節中的選項)。
最初,此功能預設啟用,沒有禁用方法。錯誤ID CSCdt6753(僅供註冊客戶使用)在Cisco IOS軟體版本12.2(3)和12.2(4)T後來在vpdn-group下新增了命令[no] ip mtu adjust以啟用和停用該功能。預設設定為啟用該功能。此功能沒有命令列介面(CLI)來僅更改L2X連線的預設值,L2X連線不繫結到vpdn-group(例如SGBP啟動的L2F或L2TP隧道)。 由於無法針對多機箱多重連結PPP(MMPPP)拓撲停用該功能,再加上下面描述的PMTUD問題,導致許多使用者投訴。因此,自思科IOS軟體版本12.2(6)和12.2(8)T和更新版本開始,使用錯誤ID CSCdu69834(僅限註冊客戶)將預設值變更為IP MTU自動調整功能停用。
手動和自動調整MTU都取決於終端主機之間的PMTUD。雖然PMTUD在理論上沒問題,但它在Internet上卻無法正常工作。請參閱RFC 2923 ,以取得有關PMTUD如何在Internet上中斷的詳細說明。最大的問題是存在「黑洞」,導致網頁下載似乎在中間流掛起。這些黑洞通常由配置為過濾ICMP消息的防火牆或路由器引起。如果大型封包的來源無法收到路由器傳送的「ICMP主機無法連線」訊息(表示已超過MTU),便會無法縮小封包大小。相反,它會繼續嘗試使用DF位元集來回傳輸同一個封包。LNS會捨棄這些封包,因為這些封包超過PMTU,因此連線會停止回應。
由於依靠PMTUD偵測L2TP通道上的IP MTU是否較小存在問題,Cisco在Cisco IOS軟體版本12.2(4)T中增加了TCP最大片段大小(MSS)調整功能。
Cisco IOS軟體版本12.2(4)T和更新版本提供由Bug ID CSCds6957(僅供註冊客戶使用)新增的TCP最大區段大小調整功能,該功能允許路由器在終端主機傳送的傳入和傳出同步(SYN)封包中修改通告的TCP MSS。通過將TCP MSS修改為比通常的預設值1460更低的值,可以消除TCP作為完整資料包的來源。應將TCP MSS調整為某個值,以使具有TCP/IP標頭且封裝在L2TP over UDP中的TCP區段不超過輸出介面的IP MTU。TCP/IP報頭通常為40個位元組,而L2TP over UDP報頭是額外的40個位元組。因此,一般來說,TCP MSS應調整為1420(1500 - 40位元組TCP/IP標頭 — 40位元組L2TP over UDP標頭)。
用於此目的的命令是ip tcp adjust-mss <mss>,它是一個介面級命令。
在L2TP網路中減少分段的最後一個選項需要在點對點通訊協定使用者端上支援最大接收單元(MRU)交涉。PPP中的MRU選項允許對等體通告其最大接收單元是什麼。例如,如果對等裝置通告MRU為1460,則該對等裝置將不會處理負載長於1460位元組的PPP幀。Cisco PPP實現使用介面的MTU作為在PPP協商期間通告的MRU值。如果將MTU設定為預設的1500位元組,則不會通告MRU,因為這是PPP的標準預設值。但是,如果MTU設定為1460,則通告PPP MRU為1460。如果PPP對等體偵聽PPP協商期間通告的MRU並調整該PPP鏈路的MTU(以及間接調整IP MTU),我們可以避免分段。如果通告的PPP MRU為1460,對等體應將IP MTU設定為1460。這反過來會修改對等體在開啟TCP連線時通告的TCP MSS,並避免在L2TP網路上分段。
使用mtu <bytes>命令在虛擬模板介面上配置較低的MTU。同樣,這要求在PPP協商期間,在PPP客戶端上支援偵聽通告的MRU。一個偵聽MRU選項的已知客戶端是Windows XP PPP客戶端。遺憾的是,其他常見部署的PPP客戶端並不遵循所通告的PPP MRU。請參閱PPP客戶端文檔以確定它是否正確使用通告的PPP MRU。當使用代理LCP運行L2TP時,需要進行LCP重新協商,因為MRU選項是在LCP階段協商的。要啟用LCP重新協商,請在vpdn-group下配置lcp renegotiation on-mismatch或lcp renegotiation always。
降低MTU的一個問題是IP MTU也會自動降低。目前無法在虛擬範本介面上設定大於MTU的IP MTU。此專案會透過錯誤ID CSCdx39828作為功能/增強功能要求進行追蹤(外部使用者無法檢視)。
此方法要求客戶端在LCP協商期間偵聽MRU選項。客戶通常混雜在一起:有些人聽講MRU,有些人不聽。忽略MRU的客戶端會遇到自動調整IP MTU一節中所述的PMTUD問題。對於這些使用者端,您可以採取不同的因應措施,透過清除內部IP封包上的DF位元來有效地關閉PMTUD。您可以使用以下配置執行此操作:
interface virtual-template1 ip policy route-map clear-df ! route-map clear-df permit 10 match ip address 101 set ip df 0 ! access-list 101 permit tcp any any
Cisco IOS軟體提供了多種方法來最大化L2TP交換效能。PMTUD是一個理想的解決方案。但是,由於Internet上的問題,它並不總是可靠。Cisco IOS軟體提供一些備用機制,以保持L2TP交換效能高並最大化使用者連線。