PMTUD是IPv6的一個工做機制。網絡
其主要的目的就是,當網絡源發送數據報文到目的的時候,避免分段,也能夠稱爲分片。ide
源節點可使用發現整個路徑上面最大的MTU與目的節點通信。性能
咱們都知道,分段其實是有害的,對主機的cpu利用率,對路由器的cpu利用率都是一個挑戰。測試
若是再有一些高人利用這些微妙的東西作一個小軟件進行一些改動作一個***軟件,呵呵,那麼很容易就致使網絡癱瘓。spa
並且分片對設備的轉發能力的性能也要求偏高。設計
這也是如今一些客戶須要巨幀的需求所在。像我遇到的客戶在測試的時候就必定須要咱們某一個路由器必須支持至少9000bytes的巨幀,不能分片。後來瞭解到,客戶這條鏈路是要用於高清HD組播視頻流的。對於咱們來講,每一個高清數據流的網絡流量大概是每秒4M多字節的帶寬需求,客戶對於這條組播鏈路要使用大概5-10個組播組,若是是10個也就是大概50M的整機轉發流量的需求。這個時候再加上分片,cpu利用率就可想而知了。視頻
因此對咱們來講也是至關有必要的。(固然這段是說的IPv4,可是原理和ipv6同樣,若是硬件支持,最好不要分片)blog
在RFC2460裏面,也強烈建議IPv6節點實現IPv6 PMTUD以免分段.接口
好了,下面來講一下原理。ip
IPv6 PMTUD使用ICMPv6的類型2,既數據包超長錯誤消息。
利用這個包來進行探測作大的MTU值給源網絡設備。
能夠看看這裏,類型2:數據包報文過大,這個類型2就是專門爲PMTUD來設計的。
或者能夠說,PMTUD的實現原理就是經過ICMPv6的類型2報文來實現的。
這裏能夠看到,從源到路由器A,發送ICMPv6 二類報文出去,攜帶MTU=1500能力,路由器A返回的是1400,而後源又發送給路由器B,路由器B迴應一個ICMPv6 類型2報文回來,最後源主機只能獲得MTU=1300.
下面看看是怎麼實現的。
在這裏,R1,做爲源.在路由器R2上面,FE1/0上面配置一個ipv6 mtu 1400.
在路由器R3的FE0/0上面配置一個ipv6 mtu 1300.
那麼最後的結果R1 show出來的是1400仍是1300呢?這裏經過作實驗獲得的結論是隻在出接口有效果.
這裏從R1上面,ping大包,1500字節的,到R3的還回接口2025::1
最後獲得的是R2出接口的MTU=1400.
R3上面F0/0配置的ipv6 mtu 1300並無生效。
我有一個疑問,難道在生產網上面必定須要在數據包通信之前都要ping一個大包到對端才能正常的工做嗎?
應該不是這樣的,一些實際的報文應該會觸發ICMPv6 類型2的工做機制。