信息网络协议基础第三章复习

CIDR

•CIDR:Classless Inter-Domain Routing,无类别域间寻路

  • 目前Internet采用的IP地址分配方式,1990年代由IETF提出,取代早期的有类别的地址分配方式
    • 采用可变长度的网络前缀(network prefix)来取代地址分类中网络号长度固定的做法
  • 具有相同前缀的IP地址组成CIDR Block,表示为A.B.C.D/N,其中N为前缀长度
  • 例如202.38.208.0/20

前缀汇聚(Supernetting)

前缀汇聚举例 8个连续的/24的CIDR Block可以用一个/21的CIDR Block来表示,因此对外汇聚成一条/21的路由 200.25.16.0/24~200.25.23.0/24–〉
(0001 0000~0001 0111)
200.25.16.0/21

前缀最长匹配(Longest-prefix Match)

  • 在CIDR中,如果路由器上的路由表中有多条表项满足要求,则采用前缀最长匹配规则
  • 前缀最长匹配:R0上对于目的地址为200.25.22.32的IP分组分组,匹配的路由表表项包括200.25.16.0/21和200.25.22.0/24,但使用最长匹配规则选择200.25.22.0/24

NAT

根据作用范围的不同,分两种IP地址

  • 全局IP地址:用于Internet上的分组转发,要求在Internet范围内唯一,
  • 私有IP地址:用于指定网络内的分组转发,只要求在指定网内部唯一

基本NAT:只使用IP地址信息

最简单的NAT还是需要多个全局的IP地址,一般在NAT设备上维护一个address pool,address pool中地址的数量应该多于有访问外部网络需求的主机的数量。

网络地址和端口转换NAPT

  • 最常用的一种NAT方式
  • 使用IP地址和TCP/UDP端口号
  • NAPT操作不仅仅要修改分组的IP头标,还要修改TCP/UDP头标中的端口号
    • 在NAT设备上,虽然内部网络所有的主机共享同一个全局IP地址,但是经过NAT之后不同会话使用的端口号不同

局限性

  • 地址和端口转换将带来比较大的开销
  • IP地址和端口号可能存在于载荷的任何位置,因此需要软件针对具体的应用做额外的处理
  • 并不是所有的数据都是使用UDP或者TCP来传输
  • 破坏了原有的主机到主机的通信模型

IPv6地址

目前所有IPv6子网的前缀长度都是64比特!

类型

  • 单播地址(Unicast)
    • 分配给节点上的某个特定网络接口,目的地为单播地址的分组被转发到该接口上
  • 组播/多播地址(Multicast)
    • 分配给一组网络接口,这些网络接口一般位于不同的节点,目的地为组播地址被转发到这组接口上
  • 任播地址(Anycast)
    • 分配给一组网络接口,这些网络接口一般位于不同的网络节点,目的地为任播地址的分组被转发到该组接口中距离发送主机最近的节点(依据路由协议度量的最近距离)
    • Anycast 地址从单播地址空间分配,只能被分配给路由器,并且不能用作源地址,用于基于UDP的DNS查询(无状态,无连接),应用范围:站点范围,全局使用还需进一步考虑

单播地址

有些机制,特别是自动配置机制,所需的信息在子网范围内都可以获得,例如获取目标的MAC地址、获取子网前缀等,不需要全局的IPv6地址

  • 链路局部地址(Link-Local):作用范围为链路,在链路范围内分配
    • 前面10比特固定为1111 1110 10,接下来为54比特的0,具有形式FE80:/64
    • Interface ID:标识主机上的特定接口
    • 链路局部地址总是自动配置,只用于链路范围内的数据传输
  • 唯一本地地址(Unique Local):与IPv4私有地址类似,一般限制在组织机构内部使用,但不会被转换成全局单播地址
  • 全局(Global):作用范围为全局,在全局范围进行分配 ![[Pasted image 20240102122226.png]]
    • 前面3比特固定为001,第1个16比特为2000到3FFF
    • Global Routing Prefix:全局路由前缀,由服务提供商(ISP)分配给用户站点(Site)的前缀
    • Subnet ID:标识特定的子网,一个站点中可能有多个子网
    • Interface ID:标识主机上的特定接口,大多数情况下长度为64

单播地址的组成 ![[Pasted image 20240102122046.png]]

组播地址

  • 前面8比特固定为1111 1111,具有形式FF::/8
  • Flags 4bit: 指示组播地址是永久的还是临时的等信息
  • Scope 4bits:指示组播的范围
    • 0010 Link-local scope
  • Group ID 112bits:标识组播组,在Scope作用范围内唯一

常用组播地址

  • 全节点地址: FF02::1(link-local) 
  • 全路由器地址: FF02::2(link-local) 
  • 被请求节点地址(Solicited-node address)
    • 例如: 4037::01:800:200E:8C6C ➡️FF02::1:FF0E:8C6C

IPv6组播地址到MAC地址映射

网络接口维护一个感兴趣的目的MAC地址列表,包括

  • 接口的单播MAC地址
  • 广播MAC地址FF:FF:FF:FF:FF:FF
  • IPv6组播地址所对应的MAC地址(如果网络接口所在节点加入到组播组,有些组播组是必须加入的,例如全节点组播组,被请求节点地址对应的组播组) 例子:        IPv6主机具有MAC地址00:AA:00:3F:2A:1C(链路局部地址为FE80:2AA:FF:FE3F:2A1C),其网络接口感兴趣的目的MAC地址表除包含广播MAC地址 FF:FF:FF:FF:FF:FF外,还包括以下组播MAC地址:        33:33:00:00:00:01,对应着链路局部范围内的全节点组播地址FF02::1        33:33:FF:3F:2A:1C,对应着被请求节点地址FF02::1:FF:3F:2A1C

特殊地址

  • 未指明地址:全0(::)
    • 没有有效地址的时候使用
  • 回环地址(::1)
    • 指代网络节点本身

IPv6网络中的邻居发现机制

邻居发现机制基于ICMPv6消息实现,通过ICMPv6消息管理同一链路上的节点到节点通信(网络层机制用于邻居发现的ICMPv6消息的IPv6地址为链路局部地址,Hop limit为255,从而将邻居发现消息限制在链路范围内 邻居发现机制中地址的选择遵循以下原则:

  1. 源地址:如果节点没有任何有效地址,那么发数据时使用::作为源地址
  2. 目的地址:如果节点不知道目的的任何地址包括IPv6地址,则使用FF02::1或者FF02::2 如果节点知道目的的IP地址,但不知道MAC,则使用该IP地址对应的被请求节点地址

地址解析

确定邻居节点的链路层地址(MAC地址)

  • 通过在节点之间交换邻居请求(NS)和邻居公告(NA)消息来完成
  • 网络层机制:NS和ND均为ICMPv6消息 过程
  1. 判断是否需要进行地址解析过程
    • 每个节点维护邻居缓存:邻居IPv6地址<—>MAC地址
    • 查找邻居缓存
  2. 根据需要开始地址解析过程
    1. 发送节点发送邻居请求(NS):组播发送,包含要解析的IPv6地址(目标地址)
    2. 目标节点接收并处理NS,响应邻居公告(NA)):单播发送,包含目标节点MAC地址
    3. 发送节点更新邻居缓存 例子 ![[Pasted image 20240102135406.png]] ![[Pasted image 20240102135501.png]]

地址重复检测

  • 自动配置地址最重要的是保证地址不重复
  • 为什么IPv6地址只要保证在链路上不重复就可以?
  • 地址重复检测 (DAD):基于邻居请求(NS)/邻居公告(NA)来实现
    • 节点发送NS,其中包含要检测的IPv6地址
    • 如果收到相应的NA,则检测到重复,节点不会使用重复的地址,否则开始使用该IPv6地址
      • 检测到地址重复后的具体处理依赖于实现
  • ![[Pasted image 20240102135711.png]]
  • ![[Pasted image 20240102135736.png]]

路由器发现

  • 相关消息

    • 路由器公告消息(RA)
    • 路由器请求消息(RS: Router Solicitation)
  • 具体过程

    • 被动式
      1. IPv6路由周期性(例如200s)公告RA:组播发送,使用FF02::1
      2. 同一链路上的IPv6主机接收RA消息,并且使用其内容来配置或者维护网络参数设置
    • 主动式
      1. IPv6主机主动发送路由器请求RS:组播发送,使用FF02::2
      2. 同一链路上的路由器响应RA:单播或者组播方式发送
  • ![[Pasted image 20240102140212.png]]

  • ![[Pasted image 20240102140307.png]]

IPv6地址自动配置过程

IPv6节点上地址自动配置过程(基于EUI-64地址) 1.路由器发现过程:主机发送路由器请求(RS)消息,路由器响应路由器公告(RA)消息,获取子网前缀等信息 2.基于FE80::/64 和 EUI-64地址生成的接口标识生成链路局部地址,设置为尝试(Tentative)状态 2.执行地址重复检测(DAD)过程 3.若DAD成功,将其设置为有效(Valid/Preferred)状态 4.将链路局部地址的被请求节点地址所对应的组播MAC加到网络接口的感兴趣MAC地址表中 5. 根据RA中包含的其它信息进行缺省路由等网络参数的配置 全局 IPv6 地址=IPv6 前缀 64bits+lpv6 接口标识 64bits eg.BC:AE:C5:C2:07:21 一、IPv6借口标识生成

  1. MAC地址 U/L 位取反:BC(1100):AE:C5:C2:07:21- BE (1110):AE:C5:C2:07:21
  2. 第三个和第四个字节之间插入 FFFE,变为BE-AE-C5-FF-FE-C2-07-21
  3. 写成冒号 16 进制,BEAE:CSFF:FEC2:721 二、全局 IPv6地址:2002:1:0:3:BEAE:C5FF:FEC2:721

路由表

  • 每个路由器和主机都维护路由表(转发表)
    • <目的网络/目的主机、下一跳IP地址、…..>

IPv4/IPv6过渡机制

手工配置隧道

  • 对每个IPv6分组,都事先手工配置它所对应的隧道的端点,主要是用于隧道封装所需的IPv4地址

自动配置隧道

  • 分组中所包含的IPv6地址和/或路由的下一跳决定隧道的端点,主要是指用于隧道封装所需的IPv4地址
ISATAP
  • 0:5EFE:w.x.y.z,w.x.y.z为私有单播IPv4地址
  • 200:5EFE:w.x.y.z w.x.y.z为公共(全局)单播IPv4地址 eg,RI 为ISATAP路由器,为支持 IPv6-in-IPv4 隧道,R1 在网络1中公告IPv6 前缀 2002:1:0:1::/64,主机 A的IPV4地址:160:0:0:2,主机 A 的 ISTAP地址? 全局:2002:1::1:200:5EFE:160.0.0.2或2002:1:0:1:200:5EFE:160.0.0.2 链路局部:FE80::200:5EFE:160.0.0.2

试着写出ISSTAP路由表,假设前缀为2001:DB8:0:7::/64 host:

  • 2001:DB8:0:7::/64. On-Link 同一网段的路由器
  • FE80::200:5EFE:路由器端口ipv4

router

  • 2001:DB8:0:7::/64. On-Link 不同的端口
  • <\下一个router的前缀,连接下一个router的端口ip>
  • 如果没有前缀,就写为::/0
6to4

根据分配给组织机构的全局(公共)IPv4地址,可以生成并且使用48比特全局IPv6地址前缀(2002:WWXX:YYZZ::/48

路由一定有一条:2002:/16 On-Link Throughthe 6to4 Interface host指向同一网段的路由器

  • 2002:xxxxx router指 目的,下一跳
  • <\下一个router的前缀,连接下一个router的端口ip> –手动隧道配置、自动隧道(ISATAP、6to4)原理和配置