IPv6實驗MTU和PMTU

 1

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

2

默認配置下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字節

ICMPv61008字節, 8字節的ICMPv6頭部(Type 1字節,Code1字節,Checksum 2字節, Identifier(2字節),Sequence(2字節)),1000字節的Message Body(原始Data(1000字節)

3

ICMPv6 Reply:

R4收到報文後回覆ICMPv6 Reply,長度相同,且 Identifier和Sequence值相同。

4

所以若是要不分片,對於IPv6數據包來講,承載數據內容不能大於1500-40=1460, IPv6固定頭部40字節,對於ICMPv6,8個字節的報頭,所以原始數據不能超過1460-8=1452

注:這裏的MTU是指三層IPv6 MTU,所以鏈路層字節不參與計算

咱們測試1452個字節,沒有分片

ping ipv6 -s 1452 -c 1 2001::4

5

咱們測試1453字節,觸發分片。

ping ipv6 -s 1453 -c 1 2001::4

查看第一個分片

總數據包1510=14(鏈路層)+40(IPv6頭)+8(分片擴展頭)+1448數據,三層數據包1496Payload Length 1456=8(分片擴展頭)+1448數據。分片擴展頭M置位表示有後續分片, Identification標誌符爲0X00000015。

6

查看第二個分片

總數據包75=14(鏈路層)+40(IPv6頭)+8(分片擴展頭)+13數據,三層數據包61,Payload Length 21=8(分片擴展頭)+13數據。偏移量181,單位爲8字節,實際偏移量1448,等於上個分片的數據量,M爲0,表明這是分片的最後一個,Identification標誌符爲0X00000015與上個分片一致。

7

8

2      R3鏈接R2的接口修改MTU爲1440

 [R3-GigabitEthernet0/0/0]ipv6 mtu 1440

1.        不分片的包大小爲1440-48=1392,ping ipv6 -s 1392 -c 1 2001::4

9ping ipv6 -s 1392 -c 1 2001::4,不分片

2.        ping ipv6 -s 1393 -c 1 2001::4,不通,抓包看ICMPv6的Identifier0Xd2ab

10

11

查看R4接口抓包,發現R4回了ICMPv Reply,Identifier位也是0Xd2ab這裏但被R3回覆了ICMPv6 Packet too big

12

咱們查看R3回覆的包,裏面攜帶了R3鏈接R2接口的MTU,所以咱們肯定MTU是生效在接口出方向

13

3.        繼續ping ipv6 -s 1393 -c 1 2001::4,這時候MTU已經適應,咱們看到request沒有分片,reply分片。

14

3      R3鏈接R2的接口修改MTU爲1300

[R3-GigabitEthernet0/0/1]ipv6 mtu 1300

1.        不分片的包大小爲1300-48=1252,ping ipv6 -s 1252 -c 1 2001::4

15

2.        ping ipv6 -s 1253 -c 1 2001::4,R1處抓包,R3回覆給R1了ICMPv6攜帶MTU

16

3.        第二次ping ipv6 -s 1253 -c 1 2001::4,發送的報文分片,回覆的未分片,由於回覆的MTU爲1440。

17

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都沒有分片。

18

2.        R1上配置PMTU,R1上ping ipv6 -s 1452 -c 1 2001::4,觸發分片,PMTU在源節點生效,對過路報文不生效。

19

3.        R2往R3方向配置MTU爲1399,小於PMTU,ping ipv6 -s 1452 -c 1 2001::4,觸發分片,分片大小爲PMTU1400,R2的MTU爲1399,第一個分片所以一直回覆ICMPv6超時(Packet too big),第二個分片能夠傳送過去,但由於沒法重組,R4收到不回覆。

20

 

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值,不然會形成報文丟棄。

相關文章
相關標籤/搜索