ipv6测试命令(IPv6基础及常用命令)
ipv6/IPv4协议栈对比
IPv6的一些变化
1)数据链路层(L2)的type字段标识为 0x86dd,表示承载的上层协议是IPv6(IPv4对比:type字段为0x0800);
2)IPv6的头部字段(40bytes),和IPv4差别巨大。
- IPv6报文头部是定长(固定为40字节),IPv4报文头部是变长的。这个意味着,写代码处理IPv6数据报文的效率会提高很多:);
- IPv6中Hop Limit字段含义类似IPv4的TTL;
- IPv6中的Traffic Class字段含义类似IPv4中的TOS(Type Of Service);
- IPv6的报文头部取消了校验和字段:取消这个字段也是对IPv4协议的一个改进。当IPv4报文在网路间传输,每经过一个路由器转发就是修改TTL字段,就需要重新计算校验和,而由于数据链路层L2和传输层L4的校验已经足够强壮,因此IPv6取消这个字段会提高路由器的转发效率。值得一提的是,在IPv6协议下,传输层L4协议UDP、TCP是强制需要进行校验和的(IPv4是可选的);
- IPv6报文头部中的Next Header字段表示“承载上一层的协议类型”或者“扩展头部类型”。
- 当IPv6数据报文承载的是上层协议ICMPv6、TCP、UDP的时候,Next Header的值分别为58、6、17,这个时候和IPv4报文头部中的Protocol字段很类似;
- 当不是以上3种协议类型的时候,IPv6报文头部紧接的是扩展头部。扩展头部是IPv6引入的一个新的概念,每个IPv6的数据报文可以承载0个或多个扩展头部,扩展头部通过链表的形式组织起来。当IPv6数据报文承载着扩展头部的时候,Next Header的数值为扩展头部的类型值。
- 当发送一个分片IPv6数据报文的时候,IPv6使用的是扩展头部的形式组织各个分片的信息, Next Header字段值为44
- 对比IPv4,分片信息是记录在IPv4报文头部的分片字段中。
- IPv6的扩展头部类型有很多种,除了上述的分片头部,还有路由头部、逐跳可选头部等,具体的可以参考RFC2460。
邻居发现协议NDP
邻居发现协议NDP是通过 Internet 控制报文协议(ICMPv6)报文来承载的;在一个IPv6数据报中,如果该数据报的“下一个报头”字段的值为 58,且 ICMPv6 报文中类型字段取值范围为133-137,则此IPv6报文的数据部分含有邻居发现协议报文。NDP使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现以及重定向等功能。
- 路由请求报文(Router Solicitation Message,RS)
ICMPv6 Type = 133
接口初始化或接口地址发生变化时,终端主动发起RS请求路由信息
- 路由通告报文(Router Advertisement Message,RA)
ICMPv6 Type = 134
路由器定期或收到用户RS时发送RA报文(包含路由有效时间,终端获取方式,前缀信息等),当终端收到RA报文后会根据RA报文的指示构造自己的地址,建立路由信息和缺省网关等
- 邻居请求报文NS(Neighbor Solicitation Message,NS)
ICMPv6 Type 135
- 邻居请求报文可以用来完成ARP的功能(地址解析),NS 报文包含发送方的源链路层mac地址,IPV6首部中:当进行地址解析时,目的IPV6地址是一个多播地址
2.可以用来探测目的主机的连通性(跟踪邻居状态)
3.可以用来验证自己的地址在本地链路上是否唯一,IPV6首部中:目的地址是邻居的多播地址。
- 邻居通告报文NA(Neighbor Advertisement Message,NA)
ICMPv6 Type 135
通告邻居自己的能力(如路由器,置位R标记),是否收到请求发送,是否需要立刻覆盖邻居表
- 重复地址检测
重复地址检测DAD(Duplicate Address Detect)是在接口使用某个IPv6单播地址之前进行的,主要是为了探测是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和试验地址所对应的Solicited-Node组播组。
IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向试验地址所对应的Solicited-Node组播组发送NS报文。NS报文中目标地址即为该试验地址。如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。
跟踪邻居状态
通过邻居或到达邻居的通信,会因各种原因而中断,包括硬件故障、接口卡的热插入等。如果目的地失效,则恢复是不可能的,通信失败;如果路径失效,则恢复是可能的。因此节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。
RFC2461中定义了5种邻居状态,分别是:
- 未完成(Incomplete)
- 可达(Reachable)
- 陈旧(Stale)
- 延迟(Delay)
- 探查(Probe)
A之间的邻居状态迁移的过程:
- A先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete。
- 若B回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty,即删除表项。
- 经过邻居可达时间,邻居状态由Reachable(默认30s)变为Stale,即未知是否可达。
- 如果在Reachable状态,A收到B的非请求NA报文(MAC地址修改),且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale。
- 在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求。
- 在经过一段固定时间后,邻居状态由Delay(默认5s)变为Probe(每隔1s发送一次NS报文,连续发送3次),其间若有NA应答,则邻居状态由Delay变为Reachable。
- 在Probe状态,A每隔一定时间间隔z(1s)发送单播NS,发送固定次数(3)后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项。
Linux常用IPv6命令
查看接口地址
ip -f inet6 addr show br1
查看路由
ip -f inet6 route show
显示路由选择表中的ipv6路由
netstat -A inet6 –rn
查看邻居缓存
ip -f inet6 neighbor show
添加IPV6地址
ip -6 addr add <ipv6address>/<prefixlength> dev <interface>
ip -6 addr add 2001:0db8:0:f101::1/64 dev eth0
ifconfig <interface> inet6 add <ipv6address>/<prefixlength>
ifconfig eth0 inet6 add 2001:0db8:0:f101::1/64
添加路由
ip -6 route add <ipv6network>/<prefixlength> via <ipv6address>
ip -6 route add default via 2001:0db8:0:f101::1
route -A inet6 add <ipv6network>/<prefixlength> gw
route -A inet6 add default gw 2001:0db8:0:f101::1
ip -6 route add 2001:1:1:1fb::/64 dev br1 via fe80::68b:42ff:fe28:f02
删除路由
ip -6 route del 2001:1:1:200::/64
ip -f inet6 route del ipv6-prefix/prefixlength via gateway[dev interface]
route -A inet6 del ipv6-prefix/prefixlength via gateway[dev interface]
Ping
检查连通性
traceroute6
traceroute6使用ipv6跟踪到目的网络路由
5.tracepath6 ipv6网址 路径跟踪并发现到目的网络的MTU值
Windows常用IPv6命令
查看接口地址
ip -f inet6 addr show br1
查看路由
ip -f inet6 route show
查看邻居
netsh interface ipv6 show neighbors
其它netsh
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com