一、实验拓扑以及地址分配
二、配置过程
1.每个路由器 (config)#ipv6 unicast-routing
2.每个端口 (config-if)#ipv6 enable
(config-if)#no shutdown
(config-if)#ipv6 address xxx:xxx:xxx:xxx:xxx:xxx
R1(config)#int f0/0
R1(config-if)#ipv6 address 2001:db8:99:a::2/64
R1(config)#int f1/0
R1(config-if)#ipv6 address 2001:db8:99:1::1/64
R2(config)#int f0/0
R2(config-if)#ipv6 address 2001:db8:99:2::2/64
R2(config)#int f0/1
R2(config-if)#ipv6 address 2001:db8:99:b::1/64
R3(config)#int f0/0
R3(config-if)#ipv6 address 2001:db8:99:1::2/64
R3(config)#int f0/1
R3(config-if)#ipv6 address 2001:db8:99:2::1/64
R4(config)#int f0/0
R4(config-if)#ipv6 address 2001:db8:99:a::1/64
R5(config)#int f0/1
R5(config-if)#ipv6 address 2001:db8:99:b::2/64
当IP地址输入错误时可(config-if)#no ipv6 address 输错的IP (可在一开始 show ipv6 interface查看)
3.每个路由器配静态路由
(config)#ipv6 route (目的网关段较远地址+出接口+下一跳)
R4(config-if)#ipv6 route 2001:db8:99:1::2/64 f0/0 2001:db8:99:a::2/64
R4(config-if)#ipv6 route 2001:db8:99:2::2/64 f0/0 2001:db8:99:a::2/64
R4(config-if)#ipv6 route 2001:db8:99:b::2/64 f0/0 2001:db8:99:a::2/64
R1(config-if)#ipv6 route 2001:db8:99:2::2/64 f0/1 2001:db8:99:1::2/64
R1(config-if)#ipv6 route 2001:db8:99:b::2/64 f0/1 2001:db8:99:1::2/64
R3(config-if)#ipv6 route 2001:db8:99:a::1/64 f0/0 2001:db8:99:1::1/64
R3(config-if)#ipv6 route 2001:db8:99:b::1/64 f0/1 2001:db8:99:2::2/64
R2(config-if)#ipv6 route 2001:db8:99:1::1/64 f0/0 2001:db8:99:2::1/64
R2(config-if)#ipv6 route 2001:db8:99:a::1/64 f0/0 2001:db8:99:2::1/64
R5(config-if)#ipv6 route 2001:db8:99:2::1/64 f0/0 2001:db8:99:b::1/64
R5(config-if)#ipv6 route 2001:db8:99:1::1/64 f0/0 2001:db8:99:b::1/64
R5(config-if)#ipv6 route 2001:db8:99:a::1/64 f0/0 2001:db8:99:b::1/64
从左往右依次配置 按顺序可以减少错误
三、各路由可相互Ping通
四、数据包分析
128 回音请求
129 回音应答
133 路由器请求,当节点不愿意等到下一次周期性的路由器宣告时,可发起一次路由器请求的多播包。正在初始化的节点可使用路由器请求,这样即可得到路由相关参数
134 路由器宣告,路由器可周期性的发送路由器宣告包,这样链路内的节点就可获得相关的路由配置信息,路由器宣告包的跳数限制为255,这样防止非本链路的路由发送路由器宣告包来干扰本链路的通信
135 邻居请求,用于确定邻居的链路层地址,判断缓存中的链路层地址是否可达,判断链路中是否存在重复的IP地址。这里的跳数限制仍然为25,防止邻居请求包通过路由器
136 邻居宣告,一种情况是应答邻居请求,另一种情况是当节点发生改变时发送多播包给本链路中的节点通知链路层地址改变信息。
ARP解析MAC地址的过程:
第一步:上层应用产生数据,这里用FTP协议为例,在FTP协议中定位了目的IP。
第二步:那么,封装的过程如下:
应用层:需要FTP的控制信息,包括用户名、密码等;
传输层:目的端口号为21,源为随机端口号;
网络层:目的IP为172.16.1.200,源IP为172.16.1.1;
数据链路层:因为不知道目的IP 172.16.1.200对应的MAC,所以目的IP到目的MAC的封装映射失败;
三层到二层的封装失败,由于二层是以太网,ARP的工作机制便会产生ARP Request去解析目的MAC,此时,源MAC为数据发起者的MAC,目的MAC地址为FFFF:FFFF:FFFF(代表所有MAC)
第三步:ARP Request到达本网段中的所有设备上,因为目的为FFFF:FFFF:FFFF,所以所有设备都可以拆掉二层的封装,然后解读ARP数据包中需要解析的目的IP。
第四步:目的IP不正确的设备直接忽略这个ARP请求包,目的IP正确的设备,会产生一个ARP Reply去回应这个ARP Request。此时,二层的源MAC为被解析设备的MAC,目的为ARP解析发起者的MAC。
第五步:数据的发起者接到ARP Reply后,将目的IP与目的MAC的对应关系添加到自己的ARP表中。
第六步:之前未完成二层封装的FTP数据,这时重新开始封装二层头部,此时,正确的目的MAC就被封装到了整个数据帧中。只有完成了整个TCP/IP协议栈封装的数据帧,才能正常的从主机上发出去