4.1 网络层概述

网络层是 OSI 体系结构自下而上的第三层,核心任务是将分组从源主机经多个网络和链路传输到目的主机,主要包含分组转发、路由选择两大功能,且能向上层提供两种服务。

4.1.1 分组转发和路由选择

  1. 分组转发:路由器从某接口接收分组后,依据分组首部的转发标识(可能是目的地址或连接指示)查询自身的转发表,再将分组从合适接口转发给下一跳路由器或目的主机。每个路由器都需维护转发表,例如路由器 R1 从接口 1 收到分组,根据首部转发标识 A 查询转发表,得知应从接口 2 转发。
  2. 路由选择:源主机与目的主机间可能存在多条路径,网络层需确定选择哪条路径传分组。以主机 H1 与 H2 为例,存在 H1→R1→R2→H2 和 H1→R1→R4→R3→R2→H2 两条路径,选择依赖路由选择方式,主要有三种:
    • 集中式路由选择:由网络控制中心执行路由选择,向各路由器下载路由信息。
    • 分布式路由选择:各路由器运行路由选择协议,相互交换路由信息并自行计算路由。
    • 人工路由选择:由网络运维人员手动配置路由。
  3. 路由表与转发表:路由选择生成路由表,仅含目的网络到下一跳的映射,需优化网络拓扑变化计算;转发表由路由表得出,结构需优化查找过程。本书讨论路由选择原理时,不严格区分二者,以路由表表述。

4.1.2 网络层向其上层提供的两种服务

  1. 面向连接的虚电路服务
    • 核心思想:可靠通信由网络自身保证。
    • 通信过程:首先建立虚电路(逻辑连接,非物理连接),确保通信所需网络资源;然后双方沿虚电路发送分组,分组首部在连接建立阶段用完整目的主机地址,之后仅需携带虚电路编号;通信结束后释放虚电路。
    • 特点:分组按逻辑连接存储转发,若用可靠传输协议,可使分组无差错按序到达、不丢失、不重复。
    • 应用场景:曾用于 X.25、帧中继(FR)、异步传输模式(ATM)等广域分组交换网,但因特网未采用。
  2. 无连接的数据报服务
    • 核心思想:可靠通信由用户主机保证。
    • 通信过程:通信前无需建立网络层连接;每个分组可走不同路径,首部需携带完整目的主机地址,分组可能误码、丢失、重复和失序;通信结束后无需释放连接。
    • 特点:网络中路由器结构简单、成本低。因特网采用此服务,将复杂处理功能置于边缘(用户主机及内部运输层),核心仅提供尽最大努力的分组交付功能,使网络造价低、运行灵活、适应多种应用。
  3. 两种服务对比:二者在思路、连接需求、目的地址使用、分组转发方式、节点故障影响、分组顺序、服务质量实现难度等方面存在明显差异,具体可参考表 4-1。在 TCP/IP 体系结构中,网际层向上层提供无连接、尽最大努力交付的数据报服务。

4.2 网际协议(IP)

网际协议 IP 是 TCP/IP 体系结构网络层的核心协议,本节介绍的是 IPv4,与 IP 配套使用的有 ARP、RARP、ICMP、IGMP 四个协议,其中 RARP 已淘汰。

4.2.1 异构网络互连

  1. 异构网络特点:因特网由众多拓扑、性能、协议不同的网络通过路由器互连,因用户需求多样,无单一网络能适应所有需求。
  2. 互连问题:异构网络互连需解决不同的网络接入机制、差错恢复方法、路由选择技术、寻址方案、最大分组长度、服务类型等问题。
  3. IP 网概念:各异构网络的网络层使用相同的 IP 协议,从网络层看如同统一的 IP 网。IP 网上主机通信时,无需关注各网络异构细节,如同在单个网络通信。

4.2.2 IPv4 地址及其编址方法

  1. IPv4 地址基本信息:是给 IP 网上主机(或路由器)的每个接口分配的 32 比特全球唯一标识符,由 ICANN 分配,我国用户可向 APNIC 申请(需缴费,一般不接受个人申请)。2011 年 2 月 3 日,IANA 宣布 IPv4 地址分配完毕,我国 2014-2015 年逐步停止向新用户和应用分配 IPv4 地址,同时部署 IPv6。
  2. IPv4 地址表示方法:采用点分十进制表示法,将 32 比特地址每 8 比特为一组,转换为十进制数,组间用 “.” 分隔,例如 32 比特地址 00001010111100000000111110101010,转换后为 10.240.15.170。
  3. 编址方法发展阶段
    • 分类编址(1981 年):将 32 比特地址分为网络号(标志接口连接的网络)和主机号(标志主机或路由器接口)。同一网络中,网络号相同,主机号不同。分为 A、B、C、D、E 五类,A 类地址网络号 8 比特(首 1 位 0)、主机号 24 比特;B 类网络号 16 比特(首 2 位 10)、主机号 16 比特;C 类网络号 24 比特(首 3 位 110)、主机号 8 比特;D 类为多播地址(首 4 位 1110);E 类为保留地址(首 4 位 1111)。仅 A、B、C 类地址可分配给接口,主机号全 0 为网络地址,全 1 为广播地址,均不可分配。各类地址可指派网络数量、每个网络可分配地址数量等细节不同,具体可参考表 4-2、表 4-3。
    • [[划分子网]](1985 年,RFC 950):为解决分类编址地址浪费问题,从主机号借用部分比特作为子网号,使地址从两级结构变为三级结构(网络号、子网号、主机号)。通过子网掩码(32 比特,连续 1 对应网络号和子网号,连续 0 对应主机号)表明借用比特数,将地址与子网掩码逐比特逻辑与运算可得到子网网络地址。还存在默认子网掩码,即未[[划分子网]]时的子网掩码,A 类为 255.0.0.0,B 类为 255.255.0.0,C 类为 255.255.255.0。
    • 无分类编址(1993 年,CIDR):为进一步解决地址资源紧张,消除分类编址和[[划分子网]]概念,将地址改回两级结构(网络前缀、主机号),网络前缀不定长。用地址掩码(同子网掩码)配合地址,也可用斜线记法(地址后加 “/” 和网络前缀比特数)表示。CIDR 地址块可聚合多个连续地址,通过地址可确定地址块最小、最大地址,地址数量,聚合网络数量,地址掩码等,还能实现路由聚合(构造超网),减少路由表条目,查找时遵循[[最长前缀匹配原则]]。

4.2.3 IPv4 地址的应用规划

IPv4 地址应用规划是将给定地址块(或分类网络)划分为更小地址块(或子网),分配给不同网络,再给主机和路由器接口分配地址,主要有两种方法:

  1. 定长的子网掩码(FLSM):划分的每个子网用同一子网掩码,地址数量相同,易造成地址浪费。例如 C 类网络 218.75.230.0,按需求借用 3 比特作为子网号,划分为 8 个子网,每个子网 32 个地址,分配给不同网络时,部分网络可能用不完地址。
  2. 变长的子网掩码(VLSM):每个子网可使用不同子网掩码,地址数量按需分配,减少地址浪费。例如 CIDR 地址块 218.75.230.0/24,根据各网络地址需求,分别划分出 / 27、/28、/30 等不同前缀长度的地址块分配,满足不同网络需求,避免浪费。

4.2.4 IPv4 地址与 MAC 地址

  1. 封装位置:IP 地址是网际层及以上各层使用的地址,封装在 IP 数据报首部;MAC 地址(硬件 / 物理地址)是数据链路层使用的地址,封装在帧首部。
  2. 传送过程中变化:分组传输时,源 IP 地址和目的 IP 地址始终不变,源 MAC 地址和目的 MAC 地址逐网络(或逐链路)变化。例如主机 H1 给 H2 发送分组,经 R1、R2 转发,H1 到 R1,帧的源 MAC 是 H1 的 MAC,目的 MAC 是 R1 的 MAC;R1 到 R2,帧的源 MAC 是 R1 转发接口的 MAC,目的 MAC 是 R2 的 MAC;R2 到 H2,帧的源 MAC 是 R2 转发接口的 MAC,目的 MAC 是 H2 的 MAC,而 IP 数据报的源 IP 和目的 IP 始终是 H1 和 H2 的 IP。
  3. 二者关系:仅用 MAC 地址通信会导致路由器路由表需记录海量 MAC 地址,配置和维护困难,且占用大量通信资源和存储空间,增加分组转发时延。网际层用 IP 地址寻址,减少路由表条目,但需地址解析协议获取下一跳的 MAC 地址,以完成数据链路层帧的封装。

4.2.5 地址解析协议

  1. ARP 协议:功能是通过已知 IP 地址找到对应的 MAC 地址。主机维护 ARP 高速缓存表,记录 IP 与 MAC 地址对应关系(分动态和静态,动态由 ARP 自动获取,生命周期默认 2 分钟;静态由人工配置)。当主机要给其他主机发送分组,先查 ARP 高速缓存表,未找到则发送 ARP 请求报文(广播,含自身 IP、MAC 及目标 IP),目标主机收到后,记录发送方 IP 与 MAC 到自身缓存表,再发送 ARP 响应报文(单播,含自身 IP、MAC),发送方收到后更新自身缓存表,即可进行分组发送。ARP 协议仅在同一局域网使用,跨网络通信时,需在各段链路分别使用 ARP。
  2. RARP 协议:功能是使仅知自身 MAC 地址的主机找出 IP 地址,现因 DHCP 协议包含其功能,已不再使用。
  3. ARP 协议归属:有的教材将其划归网际层,有的划归数据链路层,均合理。除请求和响应报文,还有无故 ARP 等类型报文,且 ARP 协议无安全验证机制,存在欺骗和攻击问题。

4.2.6 IP 数据报的发送和转发过程

  1. 主机发送 IP 数据报
    • 直接交付:同一网络中主机通信,源主机通过 ARP 获取目的主机 MAC 地址,将 IP 数据报封装成帧发送。判断是否同一网络,需将自身和目的主机 IP 地址的网络前缀保持不变,主机号清零,若得到的网络地址相同,则为同一网络。
    • 间接交付:不同网络中主机通信,源主机通过 ARP 获取默认网关(路由器)MAC 地址,将 IP 数据报封装成帧发送给默认网关,由网关转发。
  2. 路由器转发 IP 数据报:路由器收到正确 IP 数据报(TTL 未结束、首部无误码)后,根据目的 IP 地址查询路由表。查到匹配条目则按指示转发;查不到则丢弃,并向源主机发送差错报告。例如主机 A 给 D 发送 IP 数据报,路由器 R 收到后,将目的 IP 与路由表中地址掩码逐比特逻辑与运算,找到匹配的目的网络条目,从对应接口转发给 D。路由器不转发目的地址为广播地址的 IP 数据报,以隔离广播域,避免广播风暴。

4.2.7 IPv4 数据报的首部格式

IPv4 数据报首部由 20 字节固定部分和最大 40 字节可变部分组成,各字段含义如下:

  1. 版本:4 比特,表 IP 协议版本,目前为 4(IPv4)。
  2. 首部长度、可选字段和填充:首部长度 4 比特,以 4 字节为单位,最小 5(20 字节固定部分),最大 15(20 字节固定 + 40 字节可变);可选字段 1-40 字节,支持排错、测量等功能,较少使用;填充字段用全 0 填充,确保首部长度为 4 字节整数倍。
  3. 区分服务:8 比特,旧称服务类型,现用于提供不同服务质量,一般不使用。
  4. 总长度:16 比特,以字节为单位,表 IP 数据报总长度(首部 + 数据载荷),最大 65535 字节。
  5. 标识、标志和片偏移:共同用于数据报分片。标识 16 比特,同一数据报的分片标识相同;标志 3 比特,最低位 MF(1 表后面有分片,0 表无),中间位 DF(1 表不允许分片,0 表允许),最高位保留为 0;片偏移 13 比特,以 8 字节为单位,表分片数据载荷偏移原数据报的位置。
  6. 生存时间(TTL):8 比特,最初以秒为单位,现以跳数为单位,源主机设置初始值,路由器转发时减 1,为 0 则丢弃,防止数据报无限兜圈。
  7. 协议:8 比特,指明数据载荷的协议类型,如 6 对应 TCP,17 对应 UDP 等。
  8. 首部检验和:16 比特,检测首部传输差错,路由器转发时需重新计算。计算方法为发送方将首部划分为 16 比特字序列,检验和字段置 0,反码算术求和后取反码写入;接收方重新求和取反码,结果为 0 则无差错,否则丢弃。
  9. 源 IP 地址和目的 IP 地址:各 32 比特,分别表发送方和接收方 IP 地址。

image-20260111134903622

4.3 静态路由配置

静态路由配置是人工给路由器配置路由表,简单、开销小,但不能适应网络状态变化,适用于小规模网络。

4.3.1 直连路由和非直连路由

  1. 直连路由:路由器给各接口配置 IP 地址和地址掩码后,自行得出各接口直连网络的路由条目,记录在路由表中。
  2. 非直连路由:路由器到其他非直连网络的路由,由人工配置(静态路由)或通过路由选择协议自动获取(动态路由)。例如路由器 R1 的接口 0、1 直连网络,对应路由条目为直连路由;到 R2 直连的另一网络的路由条目,由人工配置,为非直连路由。

4.3.2 默认路由和特定主机路由

  1. 默认路由:若路由器查不到匹配路由条目,按默认路由转发。默认路由条目目的网络为 0.0.0.0/0,匹配优先级最低([[最长前缀匹配原则]]),可减少路由表存储和查找时间。例如路由器 R1 到因特网的路由,配置默认路由,下一跳为 R2,无需配置到因特网各网络的路由条目。
  2. 特定主机路由:针对某一台主机的路由,目的网络为该主机 IP/32,匹配优先级最高,用于安全控制、网络测试和排错。例如路由器 R1 到主机 192.168.2.1 的路由,配置特定主机路由,下一跳为 R2。配置静态路由需谨慎,避免路由环路。

4.4 因特网的路由选择协议

4.4.1 路由选择分类

  1. 静态路由选择:人工配置路由条目,简单、开销小,但不适应网络状态变化,适用于小规模网络。
  2. 动态路由选择:路由器通过路由选择协议自动获取路由信息,复杂、开销大,但能适应网络状态变化,适用于大规模网络。

4.4.2 因特网采用分层次的路由选择协议

  1. 特点:自适应(动态路由,适应网络状态变化)、分布式(各路由器交换信息,共同完成路由获取和更新)、分层次(将因特网划分为自治系统 AS,AS 内和 AS 间用不同路由选择协议)。
  2. 路由选择协议分类
    • 内部网关协议(IGP):用于 AS 内路由选择,各 AS 可选择不同 IGP,如 RIP、OSPF。
    • 外部网关协议(EGP):用于 AS 间路由选择(域间路由选择),如 BGP。早期 RFC 用 “网关”,现新文档用 “路由器”,二者称呼均可。

4.4.3 路由信息协议(RIP)

  1. 基本概念:是早期广泛使用的 IGP,标准文档 RFC 1058,基于距离向量算法,用跳数衡量到目的网络的距离(直连网络距离 1,非直连为经过路由器数 + 1),最大跳数 15(16 表不可达),适用于小型互联网。认为跳数少的路由是好路由,可进行等价负载均衡。仅与相邻路由器周期性(约 30 秒)交换自身路由表信息,网络拓扑变化时触发更新,加快收敛。
  2. 工作过程:路由器初始仅知直连网络路由;与相邻路由器周期性交换更新路由信息;多次交换更新后,各路由器知晓 AS 内各网络最短距离和下一跳,实现收敛。
  3. 距离向量算法:路由器收到相邻路由器路由更新报文后,修改报文(下一跳改为该路由器,距离加 1),再更新自身路由表,更新规则包括:相同下一跳,无论距离变化均更新;发现新网络,添加路由条目;不同下一跳,新路由距离更小则更新;不同下一跳,新路由距离相同则添加条目(等价负载均衡);不同下一跳,新路由距离更大则不更新。还包含时间参数,如 30 秒发送更新报文,180 秒未收更新则标记路由无效,再 120 秒未收则删除该路由。
  4. 存在问题:“坏消息传播得慢”,易形成路由环路,可持续数分钟。可通过限制最大跳数、触发更新、水平分割等措施减少问题概率或危害,但无法彻底解决,因路由器缺少目的网络完整路径信息,无法判断路由是否环路。
  5. 版本和报文:最新版本 RIP2(RFC 2453),支持 VLSM、CIDR、鉴别和多播。RIP 报文用 UDP(端口 520)传送,属应用层,但核心功能属网际层。
  6. 优缺点:优点是实现简单、路由器开销小,好消息传播快;缺点是限制最大跳数,网络规模受限,相邻路由器交换完整路由表,网络规模扩大时开销增加,坏消息传播慢,收敛时间长,大规模 AS 应使用 OSPF,小规模 AS 仍常用 RIP。

4.4.4 开放最短路径优先协议(OSPF)

  1. 基本概念:1989 年开发,克服 RIP 缺点,“开放” 指协议公开发表,“最短路径优先” 因使用 Dijkstra 算法。基于链路状态(路由器相邻关系及链路代价,代价由网络管理人员决定,如思科路由器用 100Mb/s 除以链路带宽计算),无路由环路,不限制网络规模,更新效率高,收敛快。
  2. 关键机制
    • 邻居关系建立和维护:相邻路由器通过 Hello 分组(封装在 IP 数据报,发往组播地址 224.0.0.5,协议号 89)建立和维护邻居关系,Hello 分组发送周期 10 秒,40 秒未收则认为邻居不可达,主机建立邻居表。
    • 链路状态通告(LSA):每个路由器产生 LSA,含直连网络和邻居路由器的链路状态信息。
    • 链路状态更新分组(LSU):LSA 封装在 LSU 中,用洪泛法发送,使各路由器链路状态数据库(LSDB)一致。
    • 链路状态数据库(LSDB):存储 LSA,各路由器 LSDB 一致后,基于 Dijkstra 算法计算最短路径,构建路由表。
  3. 分组类型:共五种,分别是问候(Hello)分组(发现和维护邻居可达性)、数据库描述分组(给邻居发送 LSDB 摘要)、链路状态请求分组(请求邻居发送特定 LSA 详细信息)、链路状态更新分组(洪泛发送 LSA)、链路状态确认分组(确认 LSU)。
  4. 工作过程:相邻路由器交换 Hello 分组,建立邻居关系;发送数据库描述分组,共享 LSDB 摘要;根据缺少的 LSA,发送链路状态请求分组;邻居发送 LSU,请求方更新 LSDB 并发送确认;LSDB 同步后,路由器基于 LSDB 计算路由表。每 30 分钟或链路状态变化时,洪泛发送 LSU,更新 LSDB。
  5. 多点接入网络优化:选举指定路由器(DR)和备用指定路由器(BDR),普通路由器仅与 DR、BDR 建立邻居关系,减少分组发送数量。DR 故障时,BDR 顶替。
  6. 区域划分:将 AS 划分为多个区域,主干区域(标识 0)连通其他区域,各区域有区域边界路由器(连接自身区域和主干区域)、区域内路由器(所有接口在同一区域)、主干路由器(主干区域内路由器,含区域边界路由器)、自治系统边界路由器(主干区域内与其他 AS 交换路由信息的路由器)。区域划分将洪泛范围局限于区域,减少通信量。

4.4.5 边界网关协议(BGP)

  1. 基本概念:属 EGP,用于 AS 间路由选择。因不同 AS 度量路由 “代价” 不同,且需考虑政治、经济、安全等策略,BGP 不寻找最佳路由,仅寻找能到达目的网络且无环路的较好路由。
  2. BGP 边界路由器:每个 AS 选择至少一个路由器作为 BGP 发言人(常为边界路由器),不同 AS 的 BGP 发言人通过建立 TCP 连接(端口 179),进行 BGP 会话,交换路由信息(网络可达性,即到达网络需经过的 AS 序列),构建无环路的 AS 连通图。BGP 发言人还需运行所在 AS 的 IGP(如 RIP、OSPF)。
  3. BGP-4 报文:共四种,OPEN 报文(建立 BGP 关系,初始化通信)、UPDATE 报文(通告路由信息,撤销过时路由)、KEEPALIVE 报文(周期性证实邻站连通性,约 30 秒发送,仅 19 字节)、NOTIFICATION 报文(发送差错信息)。RFC 2918 增加 ROUTE-REFRESH 报文(请求对等方重新通告路由)。初始交换完整路由表,后续仅更新变化部分。

4.4.6 路由器的基本工作原理

路由器是有多个输入、输出端口的专用计算机,任务是转发分组,分为路由选择和分组转发两部分。

  1. 路由选择部分:核心是路由选择处理机,根据路由选择协议,周期性与其他路由器交换路由信息,构建和更新路由表。
  2. 分组转发部分:由输入端口、交换结构、输出端口组成。信号从输入端口进入,物理层转比特流给数据链路层,数据链路层识别帧,去帧头帧尾给网络层:
    • 若为普通待转发数据分组,网络层根据目的地址查转发表,更新分组首部(如 TTL 减 1),交数据链路层封装成帧,物理层发送。
    • 若为路由分组,交路由选择处理机,更新路由表,路由选择处理机还会周期性发送路由信息。
  3. 缓冲区:各端口有输入缓冲区(暂存待处理分组)和输出缓冲区(暂存待发送分组)。
  4. 交换结构:是关键构件,实现分组从输入端口到输出端口的转发,有通过存储器、总线、互连网络三种实现方式,转发速率依次提高。

4.5 网际控制报文协议(ICMP)

为有效转发 IP 数据报、提高交付成功率,TCP/IP 体系结构网际层使用 ICMP,主机或路由器用其发送差错报告和询问报文,ICMP 报文封装在 IP 数据报中发送。

4.5.1 ICMP 报文的种类

  1. ICMP 差错报告报文:用于报告差错情况,共五种:
    • 终点不可达:路由器或主机不能交付 IP 数据报时发送,细分为目的网络、主机、协议、端口不可达等 13 种错误。例如路由器 R1 路由表无 H2 所在网络路由,收到 H1 给 H2 的 IP 数据报后,丢弃并发送终点不可达报文给 H1。
    • 源点抑制:路由器或主机因拥塞丢弃 IP 数据报时发送,使源主机降低发送速率。例如路由器 R2 拥塞,丢弃 H1 给 H2 的 IP 数据报,发送源点抑制报文给 H1。
    • 时间超过(超时):路由器转发 IP 数据报时,TTL 减 1 为 0 则丢弃并发送;终点未在规定时间收到全部数据报片,丢弃已收片并发送。例如 H1 发送 TTL=2 的 IP 数据报,经 R1(TTL=1)、R2(TTL=0),R2 丢弃并发送时间超过报文给 H1。
    • 参数问题:路由器或目的主机收到 IP 数据报,首部检验和出错则丢弃并发送。例如 H1 给 H2 的 IP 数据报首部受干扰出错,R1 检测到后丢弃并发送参数问题报文给 H1。
    • 改变路由(重定向):路由器告知主机下次应将数据报发送给其他路由器,以选择更好路由。例如 H1 默认网关为 R1,R1 发现 H1 发往 N2 的最佳路由经 R4,发送改变路由报文给 H1,H1 更新路由表。
    • 不发送 ICMP 差错报告报文的情况:对 ICMP 差错报告报文不发送;对第一个分片后续的分片不发送;对多播地址的 IP 数据报不发送;对特殊地址(如 127.0.0.0、0.0.0.0)的数据报不发送。
  2. ICMP 询问报文:常用的有回送请求和回答(测试目的站可达性及状态)、时间戳请求和回答(请求日期时间,用于时钟同步和时间测量)。

4.5.2 ICMP 的典型应用

  1. 分组网间探测(PING):测试主机或路由器连通性,应用层直接使用 ICMP,不使用 TCP 或 UDP,用回送请求和回答报文。例如 PC 发送 4 个 ICMP 回送请求报文给服务器,收到 4 个回送回答报文,可得出连通性和往返时间,部分主机 / 服务器可能不理睬该报文以防攻击。
  2. 跟踪路由
    • 工具:UNIX 中为 “traceroute”(用 UDP,ICMP 差错报告报文),Windows 中为 “tracert”(直接用 ICMP,回送请求、回答及差错报告报文)。
    • tracert 原理:主机发送 ICMP 回送请求报文,TTL 依次设为 1、2、3…,TTL=1 时,第一台路由器收到后 TTL 减为 0,丢弃并发送时间超过报文,主机知第一台路由器;TTL=2 时,第二台路由器收到后 TTL 减为 0,丢弃并发送时间超过报文,主机知第二台路由器;直至 TTL 足够大,目的主机收到后发送回送回答报文,主机知到达目的主机。例如 H1 跟踪到 H2 的路由,依次发送 TTL=1、2、3 的报文,获取各路由器 IP 地址。

4.6 虚拟专用网(VPN)和网络地址转换(NAT)

4.6.1 虚拟专用网(VPN)

  1. 概念引入:远程专用网通信有两种方式,租用电信线路(简单但费用高)或利用因特网作为载体(即 VPN,成本低)。专用网内主机用专用地址(RFC 1918 规定 10.0.0.0~10.255.255.255、172.16.0.0~172.31.255.255、192.168.0.0~192.168.255.255),仅在机构内部有效,因特网路由器不转发目的地址为专用地址的 IP 数据报。
  2. 工作原理:专用网需至少一个路由器有全球 IP 地址,进行 VPN 配置。源主机发送内部 IP 数据报给路由器,路由器加密内部 IP 数据报,重新封装成外部 IP 数据报(源、目的为路由器全球 IP),通过因特网发送给目的专用网路由器;目的路由器解密,提取内部 IP 数据报,发送给目的主机。VPN 逻辑上像专用网通信,使用 IP 隧道技术。
  3. VPN 类型:内联网 VPN(同一机构内不同部门专用网构成)、外联网 VPN(机构 VPN 包含外部合作伙伴)、远程接入 VPN(外地员工通过因特网访问公司专用网)。

4.6.2 网络地址转换(NAT)

  1. 背景:为缓解 IPv4 地址耗尽问题,1994 年提出,使大量用内部专用地址的主机共享少量外部全球地址访问因特网,需在专用网连接因特网的路由器(NAT 路由器)上安装 NAT 软件,NAT 路由器至少有一个全球 IP。
  2. 基本 NAT 方法:源主机给外部主机发送 IP 数据报,NAT 路由器从全球地址池选临时全球地址,修改数据报源地址,记录内部 IP 与全球 IP 对应关系,转发数据报;外部主机发回数据报,NAT 路由器根据对应关系,修改目的地址为内部 IP,转发给源主机。缺点是 NAT 路由器有 n 个全球 IP,专用网最多 n 台主机同时接入因特网。
  3. 网络地址与端口号转换(NAPT):结合运输层端口号,使大量内部主机共用 1 个全球 IP。NAPT 路由器收到内部主机 IP 数据报,修改源地址为全球 IP,修改运输层源端口号,记录内部 IP: 端口与全球 IP: 端口对应关系,转发数据报;收到外部主机数据报,根据对应关系,修改目的地址和端口号,转发给内部主机。NAPT 对部分网络应用不透明,通信需由专用网内部发起,内部主机不能直接充当因特网服务器,P2P 应用需 NAT 穿透技术。

4.7 IP 多播

4.7.1 IP 多播技术的相关基本概念

多播(组播)是 “一对多” 通信技术,相比单播 “一对一”,可节省网络资源。IP 多播由 Steve Dering 于 1988 年提出,1992 年 3 月首次实验。例如视频服务器向 60 个主机传视频,单播需发 60 个,多播仅发 1 个,路由器按需复制,局域网利用硬件多播,多播组成员均可接收。因特网实现多播需路由器支持多播功能,涉及多播寻址和路由选择协议。

4.7.2 IP 多播地址和多播组

  1. 多播地址:IPv4 中 D 类地址为多播地址,首 4 位 1110,剩余 28 位可变,范围 224.0.0.0~239.255.255.255,仅作目的地址。
  2. 多播组:每个 D 类地址标识一个多播组,使用同一多播地址接收数据报的主机构成多播组,成员可动态变动,主机可属多个多播组,非成员也可向多播组发送数据报,多播数据报 “尽最大努力交付”。
  3. D 类地址分类:分预留多播地址(永久)、全球可用多播地址、本地管理多播地址(仅本地有效)。
  4. IP 多播类型:本局域网上的硬件多播、因特网上的多播,因特网上多播最后阶段需在局域网用硬件多播交付。

4.7.3 在局域网上进行硬件多播

局域网支持硬件多播,将 IPv4 多播地址映射为多播 MAC 地址(IANA 分配 01-00-5E-00-00-00~01-00-5E-7F-FF-FF 的 MAC 地址),多播 MAC 地址首 25 比特固定,剩余 23 比特来自 D 类 IP 地址低 23 比特,导致多播 IP 与 MAC 地址映射不唯一。收到多播数据报的主机,先通过 MAC 地址判断是否属本硬件多播组,是则交网际层,网际层再根据 IP 地址判断是否属本 IP 多播组,是则接受,否则丢弃。

4.7.4 在因特网上进行 IP 多播需要的两种协议

因特网上 IP 多播需网际组管理协议(IGMP)和多播路由选择协议。IGMP 使本地局域网多播路由器知本局域网上是否有主机加入 / 退出多播组,仅在本网络有效,不知多播组成员数量和分布;多播路由选择协议使多播路由器协同工作,为每个多播组建立多播转发树,IP 多播数据报沿树洪泛,再通过硬件多播发送给成员。

4.7.5 网际组管理协议(IGMP)

  1. 基本概念:最新版本 IGMPv3(RFC 3376),有成员报告、成员查询、离开组三种报文,封装在 IP 多播数据报中发送(协议字段 = 2,目的地址为多播地址,TTL=1)。
  2. 工作原理
    • 加入多播组:主机发送 IGMP 成员报告报文(含要加入的多播组地址,数据报目的地址为该多播组地址),同组其他成员监听到则取消发送。多播路由器收到未知多播组的报告,将该多播组地址添加到多播组列表(不记录主机 IP)。
    • 监视多播组成员变化:多播路由器默认每 125 秒发送 IGMP 成员查询报文(含特定多播组地址或全 0,数据报目的地址 224.0.0.1),收到的多播组成员延迟 1-10 秒随机响应,若收到同组其他成员响应则取消。长时间未收某多播组响应,将其从列表删除。同一网络多播路由器选举查询路由器(IP 地址最小)发送查询报文。
    • 退出多播组:IGMPv2 支持主机主动发送离开组报文(含要退出的多播组地址,数据报目的地址 224.0.0.2),多播路由器收到后,立即针对该多播组发送查询报文,预定时间未收响应则删除该多播组。

4.7.6 多播路由选择协议

多播路由选择协议为每个多播组建立多播转发树,有两种构建方法:

  1. 基于源树的多播路由选择:典型算法反向路径多播(RPM),先通过反向路径广播(RPB)建立广播转发树(避免洪泛法在环路网络的问题,检查广播分组是否从源点最短路径传来,是则转发),再用剪枝算法剪除下游非成员路由器,获得多播转发树。被剪枝路由器若又发现多播组成员,可发送嫁接报文重新加入。
  2. 组共享树多播路由选择:用基于核心的分布式生成树算法,指定核心路由器,以其为根建立多播转发树。成员路由器向核心路由器单播加入报文,加入报文路径构成树的分支,嫁接到现有树上。
  3. 因特网多播路由选择协议:目前无全球使用的协议,建议使用的有 DVMRP、MOSPF、PIM-SM、PIM-DM、CBT 等。IP 多播目前主要用于局部网络,应用层多播技术也在发展,多播路由选择协议算法思想仍适用。

4.8 移动 IP 技术

4.8.1 移动性对因特网应用的影响

  1. 无影响场景:主机在同一 Wi-Fi 服务区移动(IP 不变);主机在不同地点关机后重新上网(通过 DHCP 获取新 IP,对用户透明)。
  2. 有影响场景:主机在不同网络间移动且需不间断通信(如汽车中下载视频),因切换网络导致 IP 变化,应用程序无法向变动 IP 的主机发送数据。IP 地址指明主机及所在网络,移动主机切换网络必变 IP,否则数据报仍路由到原网络。

4.8.2 移动 IP 技术的相关基本概念

移动 IP(RFC 3344)使移动主机在网络间漫游时保持原 IP 不变,且非移动主机可正确向其发送数据报,无需改变非移动主机软件和多数路由器工作方式。

  1. 归属网络、归属地址(永久地址)、归属代理:归属网络是移动主机默认连接或初始接入的网络;归属地址是移动主机在归属网络的 IP,通信中不变;归属代理是归属网络中执行移动管理功能的实体(通常是路由器,功能在应用层完成)。
  2. 外地网络(被访网络)、外地代理、转交地址:外地网络是移动主机当前漫游的网络;外地代理是外地网络中帮助移动主机执行移动管理功能的实体(通常是路由器);转交地址是外地代理为移动主机提供的临时外地网络地址。
  3. 工作过程:移动主机漫游到外地网络,归属代理代收其数据报,用转交地址通过 IP-in-IP 隧道转发给外地代理,外地代理再转发给移动主机,对固定主机透明。

4.8.3 移动 IP 技术的基本工作原理

  1. 代理发现与注册:移动主机漫游到外地网络,通过代理发现协议与外地代理建立联系,获取转交地址并注册;外地代理向归属代理注册移动主机转交地址;归属代理记录转交地址,代收并转发数据报。
  2. 固定主机向移动主机发送 IP 数据报:固定主机发送数据报(目的为移动主机归属地址),路由到归属网络,归属代理代收,封装成新 IP 数据报(目的为转交地址),通过 IP 隧道发送给外地代理;外地代理解封,转发给移动主机。归属代理用 ARP 代理技术代收数据报,转交地址可为外地代理地址(多主机共享),外地代理通过记录移动主机永久地址与 MAC 地址对应关系转发数据报。
  3. 移动主机向固定主机发送 IP 数据报:移动主机发送数据报(源为归属地址,目的为固定主机 IP),按正常流程发送,将外地代理或外地网络路由器设为默认网关,无需经归属代理转发。
  4. 同址转交地址:外地代理可运行在移动主机上,此时转交地址为同址转交地址(既是外地代理也是移动主机地址),移动主机需通过 DHCP 获取外地网络地址,运行外地代理软件。
  5. 三角形路由问题:固定主机向移动主机发送数据报需经归属代理转发,可能存在低效路径(如固定主机与移动主机在同一外地网络)。解决方法是固定主机配置通信代理,从归属代理获取移动主机转交地址,直接通过隧道发送,但增加复杂性且对固定主机不透明。

4.8.4 蜂窝移动通信网中的移动性管理

蜂窝移动通信网更早支持移动性,用户手机漫游用同一电话号码,通话不中断,采用类似移动 IP 但更复杂的机制。CDMA2000 分组域核心网络支持用移动 IP 为数据业务提供移动性服务,其他 3G 标准在 IP 层以下提供,且仅在网络内部提供移动性服务。目前移动 IP 未在全球因特网大规模使用。

4.9 下一代网际协议 IPv6

4.9.1 IPv6 引进的主要变化

IPv4 地址设计缺陷导致地址耗尽,2011 年 IANA 宣布 IPv4 地址分配完毕,我国 2014-2015 年停止分配并部署 IPv6。IPv6 支持无连接、尽最大努力交付,称协议数据单元为分组,本书仍称 IP 数据报。主要变化:

  1. 更大地址空间:地址长度从 32 比特增至 128 比特,地址空间极大,可预见未来不会用完。
  2. 扩展的地址层次结构:地址空间大,可划分更多层次,反映因特网拓扑,优化寻址和路由设计。
  3. 灵活的首部格式:首部与 IPv4 不兼容,定义可选扩展首部,提高路由器处理效率(仅处理逐跳扩展首部)。
  4. 改进的选项:允许数据报含选项控制信息,可添加新选项,IPv4 选项固定。
  5. 允许协议继续扩充:适应技术发展和新应用出现,IPv4 功能固定。
  6. 支持即插即用(自动配置):主机或路由器自动配置 IPv6 地址及网络参数,无需 DHCP。
  7. 支持资源预分配:为实时音视频等应用提供更好服务质量保证。

4.9.2 IPv6 数据报的基本首部

IPv6 数据报由 40 字节基本首部和可变长度有效载荷(含零个或多个扩展首部及数据部分)组成。与 IPv4 首部相比,取消了首部长度、服务类型、总长度、标识、标志、片偏移、协议、检验和、选项等字段,新增通信量类、流标号字段,修改 TTL 为跳数限制,协议改为下一个首部。基本首部各字段含义:

  1. 版本:4 比特,IPv6 对应值为 6。
  2. 通信量类:8 比特,区分数据报类别或优先级。
  3. 流标号:20 比特,标识 “流”(特定源到目的的一系列数据报),用于资源预分配,非实时数据置 0。
  4. 有效载荷长度:16 比特,表基本首部后有效载荷字节数,最大 65535 字节。
  5. 下一个首部:8 比特,无扩展首部时表数据协议类型,有扩展首部时表首个扩展首部类型。
  6. 跳数限制:8 比特,源主机设初始值(最大 255),路由器转发时减 1,为 0 则丢弃。
  7. 源地址、目的地址:各 128 比特,分别表发送端和接收端 IPv6 地址。

4.9.3 IPv6 数据报的扩展首部

IPv6 将 IPv4 首部选项放入扩展首部,由源点和终点主机处理,路径中路由器不处理(除逐跳选项扩展首部),提高处理效率。RFC 2460 定义六种扩展首部:逐跳选项、路由选择、分片、鉴别、封装安全有效载荷、目的站选项。每个扩展首部首字段为 8 比特下一个首部字段,多个扩展首部按特定顺序出现。

4.9.4 IPv6 地址

  1. 地址分配:IPv6 给节点每个接口指派地址,节点可有多个单播地址。
  2. 地址空间大小:128 比特,地址空间为 2^128,极其巨大,可满足未来需求。
  3. 表示方法:采用冒号十六进制记法,将 128 比特每 16 比特为一组(共 8 组),组间用 “:” 分隔,每组 4 比特转十六进制数。可 “左侧零” 省略(十六进制数前导零省略)和 “连续零” 压缩(连续零用 “::” 替代,一个地址仅用一次),还可结合点分十进制后缀(过渡阶段用),CIDR 斜线记法仍适用。
  4. 地址分类
    • 目的地址类型:单播(点对点)、多播(一点对多点,广播为多播特例)、任播(一点对一组中最近一个)。
    • 地址分类:未指明地址(全 0,缩写 “::”,仅作源地址)、环回地址(仅最低比特 1,其余全 0,缩写 “::1”)、多播地址(首 8 比特全 1,记为 FF00::/8)、本地链路单播地址(首 10 比特 1111111010,记为 FE80::/10,仅本地网络通信)、全球单播地址(除上述四种,三级结构:48 比特全球路由选择前缀、16 比特子网标识符、64 比特接口标识符)。

4.9.5 从 IPv4 向 IPv6 过渡

因因特网上 IPv4 路由器数量多,过渡需逐步进行,新 IPv6 系统需兼容 IPv4,主要有两种过渡策略:

  1. 双协议栈:主机或路由器装 IPv4 和 IPv6 两套协议栈,可与两种系统通信,记为 IPv6/IPv4。双协议栈主机通过 DNS 查询目的主机地址类型,选择对应协议通信。例如 IPv6 主机 A 给 B 发送数据报,经 IPv6/IPv4 路由器 R1、R4 及 IPv4 路由器 R2、R3,R1 将 IPv6 数据报转为 IPv4 数据报,R2、R3 转发,R4 再恢复为 IPv6 数据报给 B,转换可能损失部分 IPv6 字段信息。
  2. 隧道技术:IPv6 数据报进入 IPv4 网络时,封装成 IPv4 数据报(IPv6 数据报为数据部分),IPv4 数据报在 IPv4 网络传输,离开时取出 IPv6 数据报转发。IPv4 数据报源、目的为隧道入口、出口路由器 IPv4 地址,协议字段设为 41,表明数据部分为 IPv6 数据报。

4.9.6 网际控制报文协议 ICMPv6

IPv6 需 ICMPv6 反馈差错信息,比 ICMPv4 复杂,合并 ARP 和 IGMP 功能,因此 IPv6 网际层仅 ICMPv6 一个配套协议。ICMPv6 报文封装成 IPv6 数据报发送,前面是基本首部和扩展首部,前面首部的下一个首部字段置为 58。ICMPv6 报文可报告差错、获取信息、探测邻站、管理多播通信,常用报文类型有目的站不可达、分组太长、时间超过、参数问题(差错报告),回送请求、回答(查询),多播听众查询、报告、完成(多播管理),路由器询问、通告、邻站询问、通告、改变路由(邻站发现)等。

4.10 软件定义网络(SDN)

SDN 由 Nick McKeown 教授于 2009 年提出,最初是学术探讨的网络体系结构,后被企业采用(如谷歌 B4 数据中心网络),能提高带宽利用率、稳定性,简化管理,降低成本,是当前网络领域热门技术。

4.10.1 网络层的数据层面和控制层面

路由器功能分分组转发(数据层面)和路由选择(控制层面)。数据层面基于转发表转发分组,现多硬件实现,转发时间纳秒级;控制层面路由器需交换路由信息,用软件计算路由,生成路由表,再得出转发表,计算时间秒级。传统路由器二者在同一设备,SDN 中二者分离,路由器无路由选择软件,不交换路由信息,控制层面有逻辑集中的远程控制器(物理可由多服务器组成),掌握网络状态,计算最佳路由,生成各路由器转发表,路由器仅查表转发分组。SDN 并非要将整个因特网改为集中控制,适用于大型数据中心广域网等场景。

4.10.2 OpenFlow 协议

OpenFlow 协议是 SDN 的重要标准,SDN 是新型网络体系结构,核心是控制与数据层面分离,OpenFlow 是二者通信接口,使控制器可直接访问和控制数据层面设备(逻辑集中、基于流的控制)。由 ONF 制定规范,2009 年 1.0 版,2015 年 3 月 1.5.1 版,成熟版本 1.3 版,SDN 不强制使用 OpenFlow,但多数产品采用。

  1. 传统数据层面任务:“匹配 + 动作”,匹配转发表网络前缀(最长前缀匹配),动作是从指定接口转发。
  2. SDN 广义转发:匹配可涉及各层首部字段,动作除转发,还可负载均衡、重写 IP 首部、阻挡分组等。
  3. OpenFlow 交换机和流表
    • 关系:SDN 中完成 “匹配 + 动作” 的设备称 OpenFlow 交换机(分组交换机),取代路由器转发表的是流表,流表由 SDN 远程控制器通过安全信道(OpenFlow 协议)管理。OpenFlow 既是通信协议,也是交换功能逻辑结构规约,不同厂商设备对控制器呈统一逻辑交换功能。
    • 流表结构:每个 OpenFlow 交换机有一个或多个流表,流表项含首部字段值(匹配字段,涉及多層首部)、计数器(匹配分组数、时间等)、动作(转发、丢弃、复制、重写首部等)。
    • 示例:简单转发(按源、目的 IP 匹配,指定端口转发)、负载均衡(按入端口和目的 IP 匹配,不同入端口对应不同转发端口)、防火墙(按源 IP 匹配,允许特定源 IP 分组转发)等场景,流表项设置不同匹配和动作。

4.10.3 SDN 体系结构

  1. 关键特征
    • 基于流的转发:数据层面分组交换机由 SDN 控制器控制,转发基于多層首部字段,流表项由控制器计算、管理和安装。
    • 数据与控制层面分离:数据层面是简单快速的分组交换机,执行 “匹配 + 动作”;控制层面由服务器和软件组成,计算和管理流表。
    • 外部网络控制功能:控制层面软件在远离数据层面设备的机器上,含 SDN 控制器(网络操作系统)和网络控制应用程序,控制器维护网络状态,提供控制接口。
    • 可编程网络:通过控制层面网络控制应用程序,控制器控制数据层面交换机,实现路由选择、负载均衡、接入控制等功能,使网络可编程。
  2. SDN 控制器:是 SDN 体系结构中最复杂部分,分三层:
    • 通信层:底层,完成控制器与数据层面设备通信,使用 OpenFlow 协议,设备向控制器传送本地事件,确保控制器掌握网络最新状态。
    • 网络范围的状态管理层:中间层,维护全网主机、链路、交换机、流表等状态信息,为控制决策提供依据。
    • 到网络控制应用程序层的接口:顶层,通过北向 API(如 REST 风格 API)实现控制器与网络控制应用程序交互,应用程序可读写网络状态和流表,处理网络事件。
  3. 接口:SDN 控制器与数据层面设备通信接口为南向 API,与控制层面应用程序接口为北向 API。SDN 各组件可由不同厂商提供,与传统网络(设备集成控制和数据层面)不同。目前有 OpenDaylight、ONOS 等开源 SDN 控制器。