技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當(dāng)前位置:主頁 > 教程 > 服務(wù)器類 >

Linux系統(tǒng)下修改最大傳輸單元MTU的方法

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2018-02-18 18:00┆點擊:

  最大傳輸單元(Maximum Transmission Unit,MTU)是指一種通信協(xié)議的某一層上面所能通過的最大數(shù)據(jù)報大小(以字節(jié)為單位)。最大傳輸單元這個參數(shù)通常與通信接口有關(guān)(網(wǎng)絡(luò)接口卡、串口等)。

  因特網(wǎng)協(xié)議允許IP分片,這樣就可以將數(shù)據(jù)報分成足夠小的片段以通過那些最大傳輸單元小于該數(shù)據(jù)報原始大小的鏈路了。這一分片過程發(fā)生在IP層(OSI模型的第三層,即網(wǎng)絡(luò)層),它使用的是將分組發(fā)送到鏈路上的網(wǎng)絡(luò)接口的最大傳輸單元的值。原始分組的分片都被加上了標(biāo)記,這樣目的主機的IP層就能將分組重組成原始的數(shù)據(jù)報了。

  在因特網(wǎng)協(xié)議中,一條因特網(wǎng)傳輸路徑的“路徑最大傳輸單元”被定義為從源地址到目的地址所經(jīng)過“路徑”上的所有IP跳的最大傳輸單元的最小值?;蛘邚牧硗庖粋€角度來看,就是無需進(jìn)一步分片就能穿過這條“路徑”的最大傳輸單元的最大值。

  RFC 1191描述了“路徑最大傳輸單元發(fā)現(xiàn)方法”,這是一種確定兩個IP主機之間路徑最大傳輸單元的技術(shù),其目的是為了避免IP分片。在這項技術(shù)中,源地址將數(shù)據(jù)報的DF(Don't Fragment,不要分片)位置位,再逐漸增大發(fā)送的數(shù)據(jù)報的大小——路徑上任何需要將分組進(jìn)行分片的設(shè)備都會將這種數(shù)據(jù)報丟棄并返回一個“數(shù)據(jù)報過大”的ICMP響應(yīng)到源地址——這樣,源主機就“學(xué)習(xí)”到了不用進(jìn)行分片就能通過這條路徑的最大的最大傳輸單元了。

  不幸的是,越來越多的網(wǎng)絡(luò)封殺了ICMP的傳輸(譬如說為了防范DOS攻擊)——這使得路徑最大傳輸單元發(fā)現(xiàn)方法不能正常工作,其常見表現(xiàn)就是一個連接在低數(shù)據(jù)流量的情況下可以正常工作,但一旦有大量數(shù)據(jù)同時發(fā)送,就會立即掛起(例如在使用IRC的時候,客戶會發(fā)現(xiàn)在發(fā)送了一個禁止IP欺騙的ping之后就得不到任何響應(yīng)了,這是因為該連接被大量的歡迎消息堵塞了)。而且,在一個使用因特網(wǎng)協(xié)議的網(wǎng)絡(luò)中,從源地址到目的地址的“路徑”常常會為了響應(yīng)各種各樣的事件(負(fù)載均衡、擁塞、斷電等等)而被動態(tài)地修改——這可能導(dǎo)致路徑最大傳輸單元在傳輸過程中發(fā)生改變——有時甚至是反復(fù)的改變。其結(jié)果是,在主機尋找新的可以安全工作的最大傳輸單元的同時,更多的分組被丟失掉了。

  對于時下大多數(shù)使用以太網(wǎng)的局域網(wǎng)來說,最大傳輸單元的值是1500字節(jié)。但是像PPPoE這樣的系統(tǒng)會減小這個數(shù)值,這就使得在使用最大傳輸單元發(fā)現(xiàn)方法時可能會產(chǎn)生這樣的結(jié)果:一些處于配置不當(dāng)?shù)姆阑饓χ蟮恼军c變得不可達(dá)了。對于這種情況,還是可能找到變通的方法的,但這取決于你控制的是網(wǎng)絡(luò)的哪一部分。這些方法包括改變用來在防火墻一端建立TCP連接的第一個分組的MSS(Maximum Segment Size,最大分段大小)。

  對于一些支持老版本以太網(wǎng)協(xié)議的IBM系統(tǒng)(例如XSeries),可能只有在把最大傳輸單元設(shè)為1492之后才能在當(dāng)下常見的局域網(wǎng)上進(jìn)行運作。

  MTU的修改方法如下:

  1、ifconfig命令修改

  [/code]

  ifconfig ${Interface} mtu ${SIZE} up

  ifconfig eth1 mtu 9000 up

  [/code]

  這個是最通用的方法,對所有的linux 發(fā)行版本都有效。缺點就是重啟后失效,需要在開機項中加載。

  2、修改配置文件

  CentOS / RHEL / Fedora Linux下

  代碼如下:

  # vi /etc/sysconfig/network-scripts/ifcfg-eth0

  #增加如下內(nèi)容

  MTU="9000"

  #保存后重啟網(wǎng)卡生效

  # service network restart

  #啟用IPv6地址的,修改IPv6 mtu的參數(shù)為

  IPV6_MTU="1280"

  Debian / Ubuntu Linux下

  代碼如下:

  # vi /etc/network/interfaces

  #增加如下值

  mtu 9000

  #保存后,重啟網(wǎng)絡(luò)生效

  # /etc/init.d/networking restart

  3、為什么MTU最大值為9000字節(jié)

  從理論上計算,4 bytes的CRC最大支持12000 bytes大小的字節(jié),超過了就沒有辦法檢查了。另外還有其他一些協(xié)議如NFS等的限制。

  最后需要注意的是,在經(jīng)過交換網(wǎng)絡(luò)設(shè)備時,僅僅修改主機端的MTU值是不行的,還需要交換網(wǎng)絡(luò)設(shè)備上開啟jumbo frames功能。

  4、MTU測試

  使用ping命令,-l 指定包大小,-f 選項為通知操作系統(tǒng)不能私自更改該數(shù)據(jù)包大小

2015118114049588.png (504×130)

  使用英文操作系統(tǒng)時的提示為:Packet needs to be fragmented but DF set