筆者單位將中國(guó)電信ADSL 8M帶寬升級(jí)為100M光貓接入,即“吉比特?zé)o源光纖接入用戶端設(shè)備(GPON ONU)”接入。升級(jí)后發(fā)現(xiàn)基于UDP協(xié)議的游戲、即時(shí)通信QQ等正常,但基于TCP協(xié)議的有些網(wǎng)頁(yè)打開(kāi)的速度很慢,后發(fā)現(xiàn)與路由器和防火墻端口的MSS值的大小設(shè)置有關(guān)。
網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖1所示,華為路由器A2220-S,安裝在中國(guó)電信GPON ONU和天融信防火墻TG-61040之間,作為第二出口。
在防火墻上通過(guò)策略路由可以決定內(nèi)網(wǎng)用戶由哪個(gè)出口連接Internet。之所以不把GPON ONU直接連接到防火墻,原因是通過(guò)路由器連接后,在防火墻上做策略路由會(huì)更方便些。但是,當(dāng)基于源地址的策略路由指定某臺(tái)內(nèi)網(wǎng)PC通過(guò)路由器AR2220-S由中國(guó)電信的GPON ONU訪問(wèn)外網(wǎng)時(shí),會(huì)出現(xiàn)上述故障現(xiàn)象。

圖1 網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖
中國(guó)電信的GPON ONU安裝好后,用手提電腦直接連接到其千兆LAN口,網(wǎng)頁(yè)打開(kāi)速度正常,說(shuō)明中國(guó)電信已經(jīng)連接好,故障點(diǎn)在單位路由器及以后。省去路由器,GPON ONU直接連接到防火墻后網(wǎng)頁(yè)打開(kāi)速度正常,說(shuō)明防火墻沒(méi)有問(wèn)題。手提電腦直接連接到路由器的G0/0/2端口,有些網(wǎng)頁(yè)的打開(kāi)速度就很慢,說(shuō)明是路由器的問(wèn)題。但該路由器安裝在其他地方使用又很正常。用另一臺(tái)路由器代替這臺(tái)路由器時(shí)也有同樣的故障現(xiàn)象,說(shuō)明路由器的硬件正常,可能是某個(gè)參數(shù)的配置有問(wèn)題。
1.MTU(Maximum Transmission Unit)最大傳輸單元。IP層接收到一份要發(fā)送的IP數(shù)據(jù)時(shí),它要查詢?cè)摻涌诘腗TU值。IP層把MTU與要發(fā)送的數(shù)據(jù)包長(zhǎng)度進(jìn)行比較,如果數(shù)據(jù)包的長(zhǎng)度比MTU值大,那么IP層就需要進(jìn)行分片,分片后的數(shù)據(jù)可以小于或等于MTU。如果設(shè)置強(qiáng)制不分片,IP層在傳輸數(shù)據(jù)時(shí)可能會(huì)出現(xiàn)丟包現(xiàn)象。如果MTU配置過(guò)小而報(bào)文尺寸較大,可能會(huì)造成分片過(guò)多,報(bào)文被QoS隊(duì)列丟棄。
2.MSS(Max Segment Size)TCP的最大報(bào)文段長(zhǎng)度。通信雙方在建立TCP連接時(shí)會(huì)協(xié)商出MSS值,以確定TCP報(bào)文段的最大數(shù)據(jù)長(zhǎng)度。當(dāng)對(duì)端發(fā)送的TCP報(bào)文段的長(zhǎng)度超過(guò)協(xié)商出來(lái)的MSS,報(bào)文會(huì)進(jìn)行分片處理。為了保證TCP報(bào)文不分片,配置過(guò)程中需要注意MSS與MTU的關(guān)系,為了不影響報(bào)文傳輸,MSS值加上報(bào)文開(kāi)銷(TCP首部、IP首部等)不超過(guò)MTU值。但是,如果將MSS設(shè)置為一個(gè)過(guò)小的數(shù)值,而TCP服務(wù)器端接受了該MSS值,那么TCP連接建立后,客戶端就可以通過(guò)一個(gè)應(yīng)用向服務(wù)器提交大量的請(qǐng)求,從而引起服務(wù)器產(chǎn)生大量的應(yīng)答報(bào)文,這可能導(dǎo)致TCP服務(wù)器或網(wǎng)絡(luò)的負(fù)荷大大增加。
3.ADSL是基于PPPoE(PPPoverEthernet)協(xié)議的,PPPoE頭 是6字 節(jié),PPP協(xié)議ID號(hào)兩個(gè)字節(jié),一共要占用8個(gè)字節(jié),而以太網(wǎng)的MTU值為1500,所以上層PPP負(fù)載數(shù)據(jù)不能超過(guò)1492字節(jié),PPP協(xié)商時(shí)協(xié)商的最大接收單元值不能超過(guò)1492字節(jié)。
4.GEM(G-PON Encapsulation Mode,GPON封裝方式)是一種在GPON上封裝數(shù)據(jù)的方式。GEM可以實(shí)現(xiàn)多種數(shù)據(jù)的簡(jiǎn)單、高效的適配封裝,將變長(zhǎng)或者定長(zhǎng)的數(shù)據(jù)分片進(jìn)行統(tǒng)一的適配處理,并提供端口復(fù)用功能,提供和ATM一樣的面向連接的通信。單從幀結(jié)構(gòu)的角度來(lái)說(shuō),GEM與其他數(shù)據(jù)業(yè)務(wù)的成幀方法類似。但GEM是嵌入PON部分中的,也就是在ONU跟OLT兩個(gè)PON口之間才能被識(shí)別,獨(dú)立于OLT的SNI類型或ONU的UNI類型。
5.由于以太網(wǎng)傳輸電氣方面的限制,每個(gè)以太網(wǎng)幀都不能超過(guò)1518字節(jié),對(duì)于大于這個(gè)限制的以太網(wǎng)幀都視之為錯(cuò)誤的數(shù)據(jù)幀,以太網(wǎng)轉(zhuǎn)發(fā)設(shè)備會(huì)丟棄這些數(shù)據(jù)幀。除去以太網(wǎng)幀的幀頭14字節(jié)和幀尾4字節(jié),剩下承載上層協(xié)議的Data域最大就只能有1500字節(jié)。用戶請(qǐng)求一個(gè)網(wǎng)頁(yè)時(shí),用戶計(jì)算機(jī)與Web服務(wù)器之間進(jìn)行協(xié)商,確定一個(gè)最大的MTU尺寸,進(jìn)行協(xié)商的用戶計(jì)算機(jī)的默認(rèn)MTU大小為1500個(gè)字節(jié),所以Web服務(wù)器經(jīng)協(xié)商確定的MTU大小為1500字節(jié)。因此,無(wú)論路由器MTU大小配置為多少,Web服務(wù)器所發(fā)送的數(shù)據(jù)包最大字節(jié)數(shù)仍為1500。
綜上所述,TCP封裝占20字節(jié),IP封裝占20字節(jié),PPPoE封裝 占8字 節(jié),TCP的最大報(bào)文段長(zhǎng)度=以太幀最大值-以太封裝-TCP封 裝-PPPOE封 裝。 即MSS=1518-18-20-20-8=1452字節(jié)。

表1 實(shí)驗(yàn)數(shù)據(jù)
天融信防火墻TG-61040的MTU缺省值為1500,有效范圍是68-1500;MSS的缺省值為off(不做MSS調(diào)整,默認(rèn)),有效值為 <200-1460>。路由器AR2220-S的MTU缺省值為1500,有效范圍為<46-9206>;MSS的缺省設(shè)置命令為undo tcp adjustmss,也就是不具體指定MSS的值。
實(shí)驗(yàn)過(guò)程主要是修改相關(guān)路由器和防火墻各端口的MTU和MSS值,觀察網(wǎng)頁(yè)打開(kāi)的速度。修改的端口主要是路由器的外端口g0/0/1和內(nèi)端口g0/0/2,防火墻的外端口eth32,實(shí)驗(yàn)結(jié)果如下:
1.修改各端口MTU的值,不能排除故障。
2.修改路由器g0/0/1端口的MSS值,不能排除故障。
3.修改路由器G0/0/2端口防火墻eth32端口的MSS值,可以排除故障。
具體實(shí)驗(yàn)數(shù)據(jù)如表1。
從實(shí)驗(yàn)數(shù)據(jù)看出,實(shí)驗(yàn)結(jié)果和上述的理論分析是相符的。
天融信防火墻修改端口MTU值的命令為TopsecOS.network.interface eth32#mtu <68-1500>;修改端口MSS值的命令為TopsecOS.network.interface eth32#mss-adjust <200-1460>;根據(jù)接口mtu做mss調(diào)整的命令為TopsecOS.network.interface eth32# mssadjust auto;不 做 MSS調(diào)整的設(shè)置命令為TopsecOS.network.interface eth32#mss-adjust off。顯示端口屬性的命令為TopsecOS.network.interface eth32#show;顯示端口詳細(xì)配置的命令為TopsecOS.network.interface eth32# show configuration。
華為路由器AR2220-S修改端口MTU的命令為mtu<46-9202>;修改端口MSS值的命令為tcp adjustmss <128-2048>;恢復(fù)默認(rèn)的MSS值的命令是undo tcp adjust-mss。
當(dāng)路由器或防火墻之間接口的MSS值設(shè)置不當(dāng)時(shí),基于非TCP協(xié)議的Ping不會(huì)有丟包;基于非TCP協(xié)議的即時(shí)通信工具如QQ、游戲等網(wǎng)絡(luò)通信正常;而只基于TCP協(xié)議的通信會(huì)不正常。
所以,如果遇到QQ正常、游戲正常、Ping正常,只是網(wǎng)頁(yè)打開(kāi)不正常,就有可能是MSS值的設(shè)置問(wèn)題了。