ICMPV6协议及NDP协议
一、ICMPV6
1、基于ipv6的ICMPv6(Internet control message protocol for IPv6)是 IPv6 下的 Internet 控制报文协议;在 IPv6 中,ICMPv6 整合实现了 IPv4 中的 ICMP(ping命令)、ARP 以及 IGMP 的所有功能,主要包括错误报告、网络诊断(ping6命令)、邻居发现、多播实现和重定向等。
2、在IPv6包头中,NextHeader=58则表示IPv6包头后封装着一个ICMPv6消息
3、ICMPV6报文
(1)Type:表示 ICMPv6 报文的类型,当取值介于 0 到 127 之间时,表示该报文为错误报文(如目的不可达、超时等),当取值在 128 到 255 之间时,则表示该报文为信息报文。
(2)Code:表示此消息类型(Type)细分的类型,具体区分每种消息类型的错误信息,如目的不可达可能是防火墙导致的,也可能是路由错误导致的。
(3)Checksum:校验和,校验的部分包括了 IPv6 伪首部和ICMPv6报文。IPV6伪首部包含4个部分:16字节的sourse address, 16字节的destination addrss,2字节的 payload length, 1字节的next header。
注:ICMPv6消息类型中有5种是为了支持邻居发现协议而定义的。
TYPE | CODE | 消息名称 | |
133 | 0 | 路由器请求(RS) | |
134 | 0 | 路由器通告(RA) | |
135 | 0 | 邻居请求(NS) | |
136 | 0 | 邻居通告(NA) | |
137 | 0 | 重定向报文 |
二、邻居发现协议NDP
邻居发现协议NDP是通过 Internet 控制报文协议(ICMPv6)报文来承载的;在一个IPv6数据报中,如果该数据报的“下一个报头”字段的值为 58,且 ICMPv6 报文中类型字段取值范围为133-137,则此IPv6报文的数据部分含有邻居发现协议报文。NDP使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现以及重定向等功能。,格式如图 3-1 所示。
1、路由请求报文(Router Solicitation Message,RS)
2、路由通告报文(Router Advertisement Message,RA)
3、邻居请求报文NS(Neighbor Solicitation Message,NS)
(1)功能
《1》邻居请求报文可以用来完成ARP的功能(地址解析)
NS 报文包含发送方的源链路层mac地址,IPV6首部中:当进行地址解析时,目的IPV6地址是一个多播地址。
《2》可以用来探测目的主机的连通性(跟踪邻居状态)
而在验证某相邻节点是否可达时,IPV6首部中:目的地址是邻居的单播地址。
《3》可以用来验证自己的地址在本地链路上是否唯一,IPV6首部中:目的地址是邻居的多播地址。
探测是否有其它的节点使用了该地址。(重复地址检测)
(2)NS报文格式
类型:135,表示该ICMPV6报文是邻居请求报文。
代码:必须置0。
目的IPV6地址:即要解析的IPV6地址。
选项:发送此消息主机的链路层地址。
注:IPV6首部里,源IPV6地址:发送 NS 报文的接口地址;目的IPV6地址:被请求节点多播地址(地址解析或重复地址检测时)或单播的 Target 地址(邻居不可达检测时)。
4、邻居通告报文NA(Neighbor Advertisement Message,NA)
类型:136,表示该ICMPV6报文是邻居通告报文。
代码:必须置0。
R:路由器(Router)标志。当 R 置 1 时,表示发送者是一个路由器。R比特用于邻居不可达检测机制,检测一个路由器是否改变为主机。
S:被请求(Solicited)标志。当 S 置 1 时,表示发送这个 NA 是用于响应一个 NS 的。 S 比特在邻居不可达检测机制中用于可达性的确认。在组播的NA(DAD)和主动发送的 NA 中,S 比特一定不能置 1。
O:重载(Override)标志。当 O 置 1 时,表示这个 NA 应该更新已存在的邻居缓存表项中的 link-layer 地址。当 O 置 0 时,只有在邻居缓存的表项中没有链路层地址时,这个 NA 才可以更新邻居缓存表项。
目的IPV6地址:对于被请求的 NA 消息,Target address 应与相应 NS 中的Target Address 相同。
选项:目标节点请求的链路层地址,响应多播的 NS 时(DAD、地址解析),必须使用该选项;响应单播的NS 时(NUD),可以使用该选项。
注:IPV6首部中,源 IPv6 地址:发送 NA 所用的接口的地址;目的 IPv6 地址:对于被请求的 NA 报文,目的地址为单播地址(使用 NS报文中的源 IPv6 地址);所响应的 NS 报文中源 IPv6 地址为未指定地址,或对于主动发送的 NA 报文,则目的地址使用所有节点组播地址(FF02::1)。
交互过程:
《1》地址解析
(1)PC A在向PC B发送报文之前它要先解析出PC B的MAC地址,所以首先PC A会发送一个NS报文,其中源IP地址为PC A的IPv6地址,目的IP地址为PC B的被请求节点组播地址(前缀F02::1:F/104,并结合请求IPv6地址中的低24位,具体细节请参阅上一期),需要解析的目标IP为PC B的IPv6地址,这就表示PC A想要知道PC B的MAC地址。同时,NS报文还携带了PC A的MAC地址。
(2)当PC B接收到了NS报文之后,就会回应NA报文,其中源地址为PC B的IPv6地址,目的地址为PC A的IPv6地址(使用NS报文中的PC A的MAC地址进行单播),同时包含PC B的MAC地址。这样就完成了一次地址解析的过程。
《2》跟踪邻居状态
通过邻居或到达邻居的通信,会因各种原因而中断,包括硬件故障、接口卡的热插入等。如果目的地失效,则恢复是不可能的,通信失败;如果路径失效,则恢复是可能的。因此节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。
RFC2461中定义了5种邻居状态,分别是:
- 未完成(Incomplete)
- 可达(Reachable)
- 陈旧(Stale)
- 延迟(Delay)
- 探查(Probe)
邻居状态的具体迁移过程如下图所示:
下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程。
- 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,即删除表项。
《3》重复地址检测
重复地址检测DAD(Duplicate Address Detect)是在接口使用某个IPv6单播地址之前进行的,主要是为了探测是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行DAD检测是很必要的。一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和试验地址所对应的Solicited-Node组播组。
IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向试验地址所对应的Solicited-Node组播组发送NS报文。NS报文中目标地址即为该试验地址。如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。
重复地址检测原理如下:
Host A的IPv6地址FC00::1为新配置地址,即FC00::1为Host A的试验地址。Host A向FC00::1的Solicited-Node组播组发送一个以FC00::1为请求的目标地址的NS报文进行重复地址检测,由于FC00::1并未正式指定,所以NS报文的源地址为未指定地址。当Host B收到该NS报文后,有两种处理方法:
- 如果Host B发现FC00::1是自身的一个试验地址,则Host B放弃使用这个地址作为接口地址,并且不会发送NA报文。
- 如果Host B发现FC00::1是一个已经正常使用的地址,Host B会向FF02::1发送一个NA报文,该消息中会包含FC00::1。这样,Host A收到这个消息后就会发现自身的试验地址是重复的。Host A上该试验地址不生效,被标识为duplicated状态。
三、本地链路地址:link-local address
当在一个节点启用IPV6,启动时节点的每个接口自动生成一个link-local address
其前缀64位为标准指定的,其后64位按EUI-64格式来构造
注意:在本链路上,路由表中看到的下一跳都是对端的Link Local地址,不是公网IP地址
前缀:FE80::/10
范围:只能在本地链路使用,不能在子网间路由
为何需要link-local?
--在一个接口可以配置很多IPv6地址,所以学习路由就有可能出现很多下一跳。
所以出现Link Local地址唯一标识一个节点。在本地链路看到下一跳都是对端的Link Local地址。
在网络重新编址过程中,节点和路由器的Link Local地址不会发生变化,可以很容易地做一个修改,不用担心网络不可达。
ICMPV6协议及NDP协议相关推荐
- 网络协议 — IPv6 互联网协议第 6 版
目录 文章目录 目录 IPv6 IPv6 数据包格式 固定报头 扩展头部 IPv6 地址格式 IPv6 网络的基本组成元素 IPv6 的地址分类和寻址模式 单播地址 全球唯一地址(Global Uni ...
- 11.NDP协议分析与实践
NDP 协议分析与实践 1. 概述 1.1 简介 Neighbor Discovery Protocol 基于 ICMPv6 实现,用于替代 IPv4 中的 ARP 和 ICMP 路由器发现 基于 I ...
- 一篇文章带你熟悉 TCP/IP 协议(网络协议篇二)
涤生_Woo 2017年11月11日阅读 15544 关注 一篇文章带你熟悉 TCP/IP 协议(网络协议篇二) 同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍. 一图看完本文 一. 计算机 ...
- Linux·DNS协议、ICMP协议、NAT技术
目录 DNS协议 DNS背景 编辑域名简介 域名解析过程 使用dig工具分析DNS过程 ICMP协议 ICMP功能 ICMP协议格式 编辑ping命令 一个值得注意的坑 traceroute命令 ...
- DNS协议、ICMP协议、NAT技术
文章目录 DNS协议 DNS背景 域名简介 域名解析过程 使用dig工具分析DNS过程 ICMP协议 ICMP功能 ICMP协议格式 ping命令 一个值得注意的坑 traceroute命令 NAT技 ...
- 数据库和服务器什么协议,数据库服务器协议
数据库服务器协议 内容精选 换一换 本章节适用于MRS 3.x之前版本.Loader支持以下多种连接,每种连接的配置介绍可根据本章节内容了解.obs-connectorgeneric-jdbc-con ...
- Objective-C非正式协议与正式协议
为什么80%的码农都做不了架构师?>>> 类别与类扩展的区别: ①类别中只能增加方法: ②是的,你没看错,类扩展不仅可以增加方法,还可以增加实例变量(或者合成属性),只是该实例 ...
- RIP协议与OSPF协议与BGP协议
RIP协议: https://www.bilibili.com/video/BV19E411D78Q?p=54 RIP是一-种分布式的基于距离向量的路由选择协议,是因特网的协议标准,最大优点是简单. ...
- 计算机网络协议教案,计算机网络实验教案(6)网络协议分析-IP协议3.pdf
计算机网络实验教案(6)网络协议分析-IP协议3.pdf (2页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机网络实验> ...
- 基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器——《干饭聊天室》
基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器--<干饭聊天室> 在这里首先感谢前端小伙伴飞鸟 前端技术请看一款基于React.C++,使用TCP/HTTP协 ...
最新文章
- JQuery对checkbox的操作
- 私家车合乘系统 matlab,私家车贴上邻里合乘标志 武汉探路拼车合法化
- 分组后统计总数_大数据时代看排球:排球技术统计能告诉你什么?
- ubuntu 文件服务器--samba的安装和配置
- java springmvc 后台读取文件,springMVC
- [雪峰磁针石博客]数据仓库快速入门教程1简介
- ipad如何连接电脑_台式电脑如何连接蓝牙耳机
- 新华三:竞奔不息,永立潮头
- c语言小红今年12岁 他父亲比,书人2017秋季四年级期中复习题解析(1-60).pdf
- 墨画子卿第二章第4节:三招
- 头哥数据结构和算法答案
- 汕尾话专用专注微信聊天表情GIF图片
- python外汇兑换代码_Python爬取中国银行外汇牌价
- 小程序CMS(开通预览)
- 华为正式加入互联网路由安全规范 MANRS
- 手机变板砖?这有专业救砖教程
- 求s=a+aa+aaa+aa…a的值
- workflow bulider 官网下载路径
- Python中的ppid
- 利用51单片机蜂鸣器播放《只因你太美》代码
热门文章
- i2c-tools 使用集锦
- Macbook M1电脑安装svn及使用
- linux readelf,Linux readelf命令使用
- 斐讯w3固件下载_【2019.11.13更新】斐讯 K3 openwrt固件
- yum 查看安装的包 包含了哪些文件
- wordpress博客加载缓慢解决:去除Open Sans和Lato 字体
- 5.1 凸二次规划问题
- 软考资料合集/软考真题合集(软件设计师/网络工程师/系统分析师/系统架构师/软件测评师/程序员等)
- SAP MM模块之批次管理
- VMware ESXi客户端连接控制台时提示VMRC控制台连接已断开...正在尝试重新连接的解决方法...