4臺路由器運行RIPng,每臺設備配置loopback地址,安全
配置舉例:網絡
#ide
ipv6oop
#測試
ripng 1spa
#3d
interface GigabitEthernet0/0/0orm
ipv6 enable blog
ipv6 address auto link-local接口
ripng 1 enable
#
interface GigabitEthernet0/0/1
ipv6 enable
ipv6 address auto link-local
ripng 1 enable
#
interface LoopBack0
ipv6 enable
ipv6 address 2001::2/128
ripng 1 enable
#
測試源IP爲R1的loop0:2001::1,目的IP爲R4的loop0:2001::4
1 默認配置MTU1500
默認配置下,接口的MTU值爲1500
默認配置下ping 1000字節的包
ping ipv6 -s 1000 -c 1 2001::4
ICMP Request:
IPv6包的總長1062字節=14字節鏈路層+40字節IPv6頭+8字節ICMPv6頭+1000字節數據,payload 1008字節=8字節ICMPv6頭+1000字節數據
鏈路層:14字節,6字節目的MAC,6字節源MAC,2字節以太網類型。
IPv6層:固定40字節
ICMPv6:1008字節, 8字節的ICMPv6頭部(Type 1字節,Code1字節,Checksum 2字節, Identifier(2字節),Sequence(2字節)),1000字節的Message Body(原始Data(1000字節)
ICMPv6 Reply:
R4收到報文後回覆ICMPv6 Reply,長度相同,且 Identifier和Sequence值相同。
所以若是要不分片,對於IPv6數據包來講,承載數據內容不能大於1500-40=1460, IPv6固定頭部40字節,對於ICMPv6,8個字節的報頭,所以原始數據不能超過1460-8=1452。
注:這裏的MTU是指三層IPv6 MTU,所以鏈路層字節不參與計算。
咱們測試1452個字節,沒有分片
ping ipv6 -s 1452 -c 1 2001::4
咱們測試1453字節,觸發分片。
ping ipv6 -s 1453 -c 1 2001::4
查看第一個分片
總數據包1510=14(鏈路層)+40(IPv6頭)+8(分片擴展頭)+1448數據,三層數據包1496,Payload Length 1456=8(分片擴展頭)+1448數據。分片擴展頭M置位表示有後續分片, Identification標誌符爲0X00000015。
查看第二個分片
總數據包75=14(鏈路層)+40(IPv6頭)+8(分片擴展頭)+13數據,三層數據包61,Payload Length 21=8(分片擴展頭)+13數據。偏移量181,單位爲8字節,實際偏移量1448,等於上個分片的數據量,M爲0,表明這是分片的最後一個,Identification標誌符爲0X00000015與上個分片一致。
2 R3鏈接R2的接口修改MTU爲1440
[R3-GigabitEthernet0/0/0]ipv6 mtu 1440
1. 不分片的包大小爲1440-48=1392,ping ipv6 -s 1392 -c 1 2001::4
ping ipv6 -s 1392 -c 1 2001::4,不分片
2. ping ipv6 -s 1393 -c 1 2001::4,不通,抓包看ICMPv6的Identifier位0Xd2ab
查看R4接口抓包,發現R4回了ICMPv Reply,Identifier位也是0Xd2ab,這裏但被R3回覆了ICMPv6 Packet too big
咱們查看R3回覆的包,裏面攜帶了R3鏈接R2接口的MTU,所以咱們肯定MTU是生效在接口出方向。
3. 繼續ping ipv6 -s 1393 -c 1 2001::4,這時候MTU已經適應,咱們看到request沒有分片,reply分片。
3 R3鏈接R2的接口修改MTU爲1300
[R3-GigabitEthernet0/0/1]ipv6 mtu 1300
1. 不分片的包大小爲1300-48=1252,ping ipv6 -s 1252 -c 1 2001::4
2. ping ipv6 -s 1253 -c 1 2001::4,R1處抓包,R3回覆給R1了ICMPv6攜帶MTU
3. 第二次ping ipv6 -s 1253 -c 1 2001::4,發送的報文分片,回覆的未分片,由於回覆的MTU爲1440。
4 PathMTU
一般狀況下,設備根據接口的IPv6 MTU值動態協商PMTU。在某些特殊狀況下,爲了保護網絡設備的安全,避免受到超長報文的***時,能夠手工配置到指定目的節點的PMTU,以控制設備到目的節點可轉發報文的最大長度。
恢復各端口的默認MTU配置,修改R3鏈接R4的PMTU爲1400
1. R3上配置PMTU
[R3]ipv6 pathmtu 2001::4 1400
R1上ping ipv6 -s 1452 -c 1 2001::4(在默認MTU1500不會分片),在R1/R2/R3都沒有分片。
2. R1上配置PMTU,R1上ping ipv6 -s 1452 -c 1 2001::4,觸發分片,PMTU在源節點生效,對過路報文不生效。
3. R2往R3方向配置MTU爲1399,小於PMTU,ping ipv6 -s 1452 -c 1 2001::4,觸發分片,分片大小爲PMTU1400,R2的MTU爲1399,第一個分片所以一直回覆ICMPv6超時(Packet too big),第二個分片能夠傳送過去,但由於沒法重組,R4收到不回覆。
5 總結
1. MTU的生效方向爲接口的出方向,IPv6 MTU XXX命令針對是IP層的MTU;
2. 要是發送的數據不分片,傳送數據不大於MTU-40(IPv6報頭),傳送數據包括擴展報頭時,淨載荷=MTU-40(IPv6報頭)-擴展報頭(好比ICMPv6爲8);
3. 當報文超過節點的出接口MTU時,節點回復ICMP超時消息攜帶MTU給源端節點(數據發起方);
4. 配置設備到指定目的節點的PMTU時,中間途徑的全部設備接口的IPv6 MTU值不能小於須要配置的PMTU值,不然會形成報文丟棄。