邻居发现(Neighbor Discovery)协议

2023-10-12 05:50

本文主要是介绍邻居发现(Neighbor Discovery)协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载:http://hi.baidu.com/xiongfei2008/item/0e40d7f27e5c17d443c36a23

1. ND协议介绍

邻居发现协议(Neighbor Discovery Protocol,以下称ND协议)是IPv6的一个关键协议,可以说,ND协议是IPv4某些协议在IPv6中综合起来的升级和改进,如ARP、ICMP路由器发现和ICMP重定向等协议。当然,作为IPv6的基础性协议,ND还提供了其他功能,如前缀发现、邻居不可达检测、重复地址检测、地址自动配置等。

1.1 IPv6协议格式

NDP-graphic1

Version(4-bit):IP版本,该字段值为6

Traffic Class(8-bit):流量分类,与IPv4包头的TOS类似

Flow Label(20-bit):流标签,用来标记IPv6数据包的一个流

Payload Length(16-bit):有效载荷的长度,有效载荷为紧跟IPv6包头的数据包的其他部分

Next Header(8-bit):处理选项字段,分段,安全,移动性,松散源路由,记录路由等的新方式。该字段在承载ND报文时字段值为58(ICMPv6)。该字段详细字段值对应如下表

Value Type of Header 0 Hop-by-Hop Options Header 6 TCP 17 UDP 41 Encapsulated IPv6 Header 43 Routing Header 44 Fragment Header 50 Encapsulating Security Payload 51 Authentication Header 58 ICMPv6 59 No next header 60 Destination Options Header

Hop Limit:(8-bit):定义IP数据包所能经过的最大跳数,每跳一次将此值减1

Source Address(128-bit):IP数据包的源地址

Destination Address(128-bit):IP数据包的目的地址

1.2 ND报文类型

ND协议定义的报文使用ICMP承载,其类型包括:路由器请求报文(RS)、路由器通告(RA)报文、邻居请求报文(NS)、邻居通告报文(NA)和重定向报文。

1.2.1 路由器请求报文RS Router Solicitation Message

主机启动后,通过RS消息向路由器发出请求,期望路由器立即发送RA消息响应。RS报文格式如下图

NDP-graphic2

  • Type 类型字段,值133
  • Code 代码字段,值0
  • Options 选项字段
    • 源链路层地址选项 仅用于已编址的链路层可用于RS报文的只有源链路层地址选项,表明该报文发送者的链路层地址。如果IPv6头的源地址为未指定地址,则不能包括该选项

同时,IPv6报文头中的字段要求如下:

  • Hop Limit 值255,保证是本地链路上的报文
  • Source Address 发送接口的本地链路地址或未指定地址
  • Destination Address 本地链路中所有路由器的组播地址FF02::2

1.2.2 路由器通告报文RA Router Advertisement Message

路由器周期性的发布RA消息,其中包括前缀和一些标志位的信息,或者以RA报文响应路由器请求报文RS。RA的报文格式如下图。

NDP-graphic3

  • Type 类型字段,值134
  • Code 代码字段,值0
  • M管理地址配置标识(Managed address configuration)
    • 0-无状态地址分配,客户端通过无状态协议(如ND)获得IPv6地址;
    • 1-有状态地址分配,客户端通过有状态协议(如DHCPv6)获得IPv6地址。
  • O 其它有状态配置标识(Other stateful configuration)
    • 0-客户端通过无状态协议(如ND)获取除地址外的其他配置信息;
    • 1-客户端通过有状态协议(如DHCPv6)获取除地址外的其他配置信息,如DNS、SIP服务器信息。协议规定,若M标记置为1,则O标记也应置为1,否则无意义。
  • Router Lifetime 缺省路由器的生命周期(单位:秒)

表示发送该RA报文的路由器作为缺省路由器的生命周期。Router Lifetime最长9000秒小时,缺省值30分钟。如果该字段为0时,表示该路由器不能作为缺省路由器,但RA报文的其他信息仍然有效。

  • Reachable Time 可达时间(单位:毫秒)

发送NS报文后,在得到邻居可达性确认后,认为邻居可达的时间,0表示不指定。路由器在接口上通过发送RA报文,让同一链路上的所有节点都使用相同的可达时间。若Reachable Time为0,表示路由器不指定该字段参数。该值可配置,RA报文中缺省值为0。

  • Retrans Timer 重传定时器(单位:毫秒)

重传NS报文的时间间隔,用于邻居不可达检测和地址解析。若该值为0,表示路由器不指定该字段参数。该值可配置,RA报文缺省值为0。

  • Options 选项字段
    • 源链路层地址选项 仅用于已编址的链路层。当路由器正在多个链路层地址上进行负荷分担时,要忽略该选项。
    • MTU选项 链路的可变MTU
    • 前缀信息选项 用于地址自动配置的前缀信息,可包含多个
    • 路由信息选项 用于主机生成缺省路由,表明前缀通过该路由器是可达的

同时,IPv6报文头中的字段要求如下:

  • Source Address 必须是发送接口的本地链路地址
  • Destination Address 组播地址FF02::1,或发送RS请求报文的主机的单播地址

1.2.3 邻居请求报文NS Neighbor Solicitation Message

主机通过NS消息可以得到邻居的链路层地址、检查邻居是否可达、重复地址检测等。

NDP-graphic4

  • Type 类型字段,值135
  • Code 代码字段,值0
  • Target Address 目标地址,16bytes

请求目标的IP地址,不能是组播地址,可以是本地链路、本地站点、全局地址。

  • Options 选项字段
    • 源链路层地址选项 ,和RS报文的选项相同,可用于NS报文的只有源链路层地址选项。源链路层选项仅用于已编址的链路层,如果IPv6头的源地址为未指定地址,则不能包括该选项。

同时,IPv6报文头中字段要求如下:

  • Source Address 发送接口的地址或未指定地址(DAD检测)
  • Destination Address 目的节点单播地址或目的节点地址对应的请求节点组播地址

需要说明,如果源地址为未指定地址,则目的地址应为被请求节点的组播地址,并且没有源链路层地址选项。

1.2.4 邻居通告报文NA Neighbor Advertisement Message

NA报文是主机对NS的响应报文,同时主机在链路层地址变化时也可以主动发送NA消息,以通知相邻节点自己的链路层地址或者角色发生改变。

NDP-graphic5

  • Type 类型字段,值136
  • Code 代码字段,值0
  • R 路由器标记(Router Flag)

表示NA报文发送者的角色。置位表示发送者是路由器,复位表示发送者为主机。

  • S 请求标记(Solicited Flag)

置位表示为响应单播NS发送的NA报文。在NUD探测中,S标记作为邻居可达性确认标记;在组播通告或非请求单播通告中,S标记必须清零,如DAD检测中NS报文用的是被请求节点的组播地址,当地址冲突时,回应的NA报文的S标记需要清零。

  • O 重载标记(Override Flag)

1-表示需要用目标链路层地址选项中的链路层地址,来更新邻居缓存表。

0-只有在链路层地址未知时,才能用目标链路层地址选项来更新邻居缓存表。

  • Target Address 目标地址,16bytes

如果是针对NS而发送NA,该字段直接拷贝NS报文目标地址;如果不是针对NS发送的NA,该地址是链路层地址发生改变的网络节点的IP地址。目标地址不能是组播地址。

  • Options 选项字段,只能是目的链路层地址选项,通告发送者的链路层地址。

同时,IPv6报文头中字段要求如下:

  • Source Address 必须是发送接口的单播地址
  • Destination Address 单播地址或者所有节点的组播地址(FF02::1)

1.2.5 重定向报文 Redirect Message

路由器通过重定向报文通知主机到目的地有更好的下一跳地址,或者通知主机目的地址为本网段邻居。

NDP-graphic6

  • Type 类型字段,值137
  • Code 代码字段,值0
  • Target Address 目标地址,16bytes

到达目的地址的下一跳地址。如果目标为路由器(本地链路外的报文),必须使用路由器的本地链路地址;如果是主机(本地链路报文),目标地址和目的地址必须一致。

  • Destination Address 目的地址,即IPv6头部的目的地址,16bytes
  • Options 选项字段
    • 目标链路层地址选项:新下一跳的链路层地址。
    • 重定向头选项:触发报文尽可能多的部分,但不应使重定向报文超过1280bytes。

同时,IPv6报文头中字段要求如下:

  • Source Address 发送接口的本地链路地址
  • Destination Address 触发重定向的数据报文的单播地址

1.3 ND主要功能

1.3.1 路由器发现

路由器发现是指主机怎样定位本地链路上路由器和确定其配置信息的过程,主要包含以下三方面的内容:

  • 路由器发现
  • 前缀发现
  • 参数发现

在路由器通告报文RA中承载着路由器的相关信息,ND协议通过RS和RA的报文交互完成路由器发现、前缀发现和参数发现三大功能。协议交互主要有两种情况:主机请求触发路由器通告和路由器定期发送路由器通告。

1.3.2 地址解析

地址解析是指某节点在知道目的节点IP地址的情况下,确定目的链路层地址的过程。

当一个节点需要得到同一本地链路上另外一个节点的链路层地址时,需要进行地址解析,该机制类似于IPv4中的ARP。 ND协议用NS和NA报文完成IPv6地址到链路层地址的解析,解析后的链路层地址和IP地址等信息用来建立节点的一个邻居缓存表项。

1.3.3 邻居不可达检测NUD

邻居不可达检测是节点怎样确定邻居不可达状态的过程。ND协议用NS和NA报文来验证邻居节点的可达性。

1.3.4 重复地址检测DAD

重复地址检测是节点确定即将使用的地址是否被另一节点使用的过程。

在节点自动配置某个接口的IPv6单播地址之前,必须在本地链路范围内验证要使用的临时地址是唯一的,并且未被其他节点使用过。ND协议使用NS/NA报文完成该功能。

2. ND常见攻击

2.1 重复地址检测DAD攻击

在结点使用无状态协议自动配置时发送NS报文,NS报文中附带了结点准备使用的地址target address,攻击者伪造NA报文,回复称该地址已被使用,迫使结点更换target address,如此反复,结点将无法完成无状态协议自动配置。

针对DAD攻击,可以采用ND snooping,DHCP snooping,ND detection技术防范。

DHCP snooping与IPv4一样,通过监听DHCP的交互进程,获得用户的IP,MAC,连接的交换机端口号的绑定表项。ND snooping与前者很类似,监听ND协议的DAD交互过程,获取用户的IP、MAC、Port的对应关系。

ND Detection是H3C在ND防攻击方面的创新技术,通过结合已经建立的绑定表项,这个绑定表项可以是使用ND snooping,DHCP snooping,手工来进行配置的,通过比较已经获取到的可信表项中的IP与MAC地址,对ND报文进行过滤,丢弃异常的报文。相比单纯使用ACL进行的用户绑定,ND Detection技术结合绑定表项对ND报文进行过滤,能够较好的防御ND攻击。

2.2 地址欺骗

地址欺骗类似IPv4中的ARP欺骗,攻击者伪造RS/NS/NA报文来修改受害主机或网关上受害主机的MAC地址,造成受害主机无法与网络进行正常的通信。

防范方法与DAD攻击防范方法类似。

2.3 网络配置参数攻击(RA伪造攻击)

RA能够携带很多网络配置信息,包括默认路由器,网络前缀列表,是否使用DHCP服务器进行有状态地址分配等网络配置的关键信息。如果受害者接收了虚假的RA信息,会造成网络配置错误,从而引发欺骗攻击。

防范方法为设置RA信任端口,将来自不信任端口的RA报文丢弃。

2.4 针对网关的泛洪攻击

通过发送大量的NS/RS报文,造成网关的表项溢出。

为了避免网关的ND表项被异常的ND报文打满溢出造成DoS攻击,在网关上能够针对端口配置最大的ND表项学习数量,能够缓解此类攻击。

3. ND snooping实现机制

以下为简单翻译结果,详细请参考 IETF草案Control Packet Snooping Based Binding draft-bi-savi-cps-00.txt 8.3节

3.1 DAD交互过程

根据本文1.3.4重复地址检测DAD的描述,主机在自动配置或手动配置IPv6地址时,会通过NS/NA报文检测是否存在重复地址。详细步骤如下:

  • 主机发送NS请求,并设置如下字段值
    • source address为0.0.0.0
    • desnation address为ff02::1(组播地址)
    • target address为主机准备配置的地址,DAD即检测这个地址是否在网络上有重复
    • Hop Limit字段值为255,主要是为了防止一跳以外的节点伪造ND报文
  • 链路内收到该NS报文的主机将检测自身地址是否和target address重复,不重复则忽略,重复则发送NA报文,如果target address也是自己准备配置的地址,则放弃该地址并忽略NS报文
  • 回复的NA报文的target address是从NS报文target address段直接复制过来,destination address 为组播地址

3.2 ND snooping监听过程

ND snooping则监听DAD交互过程,产生MAC-IP对应表filter table.步骤如下:

  • 交换机收到DAD过程中的NS报文,将NS中的target address插入监听列表BST(Binding State Table)(如果这个地址不在BST中的话)设置ND snooping状态为SAC_START,初始化计时器MAX_DAD_DELAY
  • MAX_DAD_DELAY超时前如果收到其他主机的NA回复报文,则删除BST中该地址信息,本次ND snooping监听结束,反之设置ND snooping状态为SAC_BOUND,初始化计时器MAX_SAC_LIFETIME,将该地址信息加入FT(filter table)
  • 计时器MAX_SAC_LIFETIME超时后, 重设计时器MAX_DAD_PREPARE_DELAY,并发送NS报文到这个地址以期望得到它的MAC地址,在MAX_DAD_PREPARE_DELAY超时前如果没有收到NA回复,则删除BST,FT中的该地址信息,ND snooping监听结束,反之取出NA报文中的MAC地址,加入FT中,并设置计时器MAX_SAC_LIFETIME,ND snooping状态为SAC_QUERY
  • 计时器MAX_SAC_LIFETIME超时后,交换机将返回上一步重新发送NS报文,以确认该地址是否正常,是否需要更新BST,FT。

3.3 ND snooping流程图

NDP-graphic7


这篇关于邻居发现(Neighbor Discovery)协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/193706

相关文章

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

【微服务】Ribbon(负载均衡,服务调用)+ OpenFeign(服务发现,远程调用)【详解】

文章目录 1.Ribbon(负载均衡,服务调用)1.1问题引出1.2 Ribbon负载均衡1.3 RestTemplate整合Ribbon1.4 指定Ribbon负载均衡策略1.4.1 配置文件1.4.2 配置类1.4.3 定义Ribbon客户端配置1.4.4 自定义负载均衡策略 2.OpenFeign面向接口的服务调用(服务发现,远程调用)2.1 OpenFeign的使用2.1 .1创建

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

DNS协议基础笔记

1.定义 DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 2.域名解析过程 当用户在浏览器中输入一个域名,浏览器首先会检查自己的缓存中是否有该域名对应的 IP 地址。本地 DNS 服务器收到查询请求后,首先会检查自己的缓存中是否有该域名对应的 IP 地址。根域名服务器收到查询请

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消

HTTP协议 HTTPS协议 MQTT协议介绍

目录 一.HTTP协议 1. HTTP 协议介绍 基本介绍: 协议:  注意: 2. HTTP 协议的工作过程 基础术语: 客户端: 主动发起网络请求的一端 服务器: 被动接收网络请求的一端 请求: 客户端给服务器发送的数据 响应: 服务器给客户端返回的数据 HTTP 协议的重要特点: 一发一收,一问一答 注意: 网络编程中,除了一发一收之外,还有其它的模式 二.HTT