MTU與MSS值到底設(shè)置為多少?
MTU: Maxitum Transmission Unit 最大傳輸單元
MSS: Maxitum Segment Size 最大分段大小
PPPoE: PPP Over Ethernet(在以太網(wǎng)上承載PPP協(xié)議)
[分析過程]
先說說這MTU最大傳輸單元,這個(gè)最大傳輸單元實(shí)際上和鏈路層協(xié)議有著密切的關(guān)系,讓我們先仔細(xì)回憶一下EthernetII幀的結(jié)構(gòu)DMAC+SMAC+Type+Data+CRC由于以太網(wǎng)傳輸電氣方面的限制,每個(gè)以太網(wǎng)幀都有最小的大小64bytes最大不能超過1518bytes,對(duì)于小于或者大于這個(gè)限制的以太網(wǎng)幀我們都可以視之為錯(cuò)誤的數(shù)據(jù)幀,一般的以太網(wǎng)轉(zhuǎn)發(fā)設(shè)備會(huì)丟棄這些數(shù)據(jù)幀。(注:小于64Bytes的數(shù)據(jù)幀一般是由于以太網(wǎng)沖突產(chǎn)生的“碎片”或者線路干擾或者壞的以太網(wǎng)接口產(chǎn)生的,對(duì)于大于1518Bytes的數(shù)據(jù)幀我們一般把它叫做Giant幀,這種一般是由于線路干擾或者壞的以太網(wǎng)口產(chǎn)生)。
由于以太網(wǎng)EthernetII最大的數(shù)據(jù)幀是1518Bytes這樣,刨去以太網(wǎng)幀的幀頭(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和幀尾CRC校驗(yàn)部分4Bytes(這個(gè)部門有時(shí)候大家也把它叫做FCS),那么剩下承載上層協(xié)議的地方也就是Data域最大就只能有1500Bytes這個(gè)值我們就把它稱之為MTU。這個(gè)就是網(wǎng)絡(luò)層協(xié)議非常關(guān)心的地方,因?yàn)榫W(wǎng)絡(luò)層協(xié)議比如IP協(xié)議會(huì)根據(jù)這個(gè)值來決定是否把上層傳下來的數(shù)據(jù)進(jìn)行分片。就好比一個(gè)盒子沒法裝下一大塊面包,我們需要把面包切成片,裝在多個(gè)盒子里面一樣的道理。當(dāng)兩臺(tái)遠(yuǎn)程PC互聯(lián)的時(shí)候,它們的數(shù)據(jù)需要穿過很多的路由器和各種各樣的網(wǎng)絡(luò)媒介才能到達(dá)對(duì)端,網(wǎng)絡(luò)中不同媒介的MTU各不相同,就好比一長段的水管,由不同粗細(xì)的水管組成(MTU不同 )通過這段水管最大水量就要由中間最細(xì)的水管決定。
對(duì)于網(wǎng)絡(luò)層的上層協(xié)議而言(我們以TCP/IP協(xié)議族為例)它們對(duì)水管粗細(xì)不在意它們認(rèn)為這個(gè)是網(wǎng)絡(luò)層的事情。網(wǎng)絡(luò)層IP協(xié)議會(huì)檢查每個(gè)從上層協(xié)議下來的數(shù)據(jù)包的大小,并根據(jù)本機(jī)MTU的大小決定是否作“分片”處理。分片最大的壞處就是降低了傳輸性能,本來一次可以搞定的事情,分成多次搞定,所以在網(wǎng)絡(luò)層更高一層(就是傳輸層)的實(shí)現(xiàn)中往往會(huì)對(duì)此加以注意!有些高層因?yàn)槟承┰蚓蜁?huì)要求我這個(gè)面包不能切片,我要完整地面包,所以會(huì)在IP數(shù)據(jù)包包頭里面加上一個(gè)標(biāo)簽:DF(Donot Fragment)。這樣當(dāng)這個(gè)IP數(shù)據(jù)包在一大段網(wǎng)絡(luò)(水管里面)傳輸?shù)臅r(shí)候,如果遇到MTU小于IP數(shù)據(jù)包的情況,轉(zhuǎn)發(fā)設(shè)備就會(huì)根據(jù)要求丟棄這個(gè)數(shù)據(jù)包。然后返回一個(gè)錯(cuò)誤信息給發(fā)送者。這樣往往會(huì)造成某些通訊上的問題,不過幸運(yùn)的是大部分網(wǎng)絡(luò)鏈路都是MTU1500或者大于1500。
對(duì)于UDP協(xié)議而言,這個(gè)協(xié)議本身是無連接的協(xié)議,對(duì)數(shù)據(jù)包的到達(dá)順序以及是否正確到達(dá)不甚關(guān)心,所以一般UDP應(yīng)用對(duì)分片沒有特殊要求。
對(duì)于TCP協(xié)議而言就不一樣了,這個(gè)協(xié)議是面向連接的協(xié)議,對(duì)于TCP協(xié)議而言它非常在意數(shù)據(jù)包的到達(dá)順序以及是否傳輸中有錯(cuò)誤發(fā)生。所以有些TCP應(yīng)用對(duì)分片有要求---不能分片(DF)。
花開兩朵,各表一枝,說完MTU的故事我們?cè)撝v講今天的第二個(gè)豬腳---PPPoE所謂PPPoE就是在以太網(wǎng)上面跑PPP協(xié)議,有人奇怪了,PPP協(xié)議和Ethernet不都是鏈路層協(xié)議嗎?怎么一個(gè)鏈路層跑到另外一個(gè)鏈路層上面去了,難道升級(jí)成網(wǎng)絡(luò)層協(xié)議了不成。其實(shí)這是個(gè)誤區(qū):就是某層協(xié)議只能承載更上一層協(xié)議。為什么會(huì)產(chǎn)生這種奇怪的需求呢?這是因?yàn)殡S著寬帶接入(這種寬帶接入一般為Cable Modem或者xDSL或者以太網(wǎng)的接入)由于以太網(wǎng)缺乏認(rèn)證計(jì)費(fèi)機(jī)制而傳統(tǒng)運(yùn)營商是通過PPP協(xié)議來對(duì)撥號(hào)等接入服務(wù)進(jìn)行認(rèn)證計(jì)費(fèi)的,所以就出了這么一個(gè)怪胎:PPPoE。
PPPoE帶來了好處,也帶來了一些壞處,比如:二次封裝耗費(fèi)資源,降低了傳輸效能等等,這些壞處俺也不多說了,最大的壞處就是PPPoE導(dǎo)致MTU變小了以太網(wǎng)的MTU是1500,再減去PPP的包頭包尾的開銷(8Bytes),就變成1492。如果兩臺(tái)主機(jī)之間的某段網(wǎng)絡(luò)使用了PPPoE那么就會(huì)導(dǎo)致某些不能分片的應(yīng)用無法通訊。這個(gè)時(shí)候就需要我們調(diào)整一下主機(jī)的MTU,通過降低主機(jī)的MTU,這樣我們就能夠順利地進(jìn)行通訊了。
當(dāng)然對(duì)于TCP應(yīng)用而言還有另外的解決方案。馬上請(qǐng)出今天第三位豬腳:MSS。MSS最大傳輸大小的縮寫,是TCP協(xié)議里面的一個(gè)概念。MSS就是TCP數(shù)據(jù)包每次能夠傳輸?shù)淖畲髷?shù)據(jù)分段。為了達(dá)到最佳的傳輸效能TCP協(xié)議在建立連接的時(shí)候通常要協(xié)商雙方的MSS值,這個(gè)值TCP協(xié)議在實(shí)現(xiàn)的時(shí)候往往用MTU值代替(需要減去IP數(shù)據(jù)包包頭的大小20Bytes和TCP數(shù)據(jù)段的包頭20Bytes)所以往往MSS為1460。通訊雙方會(huì)根據(jù)雙方提供的MSS值得最小值確定為這次連接的最大MSS值。
介紹完這三位豬腳,我們回過頭來看前言里面的那個(gè)問題,我們?cè)囅胍幌拢绻覀冊(cè)谥虚g路由器上把每次TCP連接的最大MSS進(jìn)行調(diào)整這樣使得通過PPPoE鏈路的最大MSS值加上數(shù)據(jù)包頭包尾不會(huì)超過PPPoE的MTU大小1492這樣就不會(huì)造成無法通訊的問題,所以上面的問題可以通過ip tcp adjust-mss 1452來解決,當(dāng)然問題也可以通過修改PC機(jī)的MTU來解決。
不改MSS會(huì)如何?有可能會(huì)出現(xiàn)部分網(wǎng)站打不開,例如陶寶,在線銀行什么的。或者開網(wǎng)頁慢,都可能和MSS有關(guān)系的。
修改辦法(2927版本)
IP==>>Firwwall==>>Mangle==>>點(diǎn)+號(hào)==>>
General頁
Chain:forward
Protocol:tcp
Advanced頁
Tcpflags選SYN
Action頁
action:Change mss
new tcpmss:1472
關(guān)于MSS數(shù)值的多少,以及取值辦法~
在Windows環(huán)境下,ping 目標(biāo)網(wǎng)站 -f -l 1500 然后看能否PING通,如果PING不通,就以4為單位往下減,目標(biāo)網(wǎng)站可以是
你想訪問,但訪問不了,也可以是其他一些網(wǎng)站,這個(gè)要求不多。。
比如我PING 百度
ping www.baidu.com -f -l 1500
得到以下提示:
C:\>ping www.baidu.com -f -l 1500
Pinging www.a.shifen.com [202.108.22.5] with 1500 bytes of data:
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Ping statistics for 202.108.22.5:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
這就說明,1500這個(gè)MSS數(shù)值不可取,需要往下了換,那么就以4位單位往下減,減到通為止,就是1500-4=???自己去算了。我這里是1472才通的,所以我改的就是1472
C:\>ping www.baidu.com -f -l 1472
Pinging www.a.shifen.com [202.108.22.5] with 1472 bytes of data:
Reply from 202.108.22.5: bytes=1472 time=29ms TTL=53
Reply from 202.108.22.5: bytes=1472 time=29ms TTL=53
Reply from 202.108.22.5: bytes=1472 time=29ms TTL=53
Reply from 202.108.22.5: bytes=1472 time=29ms TTL=53
Ping statistics for 202.108.22.5:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 29ms, Maximum = 29ms, Average = 29ms
這就是通了,基于給地網(wǎng)絡(luò)狀況不同,所以MSS也不僅相同,大家要自己測(cè)試,多做試驗(yàn)。
轉(zhuǎn)自 http://www.clxp.net.cn/article.asp?id=253
MTU: Maxitum Transmission Unit 最大傳輸單元
MSS: Maxitum Segment Size 最大分段大小
PPPoE: PPP Over Ethernet(在以太網(wǎng)上承載PPP協(xié)議)
[分析過程]
先說說這MTU最大傳輸單元,這個(gè)最大傳輸單元實(shí)際上和鏈路層協(xié)議有著密切的關(guān)系,讓我們先仔細(xì)回憶一下EthernetII幀的結(jié)構(gòu)DMAC+SMAC+Type+Data+CRC由于以太網(wǎng)傳輸電氣方面的限制,每個(gè)以太網(wǎng)幀都有最小的大小64bytes最大不能超過1518bytes,對(duì)于小于或者大于這個(gè)限制的以太網(wǎng)幀我們都可以視之為錯(cuò)誤的數(shù)據(jù)幀,一般的以太網(wǎng)轉(zhuǎn)發(fā)設(shè)備會(huì)丟棄這些數(shù)據(jù)幀。(注:小于64Bytes的數(shù)據(jù)幀一般是由于以太網(wǎng)沖突產(chǎn)生的“碎片”或者線路干擾或者壞的以太網(wǎng)接口產(chǎn)生的,對(duì)于大于1518Bytes的數(shù)據(jù)幀我們一般把它叫做Giant幀,這種一般是由于線路干擾或者壞的以太網(wǎng)口產(chǎn)生)。
由于以太網(wǎng)EthernetII最大的數(shù)據(jù)幀是1518Bytes這樣,刨去以太網(wǎng)幀的幀頭(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和幀尾CRC校驗(yàn)部分4Bytes(這個(gè)部門有時(shí)候大家也把它叫做FCS),那么剩下承載上層協(xié)議的地方也就是Data域最大就只能有1500Bytes這個(gè)值我們就把它稱之為MTU。這個(gè)就是網(wǎng)絡(luò)層協(xié)議非常關(guān)心的地方,因?yàn)榫W(wǎng)絡(luò)層協(xié)議比如IP協(xié)議會(huì)根據(jù)這個(gè)值來決定是否把上層傳下來的數(shù)據(jù)進(jìn)行分片。就好比一個(gè)盒子沒法裝下一大塊面包,我們需要把面包切成片,裝在多個(gè)盒子里面一樣的道理。當(dāng)兩臺(tái)遠(yuǎn)程PC互聯(lián)的時(shí)候,它們的數(shù)據(jù)需要穿過很多的路由器和各種各樣的網(wǎng)絡(luò)媒介才能到達(dá)對(duì)端,網(wǎng)絡(luò)中不同媒介的MTU各不相同,就好比一長段的水管,由不同粗細(xì)的水管組成(MTU不同 )通過這段水管最大水量就要由中間最細(xì)的水管決定。
對(duì)于網(wǎng)絡(luò)層的上層協(xié)議而言(我們以TCP/IP協(xié)議族為例)它們對(duì)水管粗細(xì)不在意它們認(rèn)為這個(gè)是網(wǎng)絡(luò)層的事情。網(wǎng)絡(luò)層IP協(xié)議會(huì)檢查每個(gè)從上層協(xié)議下來的數(shù)據(jù)包的大小,并根據(jù)本機(jī)MTU的大小決定是否作“分片”處理。分片最大的壞處就是降低了傳輸性能,本來一次可以搞定的事情,分成多次搞定,所以在網(wǎng)絡(luò)層更高一層(就是傳輸層)的實(shí)現(xiàn)中往往會(huì)對(duì)此加以注意!有些高層因?yàn)槟承┰蚓蜁?huì)要求我這個(gè)面包不能切片,我要完整地面包,所以會(huì)在IP數(shù)據(jù)包包頭里面加上一個(gè)標(biāo)簽:DF(Donot Fragment)。這樣當(dāng)這個(gè)IP數(shù)據(jù)包在一大段網(wǎng)絡(luò)(水管里面)傳輸?shù)臅r(shí)候,如果遇到MTU小于IP數(shù)據(jù)包的情況,轉(zhuǎn)發(fā)設(shè)備就會(huì)根據(jù)要求丟棄這個(gè)數(shù)據(jù)包。然后返回一個(gè)錯(cuò)誤信息給發(fā)送者。這樣往往會(huì)造成某些通訊上的問題,不過幸運(yùn)的是大部分網(wǎng)絡(luò)鏈路都是MTU1500或者大于1500。
對(duì)于UDP協(xié)議而言,這個(gè)協(xié)議本身是無連接的協(xié)議,對(duì)數(shù)據(jù)包的到達(dá)順序以及是否正確到達(dá)不甚關(guān)心,所以一般UDP應(yīng)用對(duì)分片沒有特殊要求。
對(duì)于TCP協(xié)議而言就不一樣了,這個(gè)協(xié)議是面向連接的協(xié)議,對(duì)于TCP協(xié)議而言它非常在意數(shù)據(jù)包的到達(dá)順序以及是否傳輸中有錯(cuò)誤發(fā)生。所以有些TCP應(yīng)用對(duì)分片有要求---不能分片(DF)。
花開兩朵,各表一枝,說完MTU的故事我們?cè)撝v講今天的第二個(gè)豬腳---PPPoE所謂PPPoE就是在以太網(wǎng)上面跑PPP協(xié)議,有人奇怪了,PPP協(xié)議和Ethernet不都是鏈路層協(xié)議嗎?怎么一個(gè)鏈路層跑到另外一個(gè)鏈路層上面去了,難道升級(jí)成網(wǎng)絡(luò)層協(xié)議了不成。其實(shí)這是個(gè)誤區(qū):就是某層協(xié)議只能承載更上一層協(xié)議。為什么會(huì)產(chǎn)生這種奇怪的需求呢?這是因?yàn)殡S著寬帶接入(這種寬帶接入一般為Cable Modem或者xDSL或者以太網(wǎng)的接入)由于以太網(wǎng)缺乏認(rèn)證計(jì)費(fèi)機(jī)制而傳統(tǒng)運(yùn)營商是通過PPP協(xié)議來對(duì)撥號(hào)等接入服務(wù)進(jìn)行認(rèn)證計(jì)費(fèi)的,所以就出了這么一個(gè)怪胎:PPPoE。
PPPoE帶來了好處,也帶來了一些壞處,比如:二次封裝耗費(fèi)資源,降低了傳輸效能等等,這些壞處俺也不多說了,最大的壞處就是PPPoE導(dǎo)致MTU變小了以太網(wǎng)的MTU是1500,再減去PPP的包頭包尾的開銷(8Bytes),就變成1492。如果兩臺(tái)主機(jī)之間的某段網(wǎng)絡(luò)使用了PPPoE那么就會(huì)導(dǎo)致某些不能分片的應(yīng)用無法通訊。這個(gè)時(shí)候就需要我們調(diào)整一下主機(jī)的MTU,通過降低主機(jī)的MTU,這樣我們就能夠順利地進(jìn)行通訊了。
當(dāng)然對(duì)于TCP應(yīng)用而言還有另外的解決方案。馬上請(qǐng)出今天第三位豬腳:MSS。MSS最大傳輸大小的縮寫,是TCP協(xié)議里面的一個(gè)概念。MSS就是TCP數(shù)據(jù)包每次能夠傳輸?shù)淖畲髷?shù)據(jù)分段。為了達(dá)到最佳的傳輸效能TCP協(xié)議在建立連接的時(shí)候通常要協(xié)商雙方的MSS值,這個(gè)值TCP協(xié)議在實(shí)現(xiàn)的時(shí)候往往用MTU值代替(需要減去IP數(shù)據(jù)包包頭的大小20Bytes和TCP數(shù)據(jù)段的包頭20Bytes)所以往往MSS為1460。通訊雙方會(huì)根據(jù)雙方提供的MSS值得最小值確定為這次連接的最大MSS值。
介紹完這三位豬腳,我們回過頭來看前言里面的那個(gè)問題,我們?cè)囅胍幌拢绻覀冊(cè)谥虚g路由器上把每次TCP連接的最大MSS進(jìn)行調(diào)整這樣使得通過PPPoE鏈路的最大MSS值加上數(shù)據(jù)包頭包尾不會(huì)超過PPPoE的MTU大小1492這樣就不會(huì)造成無法通訊的問題,所以上面的問題可以通過ip tcp adjust-mss 1452來解決,當(dāng)然問題也可以通過修改PC機(jī)的MTU來解決。
不改MSS會(huì)如何?有可能會(huì)出現(xiàn)部分網(wǎng)站打不開,例如陶寶,在線銀行什么的。或者開網(wǎng)頁慢,都可能和MSS有關(guān)系的。
修改辦法(2927版本)
IP==>>Firwwall==>>Mangle==>>點(diǎn)+號(hào)==>>
General頁
Chain:forward
Protocol:tcp
Advanced頁
Tcpflags選SYN
Action頁
action:Change mss
new tcpmss:1472
關(guān)于MSS數(shù)值的多少,以及取值辦法~
在Windows環(huán)境下,ping 目標(biāo)網(wǎng)站 -f -l 1500 然后看能否PING通,如果PING不通,就以4為單位往下減,目標(biāo)網(wǎng)站可以是
你想訪問,但訪問不了,也可以是其他一些網(wǎng)站,這個(gè)要求不多。。
比如我PING 百度
ping www.baidu.com -f -l 1500
得到以下提示:
C:\>ping www.baidu.com -f -l 1500
Pinging www.a.shifen.com [202.108.22.5] with 1500 bytes of data:
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Ping statistics for 202.108.22.5:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
這就說明,1500這個(gè)MSS數(shù)值不可取,需要往下了換,那么就以4位單位往下減,減到通為止,就是1500-4=???自己去算了。我這里是1472才通的,所以我改的就是1472
C:\>ping www.baidu.com -f -l 1472
Pinging www.a.shifen.com [202.108.22.5] with 1472 bytes of data:
Reply from 202.108.22.5: bytes=1472 time=29ms TTL=53
Reply from 202.108.22.5: bytes=1472 time=29ms TTL=53
Reply from 202.108.22.5: bytes=1472 time=29ms TTL=53
Reply from 202.108.22.5: bytes=1472 time=29ms TTL=53
Ping statistics for 202.108.22.5:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 29ms, Maximum = 29ms, Average = 29ms
這就是通了,基于給地網(wǎng)絡(luò)狀況不同,所以MSS也不僅相同,大家要自己測(cè)試,多做試驗(yàn)。
轉(zhuǎn)自 http://www.clxp.net.cn/article.asp?id=253