Home 网络层 Network Layer
Post
Cancel

网络层 Network Layer

网络层提供的两种服务


网络层应该向运输层提供这样的服务,曾引起了长期的争论

争论焦点的实质是:数据的可靠传输应该由网络还是端系统来负责?

面向连接

面向连接的服务,即虚电路 (virtual circuit)。虚电路只是一种逻辑连接,分组沿着这条逻辑连接按照存储转发方式传送,而非真正建立一条物理连接。在两台计算机进行通信时,先由网络建立连接,之后的数据均通过该连接进行,由网络保证数据传输的可靠性。其支持方以电信公司为代表。

无连接

无连接的服务,即数据报 (datagram)。网络在发送数据时,不需要先建立连接,每个分组在网络中独立传送,与其前后的分组无关网络层不保证服务质量,分组可能出错、丢失、重复和失序,也不保证分组传送的时限。其支持方以 Internet 为代表,TCP/IP 就是采用数据报服务。

网际协议 IP


网际协议 IP 是 TCP/IP 体系中两个最重要的协议之一。与 IP 协议配套使用的还有四个协议:

  • 地址解析协议 (Address Resolution Protocol, ARP)
  • 逆地址解析协议 (Reverse Address Resolution Protocol, RARP),已淘汰不使用了
  • 网际控制报文协议 (Internet Control Message Protocol, ICMP)
  • 网际组管理协议 (Internet Group Management Protocol, IGMP)

分类的 IP 地址

IP 地址是给连接到互联网上的每一台主机的每一个接口,分配一个在全世界范围内是唯一的 32 位标识符。IP 地址现在由互联网名字和数字分配机构 (Internet Corporation for Assigned Names and Numbers, ICANN) 进行分配。

IP 地址被分为 A, B, C, D, E 五类,每一类地址都包含网络号以及主机号两个字段。其表示方法为点分十进制记法 (dotted decimal notation)。

曾经 B 类地址中的网络地址 128.0.0.0 和 C 类地址中的网络地址 192.0.0.0 都是规定不指派的,但现在都可以指派了。其中还有一些有特殊含义的 IP 地址,像是全 0 表示本网络或本主机的 IP 地址、全 1 表示广播地址的 IP 地址以及网路号为 127 用于本地软件环回测试的 IP 地址

IP 地址与硬件地址

物理地址

数据链路层和物理层使用的地址,被存放在数据链路层的帧中

IP 地址

网络层和以上各层使用的地址,是一种逻辑地址,被存放在 IP 包头部

ARP 与 RARP 协议

ARP协议 (Address Resolution Protocol)

全称为 RFC 826: An Ethernet Address Resolution Protocol。

每一台主机都设有一个 ARP 高速缓存 (ARP cache),里面有本局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。ARP 解决同一局域网中的主机或路由器的 IP 地址和硬件地址的映射问题。如果目的主机不在本局域网内,IP 包就需要经由路由器转发。此时在局域网内要完成的是路由器 IP 与物理地址的映射。

RARP协议 (Reversed Address Resolution Protocol)

旧协议,作用是使只知道自己硬件地址的主机能够通过 RARP 协议找出其 IP 地址。现在的 DHCP 协议已经包含了 RARP 协议的功能。

IP 数据报格式

版本 Version

4bit,IP 协议的版本,目前的 IP 协议版本号为 4,即 IPv4。

首部长度 IHL

4bit,IP 包头长度,最小 5,最大 15,单位为 word (32bit)。

区分服务 Type of Service

1字节,服务类型,目前很多路由器忽略该字段

总长度 Total Length

2字节,IP包总长度,包含头部和数据,单位为字节。

标识 Identification

2字节,是一个计数器,用以产生 IP 包的标识。当一个 IP 包超过数据链路层 MTU 时,就需要分片传输。分片的多个包具有相同的标识,便于接收端重组

标志 Flag

3bit,目前只使用两个Flag,分别是:

  • 1bit, Don’t Fragment, DF。当 DF = 0 时允许分片。
  • 1bit, More Fragment, MF。当 MF = 1 时表示后面还有分片,而 MF = 0 则表示最后一片。

片偏移 Fragment Offset

13bit,片偏移,较长的包在分片后,某片在原分组中的相对位置,以 8 字节为单位。

生存时间 Time To Live

1字节,生存时间,IP 包在网络中可通过的路由器个数的最大值。IP 包每经过一个路由器则 TTL 减 1,TTL 为 0 时就丢弃,并向源主机发送一个告警包。Windows 操作系统一般为 128,UNIX 操作系统一般为 255,Linux 一般为 64。

协议 Protocol

8bit,协议字段,指出此数据报携带的数据是使用什么协议,以便使目的主机的 IP 层知道应该将数据部分上交给哪个协议进行处理。

首部校验和 Header checksum

2字节,只检验数据报的首部,不包括数据部分。

源地址 Source address

4字节,源 IP 地址。

目标地址 Destination address

4字节,目的 IP 地址。

校验和算法

对 IP 包头,每 16 位求反,循环相加,和再求反。若结果为 0 则保留。否则丢弃该数据报。

划分子网和构造超网


由于 ARPANET 早期,IP 地址的设计不够合理

  1. 分类 IP 地址无法适应 Internet 快速发展的需要,每个 A 类地址的主机数超过 1000 万,B 类地址也超过 6 万。有的单位申请了一个 B 类地址网络,连接的主机数却不多,导致 IP 地址空间的利用率有时很低,造成 IP 地址的浪费,还会使得 IP 地址空间的资源过早被用完。
  2. 每一个物理网络分配一个网络号会使路由表变得太大,因而使网络性能变坏。
  3. 两级 IP 地址不够灵活。有些情况下,一个单位需要在新的地点马上开通一个新的网络。但在申请到一个新的 IP 地址之前,新增加的网络是不可能连接到互联网上工作的。而我们希望的是,一个单位能随时灵活的增加本单位的网络,不必事先到互联网管理机构去申请新的网络号。这是两级 IP 地址无法做到的。

为了解决上述问题,就在 IP 地址中增加了一个子网号字段,使两级 IP 地址变为三级 IP 地址,就能较好地解决上述问题,使用起来也更灵活。而这就是划分子网

划分子网

基本思想

一个拥有多个物理网络的单位可按照物理网络划分为若干个子网 (subnet)。划分子网的方法是从网络的主机号借用若干位作为子网号 (subnet-id)。因此两级 IP 地址在本单位内部就变为了三级 IP 地址。

  • 原来的 IP 地址 ::= 网络号,主机号
  • 变为了 IP 地址 ::= 网络号,子网号,主机号

其他网络发来的 IP 数据报,仍然根据 IP 数据报的目的网络号 net-id,找到本网络的路由器。此路由器收到 IP 数据报后,再按照目的网络号 net-id 和子网号 subnet-id 找到目的子网。

子网掩码

从 IP 数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网的划分,这是因为 32 位的 IP 地址本身以及数据报的首部都没有包含任何有关子网划分的信息。因此就有了子网掩码。

子网掩码是一个网络或一个子网的重要属性,在路由寻址中发挥着重要作用。

使用子网掩码的好处是,不管网络有没有划分子网,只要把子网掩码和目的 IP 地址进行逐位的与运算,就能立即得出子网网络地址

使用子网掩码的分组转发过程

使用子网划分后,路由表必须包含以下三项基本信息目的网络地址、子网掩码和下一跳地址

在划分子网的情况下,路由器的转发流程如下:

  1. 从收到的分组的首部提取目的 IP 地址 D。
  2. 先用与该路由器直接相连各网络的子网掩码与 D 逐位相与,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就间接交付,执行 3。
  3. 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器。否则执行 4。
  4. 对路由表中的每一行的子网掩码与 D 逐位相与,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器。否则执行 5。
  5. 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器。否则执行 6。
  6. 报告中转发分组出错。

核心操作是将目的 IP 地址与路由表中子网掩码相与,并判断是否与目的网络地址匹配。

主机发送数据报时判断目的地址是否在本地子网的方法

1
2
3
4
5
if ((目的地址 & subnet mask) == (主机地址 & subnet mask))
  目的地址在本地子网,直接交付
else
  数据报发往gateway
end if

路由器查找路由表进行表项匹配的过程

1
2
3
if ((目的地址 & subnet mask) == 目的网络地址)
  数据包发往该表项的网络出口
end if

在子网内直接交付过程

1
2
3
4
5
6
7
查找 ARP 缓存,是否有目的 IP 地址对应的 MAC 地址

if (目的 MAC 地址在 ARP 缓存中)
  将 IP 数据包封装成帧后,在局域网内向目的 MAC 地址直接发送帧
else
  在子网内广播发送 ARP 请求,目的主机收到请求后返回 ARP 应答,由此得知目的主机 MAC 地址
end if

无分类编制 CIDR

全称为 Classless Inter-Domain Routing。

主要特点有:

  • 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念
  • 使用各种长度的网络前缀,来代替分类地址中过的网络号和子网号。
  • IP 地址从三级编址回到了两级编址,IP 地址 ::= 网络前缀,主机号
  • 使用斜线记法 (slash notation),又称 CIDR 记法,即在 IP 地址后加一个斜线,后跟网络前缀所占的位数,如 128.14.35.7/20 表示该地址的高 20 位是网络前缀
  • 网络前缀都相同的连续的 IP 地址组成 CIDR 地址块,如 128.14.32.0/20 表示的 CIDR 地址块就有 2122^{12} 个地址,从 128.14.32.0 至 128.14.47.255。

路由聚合 (route aggregation)

由于一个 CIDR 地址块中有很多地址,所以在路由表中就利用 CIDR 地址块来查找目的网络。这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示原来传统分类地址的很多个路由,可以减少路由表中的表项个数,并减少路由器之间交换的路由信息量。路由聚合也称为构成超网 (supernetting),这是因为 CIDR地址块大多包含多个 C 类地址

地址掩码

CIDR 不使用子网,但仍使用地址掩码这个名词。如 /20 的地址掩码为:

11111111 11111111 11110000 00000000。

最长前缀匹配

最长前缀匹配又称为最长匹配或最佳匹配

对于查找路由表时的匹配结果应该从中选择具有最长前缀匹配的路由。这是因为网络前缀越长,其地址块就越小,因而路由就越具体

国际控制报文协议 ICMP


全称为 RFC 792 : Internet Control Message Protocol,主要用于报告出错和测试等控制信息

ICMP 位于 IP 层,ICMP 报文是装在 IP 数据报中作为其中的数据部分传输的

ICMP 报文的种类

ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文

差错报告报文有

终点不可达 Destination unreachable

路由器或主机无法传输报文时,向源主机发送此报文。

源点抑制 Source quench

路由器或主机由于拥塞丢弃报文时,向源主机发送此报文,使其放慢发送速度。

超时 Time exceeded

路由器收到 TTL 字段为 0 的报文时,向源主机发送此报文。

参数问题 Parameter problem

路由器或主机收到的报文中,头部有非法字段时,丢弃数据报,并向源主机发送此报文。

改变路由 Redirect

路由器向主机发送此报文,告知路由改变,主机下次发送数据报给另外的路由器。

询问报文有

回送请求或回答 Echo request/reply

用于测试网络连通性

时间戳请求或回答 Timestamp request/reply

用于时间同步

ICMP 的应用举例

分组网间探测 Ping

全称为 Packet Internet Groper,其采用 ICMP Echo request/reply 报文,用以测试两台主机之间的连通性。Ping 是应用层直接使用网络层 ICMP 的一个例子,没有通过运输层的 TCP 或 UDP。

Traceroute / Tracert

采用 ICMP 超时报告报文,用以测试到另一台主机所经过的路由信息。其方法是逐个发出 UDP 报文,其 IP 包头中的 TTL 字段分别设为 1, 2, 3, …,直到到达目的主机。报文路由路径上的路由器会返回 ICMP 超时报文,从该报文即可得知路由器 IP 地址。

路由算法及协议


在网络中,路由器依据路由信息(路由表)转发分组,路由信息是路由协议生成的,路由算法是路由协议的基础和核心。

理想的路由算法应该具备的特性有:

  1. 必须是正确和完整的,即按照得出的路由能够进行正确寻址。
  2. 在计算上应该简单,不增加过多开销。
  3. 有自适应性,即能根据通信量和网络拓扑的变化调整路由。
  4. 应该具有稳定性,即通信量和拓扑稳定时,能快速收敛。
  5. 应该是公平的,即对所有用户都公平。
  6. 应该是最佳的,即能找出最好的路由,指的是时延最小、吞吐量最大的路由。

但不同情况下的路由需求可能各有侧重,且网络环境不断变化,因此不存在一种绝对的最佳路由算法

静态路由与动态路由

静态路由

静态路由的选择策略为非自适应路由选择。此选择策略简单和开销较小,但不能及时适应网络状态的变化。因此适用于小规模且变化较少的网络,由人工设置路由。

动态路由

动态路由的选择策略为自适应路由选择。此选择策略能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。因此适用于较大规模、频繁变化的网络,通过专门的算法和协议进行路由的计算。

两类典型的动态路由算法为距离向量 (distance vector) 路由算法以及链路状态 (link state) 路由算法。

距离向量路由 (distance vector routing)

也称为 Bellman-Ford 路由算法和 Ford-Fulkerson 算法。最初用于 ARPANET,被 RIP 协议采用。

基本思想是,每个路由器维护一张表,表中给出了到每个目的地的已知最佳距离和线路,并通过与相邻路由器交换距离信息来更新表。路由器会周期性地向所有相邻路由器发送它的距离表,同时也接受每个邻居结点发来的距离表。

相邻路由器 XX 发来的表中,XX 到路由器 ii 的距离为 XiX_i,本路由器到 XX 的距离为 mm,则路由器经过 XXii 的距离为 Xi+mX_i + m。根据不同邻居发来的信息,计算 Xi+mX_i + m,并取最小值,更新本路由器的路由表。

算法的缺陷是无穷计算问题,即对好消息反应迅速,对坏消息反应迟钝

链路状态路由 (link state routing)

每个路由器都需要完成 5 步工作

  1. 发现它的邻居结点,并学习其网络地址。
  2. 测量到各邻居结点的延迟或开销。
  3. 构造一个分组,其中包含所有它刚刚知道的信息。
  4. 将这个分组发送给其他所有路由器。
  5. 计算出到每一个其他路由器的最短路径。

路由器之间动态交换链路状态信息,每个路由器都建立一个链路状态数据库

链路状态,指本路由器都和哪些路由器相邻,以及该链路的度量 (metric)

链路状态数据库实际上是全网的拓扑结构图,在全网范围内是一致的,即链路状态数据库的同步

各路由器根据网络拓扑,使用 Dijkstra 算法计算从本路由器到其他结点的最佳路径,构成路由表。

Internet 采用分层次的路由

Internet 规模庞大,任何一台路由器都不可能获取和存储整个 Internet 的路由信息。同时,接入 Internet 的众多网络(管理方)也不希望外界了解自己网络的内部信息。

因此就有了自治系统 (Autonomous System, AS) 的概念。

自治系统 (Autonomous System, AS)

自治系统是指在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由。同时还使用一种 AS 之间的路由选择协议,用以确定分组在 AS 之间的路由。一个 AS 可使用多种内部路由选择协议和度量,但对其他 AS 表现出的是单一和一只的路由选择策略。

在自治系统的背景下,Internet 路由协议可分为两类,即:

内部网关协议 (Interior Gateway Protocol, IGP)

内部网关协议,是自治系统内部使用的路由选择协议

自治系统内部的路由选择又称为域内路由选择 (intradomain routing)

这类路由协议使用得最多,如 RIP 和 OSPF 协议。

外部网关协议 (External Gateway Protocol, EGP)

源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议路由选择信息传递到另一个自治系统中,这样的协议就称为外部网关协议。

自治系统之间的路由选择又称为域间路由选择 (interdomain routing)

应用最为广泛的外部网关协议为 BGP-4。

Routing Information Protocol, RIP 协议

其对应 RFC1058: Routing Information Protocol,属于距离向量路由协议

其特点是,简单,适用于小规模网络中的路由。RIP 中的距离定义是路由器条数 (hop count)

其最长距离为 15,即允许的最长路径中最多包含 15 个路由器,距离为 16 则表示不可达

RIP 协议的三个要点是:

  1. 仅和相邻路由器交换信息
  2. 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
  3. 按固定的时间间隔交换路由信息,典型值为 30 秒。

其优点有:

  • 实现简单,开销较小,便于计算。

其缺点有:

  • 网络出现故障时,要经过比较长的时间才能将此信息传送到所有路由器
  • 支持的网络规模有限,最大距离为 15,距离为 16 则不可达。
  • 路由器之间交换的路由信息是路由器中的完整路由表,随着网络规模的扩大,开销也会随之增加

RIP 报文格式

Open Shortest Path First 协议

其对应 RFC2328: OSPF Version 2,属于链路状态路由协议

OSPF 不用 UDP,而是直接用 IP 数据报传送。

其优点有:

  • 收敛速度快,即当链路状态发生变化时,结点会以洪泛 (flooding) 方式告知所有网络中的其他结点。

洪泛 (flooding) 是指结点收到分组时,向除输入链路外的所有其他链路发送出去。

  • 适用于较大规模的网络,因为它仅在链路状态发生变化时才发送洪泛信息,就不会产生很大的通信量。

为了管理大规模的网络,OSPF 将一个自治系统再划分为若干个区域。每个区域都有一个以点分十进制表示的 32 位区域标识符。OSPF 采用层次结构的区域划分,上层的区域称为主干区域 (backbone area),主干区域的作用是用来连通其他在下层的区域。其标识符规定为 0.0.0.0

划分区域的好处是,利用洪泛法交换链路状态信息的范围局限在一个区域,而不是整个自治系统。这可以减少整个网络上的通信量

外部网关路由协议 BGP

BGP 全称为 Border Gateway Protocol,是不同自治系统的路由器之间交换路由信息的协议

—————— 还有

路由器 Router

—————— 还有

网络的控制平面与数据平面

控制平面 (control plane)

—————— 还有

数据平面 (data plane)

—————— 还有

软件定义网络 (Software Defined Networking, SDN)

—————— 还有

IP 组播


组播 (multicast),又称多播,用于实现一点对多点的数据传输。

对于一些网络应用,采用组播可以大大减少网络流量,如网络视频服务。

组播数据报的目的地址写入的是组播组的标识符,然后设法让加入到这个组播组的主机的 IP 地址与组播组的标识符关联起来。组播组的标识符使用 D 类 IP 地址作为组播地址,D 类 IP 地址的前四位是 1110,因此 D 类地址范围是 224.0.0.0 到 239.255.255.255,并且 IP 包头中的协议字段值为 2,表示使用网际组管理协议 IGMP协议。

组播可分为两种,一种是只在本局域网上进行硬件组播,另一种则是在互联网的范围进行组播。

在局域网中的硬件组播

这类组播是将 MAC 地址中的特定地址段作为组播地址,并与 IP 组播地址形成对应关系

在互联网范围的组播

这类组播,路由器需要支持组播,即组播路由器。主机通过 IGMP 协议与组播路由器通信,加入或退出某个组播组。而组播路由器之间则通过组播路由协议实现组播数据报的传输。

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


网络地址转换 NAT

RFC 1918 定义了一些专用地址 (private address)

  • 10.0.0.0 ~ 10.255.255.255 (CIDR 记法为 10/8)
  • 172.16.0.0 ~ 172.31.255.255 (CIDR 记法为 172.16/12)
  • 192.168.0.0 ~ 192.168.255.255 (CIDR 记法为 192.168/16)

这些地址只能用于一个机构的内部通信,而不能用于和互联网上的主机通信。互联网中的所有路由器,对目的地址为专用地址的数据报一律不进行转发

企业与机构内部网络使用专用地址的优点是可减少 IP 地址空间的占用,同时还可提高安全性

NAT 的基本工作原理是,当私有网的主机和公共网的主机通信的 IP 包经过 NAT 网关时,NAT 路由器会将 IP 包中的源 IP 或目的 IP 在私有 IP 和 NAT 的公共 IP 之间进行转换。NAT 路由器内部使用 TCP/UDP 端口号实现外网数据包向内网地址的转换。

虚拟专用网 VPN

有时一个很大的企业或机构的许多部门分布的范围很广,这些部门通常要互相交换信息,有两种实现方式:

  • 租用专用线路,形成专用网。这种方法简单方便,但成本高昂。
  • 利用公用的互联网作为本机构各专用网之间的通信载体,形成VPN。

VPN 涉及的技术包括隧道 (tunnel)、加密、身份认证等。

基于互联网建立 VPN 的两种情形有:

  • 内部网络通过互联网互连,这可以采用 IPSec 的 ESP 隧道模式。
  • 远程用户访问内部网 (remote access VPN),其访问方式有拨号虚拟专用网 (Virtual Private Dialup Network, VPDN) 和基于 SSL 的 VPN 技术,后者的优点是客户端不需要额外安装或配置软件。

通过公共网络传输的数据内容均经过加密外部仅能通过 IP 分组头得知 R1 和 R2 在通信。

This post is licensed under CC BY 4.0 by the author.

数据链路层 Data Link Layer

传输层 Transport Layer