4.1 网络层提供的两种服务
电信网采用面向连接的通信方式,并在此基础上使用可靠传输协议,当有通信需求时,双方建立虚电路进行实时通讯,通讯结束后释放通讯资源。由于终端电话机结构简单,无处理差错能力,因此此方案对电话业务来说是十分合适的。
但计算机网络的终端具有很强的处理差错能力,因此网络层的设计思路为:网络层向上只提供简单灵活的、无连接、尽最大努力的数据报服务。网络层不提供服务质量的承诺,可靠传输由网络主机中的运输层保障。
4.2 网际协议 IP
与 IP 协议配套的三个协议:
- 地址解析协议 ARP (Address Resolution Protocol)
- 网际控制报文协议 ICMP (Internet Control Message Protocol)
- 网际组管理协议 IGMP (Internet Group Management Protocol)
三协议关系如下:
TCP/IP 协议中的网络层常常被称为网际层或 IP 层。
4.2.1 虚拟互联网络
没有一种单一的网络能够适应所有用户的需求。将网络连接起来需要一些不同的中间设备,一般有如下四种:
- 物理层:转发器 (repeater)
- 数据链路层:网桥或桥接器 (bridge)
- 网络层:路由器
- 网络层以上:网关 (gateway)
由于历史原因,许多 TCP/IP 的文献曾把网络层使用的路由器称为网关。
参与互连的计算机网络都是用相同的网际协议 IP,因此可以看作一个大的虚拟互连网络。
4.2.2 分类的 IP 地址
其中 D 类地址用于多播。
点分十进制表示法:32 位 IPv4 地址,八位一段点分隔,每段十进制表示。
常用的三种类别 IP 地址
A 类地址:
- 网络号占一个字节,第一位固定为 0,共 126 ($2^7-2$) 个可分配,全 0 表示 “this”,意为“本网络”, 127 (01111111) 保留作为本地软件环回测试本主机进程之间通信之用。
- 主机号占三个字节,因此一个 A 类网络号最大主机数为 $2^{24}-2$ 。全 0 表示本主机连接到的单个网络地址,全 1 表示该网络上的所有主机。
B 类地址:
- 网络号占两个字节,前两位固定为 10,共 $2^{14}-1$ 个可分配,128.0.0.0不指派。最大主机数 65534,扣除全 0 和全 1。
- C类地址:
- 网络号占三个字节,前三位固定 110,192.0.0.0 不指派,因此 $2^{21}-1$ 个网络号。每个 C 类地址最大主机数 254。
两个路由器相连,在连线两端的接口处可分配也可不分配 IP 地址。节省资源则不分配,常称为 无编号网络或无名网络。
4.2.3 IP 地址与硬件地址
物理地址是数据链路层和物理层使用的地址,而 IP 地址是网络层和以上各层使用的地址,是一种逻辑地址。
在通讯过程,数据从高层下到低层,层层封装,然后才到链路上传输。设备在收到 MAC 帧时,根据首部硬件地址决定收下或丢弃。
IP 层抽象的互联网上只能看到 IP 数据报。
虽然 IP 数据报有源地址,但路由器只根据目的站 IP 地址的网络号进行路由选择。
4.2.4 地址解析协议 ARP
知道 IP 地址,找出其相应的硬件地址。ARP 在主机 ARP 高速缓存 (APR cache) 中存放一个有本局域网上的各主机和路由器 IP 到硬件地址的映射表,并且映射表经常动态更新。
当 A 向 B 发送 IP 数据报时,先在其 ARP cache 中查找,若查不到,则 ARP 进程广播 ARP 请求分组,除 B 外的主机不响应,B 则响应并向 A 发送 ARP 响应分组(单播),且 B 也将 A 的物理地址写入 cache 中。
ARP 解决的是同一个局域网上的映射问题。
4.2.5 IP 数据报的格式
- 版本:4 位,指版本号,实际使用的只有 IPv4 和 IPv6。
- 首部长度:4 位,单位是 32 位字(即 4 字节)
- 区分服务:8 位,一般情况不使用
- 总长度:首部和数据之和的长度,16 位,因此数据报最大长度为 65535 字节。数据链路层中还有最大传送单元 MTU (Maximum Transfer Unit)。
- 标识:16 位,每产生一个数据报,计数器 +1,并赋值给标识。
- 标志:3 位,但目前只有两位有意义
- 低位 MF。 MF = 1 表示后面“还有分片”的数据表, MF = 0 则表示当前已是最后一片。
- 中间为 DF。当前仅当 DF = 0 时允许分片。
- 片偏移:13 位,顾名思义,该片从何处开始。
- 生存时间:8 位,没经过一个路由, TTL 减去 1,减为 0 时,就丢弃数据报。
- 协议:8 位,指出使用的协议
- 首部检验和:16 位,,只检验数据报首部,但不包括数据部分。发送方,检验和置位剩余 16 位字的反码之和。接收方将检验和在内的所有 16 位字相加,若首部未变化,其和必为 0。
- 源地址:32 位
- 目的地址:32 位
4.2.6 IP 层转发分组的流程
路由表信息:
存在特定主机路由,对特定的主机指明一个路由,以便管理人员控制网络和测试网络。
存在默认路由,减小路由表所占的空间和搜索路由表所用的时间。
默认路由(Default Route)是网络中的一种路由设置,用于指定当路由表中没有匹配的路由项时,数据包应该被发送到的下一个跃点或下一跳。默认路由通常用于简化路由表,特别是在大型网络中。
在IPv4网络中,默认路由通常使用0.0.0.0/0表示,这表示所有目标地址。当路由表中没有与目标地址匹配的具体路由项时,数据包将被发送到默认路由指定的下一个跃点。这有助于简化路由表,特别是在较大的网络中,减少路由表的大小和复杂性。
在IPv6网络中,类似的概念是使用::/0来表示所有IPv6地址。当没有与目标IPv6地址匹配的具体路由项时,数据包将被发送到默认路由指定的下一个跃点。
分组转发算法的流程:
- 从数据报首部提取目的主机 IP 地址 D,得出网络地址 N。
- 若 N 就是与此路由连接的某个网络,则 直接交付;否则执行 3。
- 若路由表有目的地址为 D 的特定主机路由,则交给其指明的下一跳;否则 4。
- 若路由表中有到达 N 的路由,则交给其指明的下一跳,否则 5。
- 默认路由,否则 6。
- 报错
4.3 划分子网与构造超网
4.3.1 划分子网
IP 地址设计不合理之处:
- IP 地址空间利用率有时很低,一个网络号所连接的主机可能并不多。
- 每个物理网络分配一个网络号会使得路由表太大而使网络性能变坏。
- 两级 IP 不够灵活,有时需要开辟一个新的网络,此时只能申请一个新的网络号。
划分子网的方法:
从 IP 数据报首部无法看出源主机或目的主机所连接的网络是否进行了子网划分,子网掩码正是用于解决这个问题的。
子网掩码一般由一串连续的 1 和一串连续的 0 构成,且 1 的长度等于网络号与子网号位数之和,因此与 IP 地址进行与操作即可得出子网地址。 如果一个网络不划分子网,则使用默认子网掩码,显然,
A 类地址默认掩码为 255.0.0.0,或 0xFF000000。
B 类地址默认掩码为 255.255.0.0,或 0xFFFF0000。
C 类地址默认掩码为 255.255.255.0,或 0xFFFFFF00。
4.3.2 使用子网时的分组转发算法
路由表包含:目的网络地址、子网掩码和下一跳地址。
- 从收到的数据报提取 IP 地址 D。
- 各网络子网掩码与 D 相与,看看是否匹配,若匹配则直接交付,否则 3。
- 若路由表中有目的地址为 D 的特定主机路由,则交付之,否则 4。
- 对路由表每一行子网掩码与 D 相与,结果为 N,若 N 与该行目的网络的地址匹配,则交付给下一跳,否则 5。
- 默认路由,否则 6。
- 报错。
4.3.3 无分类编址 CIDR (超网)
网络前缀相同的连续 IP 地址组成一个 ”CIDR 地址块”。
CIDR 使用斜线激发,即 IP 地址后加上斜线 “/”,后写上前缀位数。
CIDR 还使用 32 位的地址掩码,其中前一串 1 就代表前缀。
路由表中用 CIDR 地址块来查找目的网络,称为路由聚合或构造超网。
在查找下一跳时,可能有多个 CIDR 地址块都能够与目的地址匹配,此时则根据最长前缀匹配原则确定下一跳。
由于要进行最长前缀匹配,故最方便的方法即是在构造路由表时采用二叉线索,即 01-Trie,然后查询时即可迅速进行前缀匹配。
为了提高效率,还可采用各式压缩技术。
4.4 网际控制报文协议 ICMP
ICMP 报文分为 ICMP 差错报告报文和 ICMP 询问报文。
ICMP 报文前 4 个字节是统一的格式,三个字段:类型、代码和检验和。接着 4 个字节与 ICMP 类型有关。最后面是数据字段,长度取决于 ICMP 类型。
改变路由(重定向): 路由器把改变路由报文发送给主机,让主机知道下次该将数据报发送给另外的路由器(可通过更好的路由)。
不应发送 ICMP 差错报告的情况:
- 对 ICMP 差错报文,不再发送 ICMP 差错报文
- 对第一个分片的数据报片的所有后续数据报片,都不发送 ICMP 报文。
- 对具有多播地址的数据报,都不发送。
- 对具有特殊地址(如 127.0.0.0 或 0.0.0.0)的数据报,不发送 ICMP 报文。
ICMP 的一个重要应用就是分组网间探测 PING (Packet InterNet Groper),是应用层直接使用网络层 ICMP 的一个例子。
另一个重要应用是 traceroute (UNIX) / tracert (windows),用于跟踪一个分组源点到终点的路径。下介绍其原理:
主要采用数据报中的生存时间 TTL,先发送 TTL 为 1,收到时间超过差错报文则 TTL + 1 重新发送,否则收到终点不可达报文,且长度即 TTL。
4.5 互联网的路由选择协议
4.5.1 几个基本概念
4.5.1.1 理想路由算法
理想路由算法几个特点:
- 必须是正确的和完整的。
- 计算上应简单。
- 应能适应通信量和网络拓扑的变化(稳健性)。
- 应具有稳定性,通信量和网络拓扑相对稳定的情况下,应该收敛于一个可接受的解。
- 算法应该是最佳的。
4.5.1.2 分层次的路由选择
互联网采用分层次的路由选择,原因:
- 互联网规模非常大。
- 许多单位不愿外界了解自己内部网络的细节。
为此,把互联网划分为许多小的自治系统 AS (autonomous system)。一个 AS 对其他的 AS 表现出的是一个单一的和一致的路由选择策略。
故此,路由选择协议可以划分为两类:内部网关协议 IGP (Interior Gateway Protocol) 和外部网关协议 EGP (External Gateway Protocol)。常用的 IGP 有 RIP 和 OSPF 协议,常用的 EGP 有 BGP-4。
此外,路由选择协议还可依照路由表更新方分为静态路由协议和动态路由协议,常见的动态路由协议有 RIP、OSPF、BGP 等。
4.5.2 RIP
RIP 是一种基于距离向量的路由选择协议,最大优点是简单。其中的“距离”是指“跳数” (hop count)。但 RIP 一条路径最多只能包含 15 个路由器,因此 RIP 只适用于小型互联网。
4.5.2.1 RIP 特点
RIP 特点:
- 仅和相邻路由器交换信息。
- 路由器交换的信息是当前本路由器的路由表。
- 按照固定的时间间隔交换路由信息,如 30 秒。
路由表信息为:
下介绍路由更新算法:
其实就是 Bellman-Fold 算法,不断遍历,能松弛即松弛。
对于解释 3,书中的解释是无论距离是增大减小亦或不变,都要更新为最新的信息。
4.5.2.2 RIP 报文格式
RIP 报文格式:
首部 4 字节,命令字段指出报文意义。
路由部分由若干路由信息组成,每个路由信息 20 字节。
- 地址标识符 标志所用地址协议。 路由标记填入自治系统号 ASN。
- 网络地址、子网掩码、下一跳路由地址、距离。
一个 RIP 报文最多 25 个路由,故而最大长度 $4+20\times 25=504$ 字节。
RIP 存在的问题:当网络出现故障,需要经过比较长的时间才能将此信息传送到所有的路由器。
RIP 特点总结:实现简单开销小,距离有限,坏消息传播慢。
4.5.3 内部网关协议 OSPF
OSPF 开放最短路径优先 使用了 Dijkstra 提出的最短路径算法 SPF。OSPF 三个要点如下:
- 洪泛法:向本自治系统所有路由器发送信息。
- 发送的信息是与本路由器相邻所有路由器的链路状态。
- 当且仅当链路发生变化,才使用洪泛。
由此,每个路由器都能够得到本网完整的网络拓扑,采用 djikstra 算法即可得出最短路径从而构造路由表。
而且 OSPF 将一个自治系统再划分为若干个小的范围,称为区域 (area)。连接不同区域的路由器叫区域边界路由器。主干区域的路由器称主干路由器。OSPF 不用 UDP 而是直接用 IP 数据报传送。
OSPF 其它特点:
- 允许管理员指派不同代价,代价占 16 位,十分灵活。
- 若一个目的网络有多条相同代价路径,则可以分配通信量,达到负载平衡 (load balancing)。
- 支持可变长子网划分与 CIDR。
- 链路可能经常变变化,每条链路带上一个序号,序号越大链路越新。
OSPF 五种分组类型:
- 类型1 问候 (hello) 分组,用于发现维持邻站可达性。
类型2 数据库描述 (Database Description) 分组,向邻站给出自己库中所有链路状态项目的摘要。
类型3 链路状态请求 (Link State Request) 顾名思义
- 类型4 链路状态更新 (Link State Update) 洪泛
- 类型5 链路状态确认 (Link State Acknowledgement) 对更新分组的确认
4.5.4 外部网关协议 BGP
边界网关协议 BGP。不同自治系统之间使用 BGP 的缘由:
- 互联网规模太大,使得自治系统 AS 之间路由选择非常困难。
- 自治系统 AS 之间的路由选择必须考虑有关策略。
BGP 的目的寻找一条能够到达目的且网络条件比较好的路由而非最佳路由,采用路径向量 (path vector) 路由选择协议。每个自治系统至少选定一 BGP 发言人,往往选定边界路由器。发言人之间采用 BGP 协议。
在 RFC 4271 中规定了 BGP-4 的四种报文:
- OPEN 报文,用来与相邻 BGP 发言人建立关系,使其初始化。
- UPDATE 报文,通告某一路由信息,以及列出要撤销的多路由。
- KEEPALIVE 报文,周期性证实邻站连通信。
- NOTIFICATION 报文,发送检测到的差错。
BGP 报文格式:
标记 (marker) 段 16 字节长,用于鉴别,不需鉴别是置全 1。
长度字段指出包括首部在内整个 BGP 报文字节为单位的长度,最小 19,最大 4096。(查了下,是根据 TCP 协议的滑动窗口决定的 这里)
UPDATE 和 OPEN 报文的格式暂时不赘述。
4.5.5 路由器的构成
路由器结构划分为两大部分:路由选择部分和分组转发部分。
路由选择部分也称为控制部分,核心构建为选择处理机,任务是根据协议构造出路由表,同时不断更新维护路由表。
分组转发部分有三部分组成:交换结构、一组输入端口和一组输出端口。
交换结构 (switching fabric) 又称交换组织,作用是根据转发表处理分组,把输入的分组从魔偶个端口输出出去。
为了使交换功能分散化,往往把复制到转发表放在每个输入端口中,称为“影子副本”。
最早使用的路由器是普通的计算机,采用 CPU 作为路由选择处理机,利用中断机制启动处理。
4.6 IPv6
变化:
- 允许协议继续扩充。
- 灵活的首部格式
- 扩展的地址层次结构
IPv6 数据报有 基本首部和有效载荷两部分组成,有效载荷也成为净载荷。有效载荷允许零个或多个扩展首部。
- 通信量类: 8 位,区分不同 IPv6 数据报类别或优先级。
- 流标号 (traffic class):20 位。
- 有效载荷长度:除基本首部外的字节数。
扩展首部在传输中不进行处理,交给两端计算机处理,大大提高路由器处理效率。
IPv6 增加了任播 (anycast) 地址,终点是一组计算机,但数据报只交付其中一个,通常是最接近一个。
IPv6 采用冒号十六进制记法,如
- 允许省略前导 0。
- 可以将一串连续的 0 用一对冒号取代。
- 仅允许一次零压缩。
- 仍可采用 CDR 斜线表示法。
地址分类:
4.6.3 IPv4 向 IPv6 过渡
策略一:双协议栈。装有双协议栈的主机或路由器既能与 IPv4 主机通信,又能与 IPv6 主机通信。根据域名系统 DNS 返回的地址类型确定主机使用的地址类型。
策略二:隧道技术。IPv6 数据报进入 IPv4 网络时,把 IPv6 数据报封装成 IPv4 数据报。要使得双协议栈主机知道 IPv4 数据报内封装的时 IPv6 数据报,则需要将 IPv4 首部的协议字段值设置为 41。
4.6.4 ICMPv6
IPv6 也不保证数据可靠交付,因此采用 ICMP 来反馈差错。
4.7 IP 多播
与单播相比,一对多的网络通信中,多播可大大节约网络资源。
多播组的标识符是 IP 地址中的 D 类地址,范围是 224.0.0.0 到 239.255.255.255。多播地址只能用于目的地址而不能用于源地址。一个 D 类地址表示一个多播组。
4.7.3 网际组管理协 IGMP 和 多播路由选择协议
IGMP (Internet Group Management Protocol) 网际组管理协议:是让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出了某个多播组。
多播路由选择协议:多播转发必须动态适应多播组成员的变化,在转发数据报时,不能仅仅根据数据报中的目的地址,而是考虑从什么地方来到什么地方去。
IGMP 属于整个网际协议 IP 的一个组成部分。
多播路由选择协议:洪泛与剪除、隧道技术、基于核心的发现技术。
4.8 虚拟专用网 VPN 和网络地址转换 NAT
4.8.1 VPN
RFC 1918 指明了一些专用地址,只用于机构内部通信,互联网中所有路由器对目的地址为专用地址的数据报一律不予转发。
VPN 的作用是对内部数据报进行加密,然后在公网上传输,使得效果跟内网通信一样。
4.8.2 NAT
已经分配到本地 IP 地址,又想进行全球通信,则可使用 NAT。NAT 将每台计算机映射到 NAT 路由器的一个端口(每个端口具有一个全球 IP 地址),由此便可进行互联网通讯,此时目的主机只能知道 NAT 路由器端口的地址而不知发送端的地址。
4.9 MLPS
MLPS 作为一种 IP 增强技术,广泛应用在互联网中。特点如下:
- 支持面向连接的服务质量。
- 支持流量工程,平衡网络负载。
- 有效地支持 VPN。
4.9.1 工作原理
在 MPLS 域入口处打上固定长的 MPLS 标记,然后对打上标记的 IP 数据报用硬件转发,只经过第二层,称为标记交换。
MPLS 域是指该域中有许多彼此相邻路由器,且均为支持 MPLS 技术的标记路由器 LSR。一个标记仅在两个 LSR 间才有意义。
如入接口 0 收到一个标记为 3 的 IP 数据报,路由器就知道应从出接口 1 转发且打上标记 1。
4.9.2 转发等价类 FEC
IP 数据报的集合,对路由器来说具有相同的性质,如下一跳,相同服务类别,同样丢弃优先级等。
例子:
- 目的 IP 与某一特定 IP 地址前缀匹配的 IP 数据报
- 所有源地址与目的地址相同的数据报
- 具有某种服务质量需求的数据报
4.9.3 MPLS 首部的格式