IPv6同一前缀地址通信
具有相同前缀的主机间互访的时候,不会查找路由表,只会发NS(Neighbor Solicitation)请求,获取目的地址对应的链路层地址,然后使用该链路层地址封装要发送的数据报文
sequenceDiagram
participant PC1
participant Switch as 交换机(透明)
participant PC2
note over PC1,PC2: 统一前缀:2001:db8:1::/64
PC1->>PC2: NS (请求 2001:db8:1::20 的 MAC)
PC2->>PC1: NA (回应自己的 MAC)
PC1->>Switch: 数据帧 {dst MAC = PC2 的 MAC}<br/>IP: src=2001:db8:1::10, dst=2001:db8:1::20
Switch->>PC2: 转发数据帧
IPv6不同前缀地址通信
PC先查看目标地址,发现不在本地前缀中;查路由表 → 下一跳 = 默认网关。如果已有 默认网关的 MAC 地址, 直接封装帧发送;如果没有 ,先发 NS(Neighbor Solicitation)请求 默认网关的 MAC,要到网关的mac再封装帧发送
sequenceDiagram
participant PC1
participant RouterA as Router (接口A)
participant RouterB as Router (接口B)
participant PC2
note right of RouterA: 2001:db8:1::1/64
note right of RouterB: 2001:db8:2::1/64
PC1->>RouterA: NS (请求网关 2001:db8:1::1 的 MAC)
RouterA->>PC1: NA (回应自己的 MAC)
PC1->>RouterA: IP 数据包 {src=2001:db8:1::10, dst=2001:db8:2::20}
RouterA->>RouterB: 路由查找,准备从接口B转发
RouterB->>PC2: NS (请求 2001:db8:2::20 的 MAC)
PC2->>RouterB: NA
RouterB->>PC2: IP 数据包 {src=2001:db8:1::10, dst=2001:db8:2::20}
IPv6 ND proxy
具有相同前缀的主机间互访的时候,不会查找路由表,只会发NS(Neighbor Solicitation)请求,获取目的地址对应的链路层地址,然后使用该链路层地址封装要发送的数据报文。
在实际组网中,具有相同前缀的主机可能不在一个网络广播域当中,这种情况下NS(Neighbor Solicitation)报文不能发送到目的主机,导致主机间不能互访。
为了避免此问题,可以开启路由器的ND Proxy功能,用于替代目的主机回应NA(Neighbor Advertise)报文,报文中会携带路由器的链路层地址。采用这种方式,两个主机可以通过路由器设备完成互访
sequenceDiagram
participant PC1
participant 路由器 as A-路由器-B
participant PC2
Note over PC1, PC2: PC1 需要向 PC2 发送数据报文
PC1->>路由器: NS(请求 1234::2/64 的 MAC 地址)<br>通过接口A
路由器-->>PC1: NA(回应 1234::2/64 的 MAC 地址是接口A的MAC地址)
PC1->>路由器: 目的是 1234::2/64 的数据报文<br>通过接口A
路由器->>PC2: 目的是 1234::2/64 的数据报文<br>通过接口B
Note over PC2, PC1: PC2 需要向 PC1 发送数据报文
PC2->>路由器: NS(请求 1234::1/64 的 MAC 地址)<br>通过接口B
路由器-->>PC2: NA(回应 1234::1/64 的 MAC 地址是接口B的MAC地址)
PC2->>路由器: 目的是 1234::1/64 的数据报文<br>通过接口B
路由器->>PC1: 目的是 1234::1/64 的数据报文<br>通过接口A