ipv6 基础学习(一)

news2024/11/13 16:01:06

IPv6

为什么要有IPV6?

IPv4地址空间有限:IPv4使用32位地址,最多可提供约43亿个地址。随着互联网设备数量的爆炸式增长,这些地址已经几乎耗尽。

IPv6地址空间庞大:IPv6使用128位地址,可以提供大约3.4×10^38个地址,理论上可以为地球上的每一粒沙子分配一个地址。

IPv6 特点

1. 地址空间扩展

IPv4使用32位地址,最多能提供约43亿个唯一的IP地址。随着互联网设备的爆炸性增长(如智能手机、物联网设备等),IPv4地址已经耗尽。而IPv6使用128位地址,能够提供约340万亿亿亿亿(3.4×10^38)个唯一地址,足以满足未来的需求。

2. 简化的网络配置

IPv6支持无状态地址自动配置( Stateless Address Autoconfiguration,SLAAC),允许设备在没有DHCP服务器的情况下自动获得IP地址。这样,网络配置和管理变得更加简单和自动化。

3. 增强的安全性

IPv6在设计时就考虑了安全性,IPsec(用于加密和验证IP包的协议)在IPv6中是强制的,而在IPv4中是可选的。这为IPv6网络提供了更强的安全保证。

4. 更高效的路由

IPv6的地址分配是基于分层结构的,使得路由表的大小大大减少,提高了路由效率。此外,IPv6还支持更高效的多播路由。

5. 改进的移动性支持

IPv6改进了对移动设备的支持,例如移动IPv6(MIPv6),使得设备在不同网络之间移动时能够保持其连接不变。

6. 消除网络地址转换(NAT)

由于IPv4地址短缺,NAT被广泛用于共享一个公共IPv4地址。然而,NAT增加了网络复杂性和管理开销,并且破坏了端到端连接的互联网模型。IPv6提供了足够的地址空间,使得每个设备都可以拥有一个唯一的全球可路由地址,消除了对NAT的需求。

7. 简化的报头结构

IPv6的报头结构被简化,某些字段被删除或变为可选,提高了路由器处理包的效率。尽管IPv6地址比IPv4长,但简化的报头结构在某些情况下可以提高网络性能。

8. 更好的扩展性

IPv6为未来的协议扩展提供了更好的支持。通过扩展头的使用,IPv6能够更灵活地添加新功能和服务,而不影响现有的协议结构。

IPv6地址

IPv6 地址是一种用于标识网络设备的 128 位地址,设计用于替代现有的 IPv4 地址系统。IPv6 地址由 8 组 4 个十六进制数字组成,每组之间用冒号(:)分隔。以下是一些关于 IPv6 地址的重要信息:

IPv6 地址格式

典型的 IPv6 地址示例:

2001:0db8:85a3:0000:0000:8a2e:0370:7334

每个 IPv6 地址由 8 组 16 位组成,总共 128 位。

缩写规则

  1. 前导零压缩

    • 在每组中的前导零可以省略。例如,0db8 可以写成 db8

    原始地址:

    2001:0db8:0000:0000:0000:ff00:0042:8329
    

    可以缩写为:

    2001:db8:0:0:0:ff00:42:8329
    
  2. 连续零压缩

    • 一段连续的零可以用双冒号(::)代替。这种压缩在一个地址中只能出现一次。

    原始地址:

    2001:0db8:0000:0000:0000:ff00:0042:8329
    

    可以进一步缩写为:

    2001:db8::ff00:42:8329
    

IPv6 地址类型

一、单播地址(Unicast Address)

用于标识单个网络接口。

  1. 全局单播地址(Global Unicast Address)
    • 可在整个互联网范围内使用的唯一地址。
    • 2000::/3 开头。
    • 例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334
  2. 链路本地地址(Link-Local Address)
    • 用于单个链路上的通信,不会路由到互联网。
    • fe80::/10 开头。
    • 自动配置,用于邻居发现和路由器发现。
    • 例如:fe80::1a2b:3c4d:5e6f:7g8h
  3. 站点本地地址(Site-Local Address)
    • 类似于 IPv4 的私有地址,范围为 fec0::/10
    • 这种地址类型在最新的规范中已被弃用,推荐使用唯一本地地址(ULA)。
  4. 唯一本地地址(Unique Local Address,ULA)
    • 用于本地通信,不会在全局互联网路由。
    • fc00::/7 开头(通常是 fd00::/8)。
    • 例如:fd12:3456:789a:1::1
二、多播地址(Multicast Address)
  1. IPv6多播地址用于将数据包发送到一个特定的组,而不是单个设备或所有设备。多播地址的范围可以是链路本地、站点本地、组织本地或全球。IPv6多播地址的前缀是ff00::/8,其中的每一位和字段都有特定的意义。

    IPv6多播地址格式

    IPv6多播地址的格式如下:

    |11111111|flgs|scop| group ID |
    +--------+----+----+----------+
    |   8    | 4  | 4  |    112   |
    
    字段详细说明
    1. 11111111 (8 bits)
      • 固定前缀,表示这是一个多播地址。
    2. flgs (4 bits)
      • 标志位,用于定义多播地址的属性。常见的值包括:
        • 0: 常规多播地址。
        • 1: 永久多播地址。
        • 其他值根据特定用途定义。
    3. scop (4 bits)
      • 作用范围(scope),定义了多播地址的有效范围。常见的值包括:
        • 1:接口本地(Interface-local)
        • 2:链路本地(Link-local)
        • 5:站点本地(Site-local)
        • 8:组织本地(Organization-local)
        • E:全球(Global)
    4. group ID (112 bits)
      • 标识多播组的具体标识符。
    常见的IPv6多播地址
    • ff02::1
      • 所有节点的链路本地多播地址。发送到该地址的数据包将被链路本地范围内的所有设备接收。
    • ff02::2
      • 所有路由器的链路本地多播地址。发送到该地址的数据包将被链路本地范围内的所有路由器接收。(RS 中的目的地址
    • ff05::2
      • 所有路由器的站点本地多播地址。发送到该地址的数据包将被站点本地范围内的所有路由器接收。
    • ff02::1:ffXX
      • Solicited-node多播地址。用于邻居发现协议(NDP)中的地址解析过程。 (NS 中的目的地址
三、任播地址(Anycast Address)

用于标识一组接口,但数据包只传送到距离最近的一个接口。

  • 没有特定的前缀,可以从单播地址中分配。
  • 常用于负载均衡和服务冗余。
四、特殊的 IPv6 地址
  1. 未指定地址(Unspecified Address)
    • 表示没有指定的地址。
    • :: 表示,相当于所有 128 位都是零。
  2. 环回地址(Loopback Address)
    • 用于设备自身通信。
    • ::1 表示。
五、 IPv6 地址范围和前缀总结
地址类型前缀示例
全局单播2000::/32001:0db8:85a3::8a2e:0370:7334
链路本地fe80::/10fe80::1a2b:3c4d:5e6f:7g8h
唯一本地fc00::/7fd12:3456:789a:1::1
多播地址ff00::/8ff02::1
未指定地址::/128::
环回地址::1/128::1

这种分层和详细的分类方式可以帮助更好地理解和记忆IPv6地址类型及其用途。

IPv6 地址分配

IPv6 地址的分配由 IANA(Internet Assigned Numbers Authority)和各个区域性互联网注册机构(RIRs)负责。IANA 分配给 RIRs 大块的地址空间,然后由 RIRs 进一步分配给 ISP 和最终用户。

IPv6 实现

ICMPv6

互联网控制消息协议第六版Internet Control Message Protocol Version 6

在 RFC 4443 中被定义;

用于报告IPv6节点数据包处理过程中的错误消息和完成一些网络诊断功能(如ping和traceroute等)

除了ICMPv4原有的功能,ICMPv6还承担了IPv4其他协议所实现的功能或IPv6所需的新功能,例如邻居发现协议(同时取代了ARP/RARP,SEND作为其安全扩展)、多播管理(取代了IGMP)

ICMPv6的功能

ICMPv6提供以下主要功能:

  1. 错误报告:当路由器或主机在处理IPv6数据包时遇到问题时,ICMPv6会发送错误消息。
  2. 信息查询:用于主机和路由器之间的信息交换,如邻居发现(Neighbor Discovery)和路由器通告(Router Advertisement)。
  3. 组播监听:管理组播组成员资格。
ICMPv6消息类型

ICMPv6消息分为两类:错误消息和信息消息。

错误消息
  1. 目的不可达(Destination Unreachable)
    • 类型:1
    • 用于通知发送方目标地址不可达。
    • 子类型包括:没有路由到目标地址、通信管理被禁止、地址不可达、端口不可达等。
  2. 分片超出(Packet Too Big)
    • 类型:2
    • 当数据包大小超过路径MTU(最大传输单元)时,通知发送方分片超出。
  3. 超时(Time Exceeded)
    • 类型:3
    • 用于通知发送方数据包在传输过程中因跳数限制或传输时间过长而被丢弃。
  4. 参数问题(Parameter Problem)
    • 类型:4
    • 用于通知发送方数据包中的某些参数有问题,如报头字段无效。
信息消息
  1. 回显请求(Echo Request)和回显应答(Echo Reply)
    • 类型:128(回显请求),129(回显应答)
    • 用于诊断网络连接情况,类似于IPv4中的Ping。
  2. 邻居发现协议(Neighbor Discovery Protocol, NDP)
    • 邻居请求(Neighbor Solicitation)
      • 类型:135
      • 用于查询邻居节点的链路层地址。
    • 邻居通告(Neighbor Advertisement)
      • 类型:136
      • 用于响应邻居请求或通告地址变化。
    • 路由器请求(Router Solicitation)
      • 类型:133
      • 主机请求路由器发送路由器通告消息。
    • 路由器通告(Router Advertisement)
      • 类型:134
      • 路由器向本地链路上的所有节点通告其存在及配置信息。
    • 重定向消息(Redirect Message)
      • 类型:137
      • 路由器通知主机有更好的下一跳地址。
  3. 组播监听(Multicast Listener Discovery, MLD)
    • 组播监听器查询(Multicast Listener Query)
      • 类型:130
    • 组播监听器报告(Multicast Listener Report)
      • 类型:131
    • 组播监听器终止(Multicast Listener Done)
      • 类型:132
ICMPv6消息格式

ICMPv6消息的基本格式如下:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                         Message Body                          +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type:消息类型,指示消息的用途。

Code:消息子类型,进一步指示消息的具体含义。

Checksum:校验和,用于检测消息在传输过程中是否被损坏。

Message Body:消息的具体内容,根据消息类型和子类型不同而变化。

ND 协议

说明

用于IPv6网络中的路由器向本地链路上的所有节点广播配置信息。RA报文在无状态地址自动配置(SLAAC)和邻居发现协议(NDP)中起着至关重要的作用。

示例

image-20240721185835629

Router Solicitation(RS,路由器请求)

报文是IPv6中的一种ICMPv6消息,用于主机请求本地链路上的路由器发送Router Advertisement(RA,路由器通告)报文。RS报文通常在主机启动或网络接口启用时发送,以快速获取路由信息和网络配置。

RS 报文格式

RS报文的格式如下:

diff复制代码+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Reserved                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明
  • Type(类型): 133

    • 表示这是一个Router Solicitation消息。
  • Code(代码): 0

    • 必须设置为0。
  • Checksum(校验和): 16位

    • 用于检测报文在传输过程中是否被损坏。
  • Reserved(保留位): 32位

    • 保留用于将来使用,应设置为0。
  • Options(选项): 可变长度

    • 包含源链路层地址等选项。每个选项有一个通用格式:

      diff复制代码+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Type      |    Length     |       Option Data ...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      
    • Type: 选项类型。

    • Length: 选项长度(以8字节为单位)。

    • Option Data: 选项的具体数据。

常见的RS报文选项
  1. 源链路层地址(Source Link-Layer Address
    • Type: 1
    • Length: 1(8字节)
    • Option Data: 包含发送RS报文的主机的MAC地址。
示例RS报文

假设有一个RS报文,其中包含了源链路层地址选项:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     133       |      0        |          0x1234               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            0                                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

image-20240721183549136

选项部分的示例
  1. 源链路层地址(Source Link-Layer Address)

    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |      1        |      1        |  00:11:22:33:44:55            |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
RS 报文的工作流程
  1. 主机发送RS报文
    • 当主机启动或网络接口启用时,主机会发送RS报文到本地链路上的所有路由器。
  2. 路由器接收RS报文
    • 本地链路上的路由器接收到RS报文后,会发送RA报文,提供网络配置和路由信息。
  3. 主机接收RA报文
    • 主机接收RA报文后,根据RA报文中的信息进行网络配置,包括IPv6地址配置、默认路由器、MTU等。
RA(Router Advertisement,路由器通告)
报文格式
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cur Hop Limit |M|O|H|Prf|Resvd|       Router Lifetime         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Reachable Time                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Retrans Timer                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Type(类型): 134

  • 表示这是一个Router Advertisement消息。

Code(代码): 0

  • 必须设置为0。

Checksum(校验和):

  • 用于检测报文在传输过程中是否被损坏。值会根据报文内容计算。

Cur Hop Limit(当前跳数限制): 64

  • 建议主机在发送数据包时使用的默认跳数限制。默认值为64。

M(管理地址配置标志): 0

  • 如果设置为1,表示主机应使用DHCPv6获取地址。默认值为0(未使用DHCPv6获取地址)。

O(其他配置标志): 0

  • 如果设置为1,表示主机应使用DHCPv6获取其他配置信息。默认值为0(未使用DHCPv6获取其他信息)。

H(家庭代理标志): 0

  • 用于家庭代理配置(RFC 6275)。默认值为0(未使用)。

Prf(路由器优先级): 00

  • 路由器优先级。默认值为00(Medium)。

Resvd(保留位): 000000

  • 保留用于将来使用,应设置为0。

Router Lifetime(路由器寿命): 1800

  • 表示该路由器作为默认路由器的有效时间(以秒为单位)。默认值为1800秒(30分钟)。

Reachable Time(可达时间): 0

  • 表示邻居保持可达状态的时间(以毫秒为单位)。默认值为0(使用默认值)。

Retrans Timer(重传计时器): 0

  • 邻居请求消息的重传时间(以毫秒为单位)。默认值为0(使用默认值)。
RA 报文示例

image-20240721181549064

flag 示例

image-20240721181807949

Neighbor Solicitation(NS,邻居请求)

是IPv6中的一种ICMPv6消息,用于邻居发现协议(NDP)。NS报文用于解决IPv6地址到链路层地址的映射问题,类似于IPv4中的ARP请求。

NS 报文格式

NS报文的格式如下:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Reserved                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                       Target Address                          +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段详细说明
  • Type(类型): 135
    • 表示这是一个Neighbor Solicitation消息。
  • Code(代码): 0
    • 必须设置为0。
  • Checksum(校验和): 16位
    • 用于检测报文在传输过程中是否被损坏。
  • Reserved(保留位): 32位
    • 保留用于将来使用,应设置为0。
  • Target Address(目标地址): 128位
    • 目标节点的IPv6地址。
  • Options(选项): 可变长度
    • 通常包含源链路层地址选项,用于提供发送NS报文的节点的链路层地址。
常见的NS报文选项
  1. 源链路层地址(Source Link-Layer Address)
    • Type: 1
    • Length: 1(8字节)
    • Option Data: 包含发送NS报文的节点的链路层地址(MAC地址)。
选项部分的示例
diff复制代码+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      1        |      1        |       Source Link-Layer Address
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
示例NS报文

假设有一个NS报文,其中包含了源链路层地址选项:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     135       |      0        |          0x1234               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            0                                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                   2001:0db8::1 (Target Address)               +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      1        |      1        |  00:11:22:33:44:55            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

image-20240721185519697

NS 报文的工作流程
  1. 发送NS报文
    • 当一个节点需要解析另一个节点的链路层地址时,它会发送一个NS报文。NS报文的目标地址是要解析的IPv6地址,目的地址是目标地址的Solicited-Node多播地址。
  2. 接收NS报文
    • 目标节点接收到NS报文后,会检查报文中的目标地址是否匹配。如果匹配,目标节点会发送一个Neighbor Advertisement(NA)报文作为响应。
  3. 发送NA报文
    • 目标节点发送NA报文,其中包含目标节点的链路层地址信息。源节点接收到NA报文后,可以更新其邻居缓存表,将IPv6地址与链路层地址对应起来。
NS 报文示例

假设有以下网络场景:节点A(IPv6地址为 2001:db8::a,链路层地址为 00:11:22:33:44:55)想要解析节点B(IPv6地址为 2001:db8::b)的链路层地址。

节点A发送NS报文
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     135       |      0        |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            0                                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                   2001:db8::b (Target Address)                +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      1        |      1        |  00:11:22:33:44:55            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
节点B接收并响应NA报文

假设节点B的链路层地址为 66:77:88:99:aa:bb,它会发送以下NA报文:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     136       |      0        |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|S|O|        Reserved         |       Target Address          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                   2001:db8::b (Target Address)                +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      2        |      1        |  66:77:88:99:aa:bb            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Neighbor Advertisement(NA,邻居通告)

报文是IPv6中的一种ICMPv6消息,用于邻居发现协议(NDP)。NA报文主要用于以下两种情况:

  1. 响应Neighbor Solicitation(NS,邻居请求)报文:当节点A发送NS报文请求节点B的链路层地址时,节点B通过NA报文回应。
  2. 通告自身的链路层地址:节点在网络上宣布自己的链路层地址(MAC地址),类似于免费ARP
NA 报文格式

NA报文的格式如下:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|S|O|        Reserved         |       Target Address          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段详细说明
  • Type(类型): 136

    • 表示这是一个Neighbor Advertisement消息。
  • Code(代码): 0

    • 必须设置为0。
  • Checksum(校验和): 16位

    • 用于检测报文在传输过程中是否被损坏。
  • R(Router): 1位

    • 表示发送者是否是一个路由器。设置为1表示发送者是一个路由器。
  • S(Solicited): 1位

    • 表示这是对一个NS报文的回应。设置为1表示这是对NS报文的回应;设置为0表示这是一个主动通告消息。
  • O(Override): 1位

    • 表示是否覆盖邻居缓存中的现有条目。设置为1表示覆盖。
  • Reserved(保留位): 29位

    • 保留用于将来使用,应设置为0。
  • Target Address(目标地址): 128位

    • 目标节点的IPv6地址,这也是发送NA报文的节点的IPv6地址。
  • Options(选项): 可变长度

    • 通常包含源链路层地址等选项。每个选项有一个通用格式:

      diff复制代码+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |     Type      |    Length     |       Option Data ...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      
    • Type: 选项类型。

    • Length: 选项长度(以8字节为单位)。

    • Option Data: 选项的具体数据。

常见的NA报文选项
  1. 源链路层地址(Source Link-Layer Address)
    • Type: 1
    • Length: 1(8字节)
    • Option Data: 包含发送NA报文的节点的链路层地址(MAC地址)。
示例NA报文

假设节点A(IPv6地址为 2001:db8::a,链路层地址为 00:11:22:33:44:55)要响应节点B(IPv6地址为 2001:db8::b)的NS报文:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     136       |      0        |          0x1234               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 | 1 | 0 |        0          |       2001:db8::a             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      1        |      1        |  00:11:22:33:44:55            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

image-20240721191117465

解释
  • Type: 136(表示这是一个NA报文)。
  • Code: 0(代码字段为0)。
  • Checksum: 0x1234(校验和)。
  • R: 1(节点A是路由器)。
  • S: 1(这是对NS报文的回应)。
  • O: 0(不覆盖现有条目)。
  • Target Address: 2001:db8::a(发送NA报文的节点的地址)。
  • Options: 包含源链路层地址 00:11:22:33:44:55
NA 报文的工作流程
  1. 响应NS报文
    • 当一个节点(如节点B)接收到NS报文时,如果NS报文的目标地址与其自身的地址匹配,节点B会发送一个NA报文来响应请求。NA报文中包含目标地址(节点B的地址)及其链路层地址。
  2. 主动通告
    • 节点也可以主动发送NA报文,通告自己的链路层地址,这在网络拓扑变化时非常有用,确保其他节点了解其链路层地址。
  3. 更新邻居缓存
    • 接收到NA报文的节点会更新其邻居缓存,将IPv6地址和链路层地址的映射关系保存起来,以便后续通信使用。
NA 报文的作用
  • 地址解析: 通过NA报文,节点可以快速获取目标节点的链路层地址,实现IPv6地址到链路层地址的映射。
  • 邻居可达性检测: NA报文用于检测节点的可达性,确保网络通信的稳定性和可靠性。
重定向

Redirect 报文是IPv6中的一种ICMPv6消息,用于邻居发现协议(NDP)。它用于向源节点通知某个数据包的更优转发路径,通常是更接近目标的路由器。这在网络拓扑发生变化时非常有用,能够帮助主机更新其路由信息,从而优化数据包的传输路径。

Redirect 报文格式

Redirect报文的格式如下:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |     Code      |          Checksum             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Reserved      |        Target Address                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Redirected Header Address                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Options ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段详细说明
  • Type(类型): 137
    • 表示这是一个Redirect消息。
  • Code(代码): 0
    • 必须设置为0。
  • Checksum(校验和): 16位
    • 用于检测报文在传输过程中是否被损坏。
  • Reserved(保留位): 24位
    • 保留用于将来使用,应设置为0。
  • Target Address(目标地址): 128位
    • 数据包原本要发送到的目标IPv6地址。
  • Redirected Header Address(重定向报头地址): 128位
    • 指出重定向后的新路由器的IPv6地址,通常是当前路由器的地址,这个字段用于指出从源主机到目标地址的最佳路径。
  • Options(选项): 可变长度
    • 通常包含源链路层地址等选项,用于提供发送Redirect报文的路由器的链路层地址。
常见的Redirect报文选项
  1. 源链路层地址(Source Link-Layer Address)
    • Type: 1
    • Length: 1(8字节)
    • Option Data: 包含发送Redirect报文的路由器的链路层地址(MAC地址)。
示例Redirect报文

**假设节点A(IPv6地址为 2001:db8::a)通过路由器R(IPv6地址为 2001:db8::r)发送数据包到节点B(IPv6地址为 2001:db8::b),但路由器R发现直接将数据包发送到节点B的路径更优,因此R发送了一个Redirect报文给节点A。假设R的链路层地址为 00:11:22:33:44:55,**示例Redirect报文如下:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     137       |      0        |          0x1234               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            0                                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   2001:db8::b (Target Address)                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   2001:db8::r (Redirected Header Address)      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      1        |      1        |  00:11:22:33:44:55            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
解释
  • Type: 137(表示这是一个Redirect报文)。
  • Code: 0(代码字段为0)。
  • Checksum: 0x1234(校验和)。
  • Reserved: 0(保留位)。
  • Target Address: 2001:db8::b(原始目标地址)。
  • Redirected Header Address: 2001:db8::r(重定向后的新路由器地址)。
  • Options: 包含源链路层地址 00:11:22:33:44:55
Redirect 报文的工作流程
  1. 检测更优路径
    • 路由器在转发数据包时,如果发现有更直接的路径到达目标地址,它会生成Redirect报文。
  2. 发送Redirect报文
    • 路由器将Redirect报文发送到原始数据包的源节点,告知源节点一个更优的路径。
  3. 更新路由
    • 源节点接收到Redirect报文后,会更新其路由信息,直接将数据包发送到重定向的目标地址,而不是通过原始的路由器。
  4. 优化数据传输
    • 更新后的路由信息有助于优化数据包的传输路径,提高网络性能和效率。
使用场景
  • 网络拓扑变化: 当网络拓扑发生变化时,路由器可以通过Redirect报文通知主机更新其路由信息。
  • 路径优化: 在某些情况下,数据包可以通过更短的路径到达目标地址,Redirect报文可以帮助源节点优化路径选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能与机器学习原理精解【2】

文章目录 机器学习基础一般化流程回归线性回归一元线性回归基础斜率的公式克莱姆法则(Cramers Rule)一、克莱姆法则的基本内容二、克莱姆法则的适用条件三、克莱姆法则的优缺点四、总结 导数与极值的问题 julia实现 最小二乘法原理最小二乘法的原理线性回…

视觉巡线小车——STM32+OpenMV

系列文章目录 第一章:视觉巡线小车——STM32OpenMV(一) 第二章:视觉巡线小车——STM32OpenMV(二) 第三章:视觉巡线小车——STM32OpenMV(三) 第四章:视觉巡…

前端打印如何给打印页加上水印

插件使用相关:vue-print-nb 前端打印的一个实现方案-CSDN博客 示例代码: media print {page {size: auto; //页面大小自动,防止打印版不全margin: 15mm; //页面边距的设定}body{background-image: url(/assets/images/login/logo.png);back…

java高级——Collection集合之Set探索(底层为HashMap实现)

java高级——Collection集合之Set探索 前情提要文章介绍继承结构底层代码(一张图你就悟了)下期预告 前情提要 上一篇文章我们探索了HashMap,详细解说了哈希冲突,红黑树以及Map底层到底是怎么实现的,这一篇我们简单说一…

三字棋游戏(C语言详细解释)

hello,小伙伴们大家好,算是失踪人口回归了哈,主要原因是期末考试完学校组织实训,做了俄罗斯方块,后续也会更新,不过今天先从简单的三字棋说起 话不多说,开始今天的内容 一、大体思路 我们都知…

开源模型应用落地-FastAPI-助力模型交互-进阶篇-RequestDataclasses(三)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理,使应用程序能够处理各种不同的请求场景,提高应用程序的灵活性和可扩展性。 在数据验证和转换方面,高级用法提供了更精细和准确的控制&#…

Springcloud之gateway的使用详解

官网地址&#xff1a;https://docs.spring.io/spring-cloud-gateway/docs/4.0.4/reference/html/ 1.网关入门 helloword 网关不依赖start-web 导入的pom&#xff1a; <!--gateway--> <dependency><groupIdorg.springframework.cloud</groupId><arti…

CKS-Kubernetes-证书题库总结

证书如下 个人考试总结 第一次考试 成绩如下&#xff0c;其实这一次我题目全做了&#xff0c;个人感觉也没有什么错误&#xff0c;但是环境做错了 7月14日CKS考试笔记 问题分析 你这次考试得了57%。 至少需要67%的分数才能通过。 对您完成的考试的自动分析显示了三个得分最…

【深度学习】起源:人脑的神经结构

文章目录 睁眼看世界&#xff0c;倾耳听人间脑子&#xff0c;是个好东西&#xff01;眼睛成像其它身体感触系统脑子&#xff1a;我很忙的&#xff01;脑细胞&#xff1a;脑子里的打工人生物神经元——结构生物神经元——人脑的运算单位 人脑的深度学习总结 睁眼看世界&#xff…

数据结构 —— B树

数据结构 —— B树 B树B树的插入操作分裂孩子分裂父亲分裂 我们之前学过了各种各样的树&#xff0c;二叉树&#xff0c;搜索二叉树&#xff0c;平衡二叉树&#xff0c;红黑树等等等等&#xff0c;其中平衡二叉树和红黑树都是控制树的高度来控制查找次数。 但是&#xff0c;这都…

李彦宏论AI:技术革新与产业价值的双重驱动

文章目录 每日一句正能量前言AI技术应用场景探索1. **医疗健康**2. **自动驾驶**3. **工业制造**4. **金融服务**5. **教育**6. **农业**7. **环境监测**8. **安全监控**9. **零售业**10. **艺术与娱乐** 避免超级应用陷阱的策略1. **明确应用目标**2. **优化用户体验**3. **注…

NFT革命:数字资产的确权、营销与元宇宙的未来

目录 1、NFT&#xff1a;数字社会的数据确权制度 2、基于低成本及永久产权的文化发现 3、PFP&#xff1a;从“小图片”到“身份表达”&#xff0c;再到社区筛选 4、透明表达&#xff1a;NFT 在数字化营销中的商业价值 5、可编程性&#xff1a;赋予 NFT 无限可能的应用 5.…

/秋招突击——7/21——复习{堆——数组中的第K大元素}——新作{回溯——全排列、子集、电话号码的字母组合、组合总和、括号生成}

文章目录 引言复习数组中的第K大的最大元素复习实现参考实现 新作回溯模板46 全排列个人实现参考实现 子集个人实现参考实现 电话号码的字母组合复习实现 组合总和个人实现参考实现 括号生成复习实现 总结 引言 昨天的科大讯飞笔试做的稀烂&#xff0c;今天回来好好练习一下&a…

git实操之线上分支合并

线上分支合并 【 1 】本地dev分支合并到本地master上 # 本地dev分支合并到本地master上# 远程(线上)分支合并# 本地dev分支合并到本地master上# 远程(线上)分支合并#####本地和线上分支同步################ #### 远程创建分支&#xff0c;拉取到本地####-远程创建分支&#…

服务攻防-应用协议cve

Cve-2015-3306 背景&#xff1a; ProFTPD 1.3.5中的mod_copy模块允许远程攻击者通过站点cpfr和site cpto命令读取和写入任意文件。 任何未经身份验证的客户端都可以利用这些命令将文件从文件系统的任何部分复制到选定的目标。 复制命令使用ProFTPD服务的权限执行&#xff0c;…

《2024 年 7 月 17 日最新开发者服务 API 推荐》

在当今的数字货币领域&#xff0c;对代币持有信息的精准洞察至关重要。而 Bitquery 代币持有信息查询 API 接口的出现&#xff0c;为开发者和投资者提供了强大的工具。无论是想要揭示代币趋势&#xff0c;检测虚假交易&#xff0c;发现热门代币&#xff0c;还是评估代币财富差距…

查找算法③-斐波那契查找算法/黄金分割查找算法

一、算法原理 斐波那契查找算法又称黄金分割查找算法&#xff0c;它是在二分查找基础上根据斐波那契数列进行分割的一种衍生算法&#xff0c;简单来说&#xff0c;二分查找是一分为二进行查找&#xff0c;斐波那契查找是使用斐波那契数列进行分割查找。而斐波那契数列就是我们通…

【Dison夏令营 Day 26】PyGame 中的赛车游戏

在本文中&#xff0c;我们将了解如何使用 Pygame 在 Python 中创建一个赛车游戏。在这个游戏中&#xff0c;我们将拥有驾驶、障碍物碰撞、通过关卡时速度增加、暂停、倒计时、记分牌和说明书屏幕等功能。 所需模块&#xff1a; 在继续之前&#xff0c;请在命令提示符下运行以下…

百科词条可以删除吗?删除百科词条的方法

大多时候大家都是想创建百度词条&#xff0c;然而有时候也会需要删除某些词条&#xff0c;因为其内容有错误、不实或者涉及某些敏感信息。但是百科词条删除需要非常明确的理由&#xff0c;不然也是很难通过的&#xff0c;这里小马识途百科顾问先初步分享下删除百科词条的流程。…

一套C#语言开发的医学影像归档与通讯系统PACS源码,三甲以下医院都能满足

医学影像归档与通讯系统&#xff08;PACS&#xff09;系统&#xff0c;是一套适用于从单一影像设备到放射科室、到全院级别等各种应用规模的医学影像归档与通讯系统。PACS集患者登记、图像采集、存档与调阅、报告与打印、查询、统计、刻录等功能为一体&#xff0c;有效地实现了…