网络层

互联网的先驱者提出一种崭新的网络设计思路,不同于电信网提供端到端的可靠传输服务,网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责可靠交付(包括差错处理、流量控制等) 。采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。

网际协议IP

  • 网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。
  • 与 IP 协议配套使用的还有三个协议:
    • 地址解析协议 ARP(Address Resolution Protocol)
    • 网际控制报文协议 ICMP(Internet Control Message Protocol)
    • 网际组管理协议 IGMP(Internet Group Management Protocol)

虚拟互连网络

  • 将网络互相连接起来要使用一些中间设备。
    • 物理层中间设备:转发器 (repeater)。
    • 数据链路层中间设备:网桥 或 桥接器 (bridge)。
    • 网络层中间设备:路由器(router)。
    • 网络层以上中间设备:网关(gateway)。
  • 当中间设备是转发器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。
  • 网络互连都是指用路由器进行网络互连和路由选择。
  • 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,而看不见互连的各具体的网络异构细节。
  • 如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)。

分类的IP地址

  • IP 地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。
  • IP地址的编制方法:
    • 分类的 IP 地址。
    • 子网的划分。
    • 构成超网。
  • 分类的IP地址每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
  • A类地址:网络号8位,1个字节,首位固定为0,只有7位可使用。主机号24位,3个字节。
    • 可指派的网络号是126(即$2^7-2$​​​)。减2原因是:网络号字段全0的IP地址是个保留地址,表示“本网络”。网络号为127(即01111111)保留作为本地软件环回测试本主机进程之间的通信之用。目的地址为环回地址的IP数据报永远不会出现在任何网络上,因为网络号127的地址根本不是一个网络地址。
    • 每个A类网络可分配的最大主机数是$2^{24}-2$​,减2是因为全0的主机号字段表示IP地址是“本主机”所在的网络地址,比如5.6.7.8所在的网络地址为5.0.0.0,而全1表示该网络上的所有主机,比如5.255.255.255表示在网络5.0.0.0上的所有主机。
    • IP地址空间共$2^{32}$个地址,整个A类地址空间共有$2^{31}$个地址,占整个IP地址空间的一半。
  • B类地址:网络号16位,2个字节,前两位固定为10,只有14位可用。主机号16位,2个字节。
    • 由于前两位为10,所以网络号后14位不可能使网络号全0或全1,不存在减2,。但是实际上B类网络地址128.0.0.0是不指派的,可指派的最小网络地址是128.1.0.0。因此可指派的网络数为$2^{14}-1$,即16383。
    • 每个B类网络可分配的最大主机数是$2^{16}-2$​,即65534,减2是去掉全0和全1的主机号。
    • 整个B类地址空间有$2^{30}$个地址,占整个IP地址空间的25%。
  • C类地址:网络号24位,3个字节,前三位固定为110,只有21位可用。主机号8位,1个字节。
    • C类网络地址192.0.0.0也是不指派的,可指派的最小网络地址为192.0.1.0。因此C类地址网络数为$2^{21}-1$,即2097151。
    • 每个C类网络可分配的最大主机数是$2^8-2$,即254。
    • 整个C类地址空间有$2^{29}$个地址,占整个IP地址空间的12.5%。

重要特点

  • IP 地址是一种分等级的地址结构。分两个等级的好处是:
    • IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
    • 路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
  • 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口
    • 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机 (multihomed host)。
    • 由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的 IP 地址
  • 用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号 net-id
  • 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。

IP地址和硬件地址

  • 硬件地址已固化在网卡的ROM上,因此常可以称为物理地址。而局域网的MAC帧中源地址和目的地址都是物理地址,又可称为MAC地址。这三种叫法可作为同义词。
  • 从层次的角度看,硬件地址是数据链路层和物理层使用的地址。IP 地址是网络层和以上各层使用的地址,是一种逻辑地址(称 IP 地址是逻辑地址是因为 IP 地址是用软件实现的)。
  • IP数据报放入数据链路层的MAC帧后,整个IP数据报就成为MAC帧的数据,因而在数据链路层看不见数据报的IP地址
  • 在IP 层抽象的互联网上只能看到IP数据报。虽然IP数据报可能会经过路由器的转发,但在它的首部中的源地址和目的地址始终不变,经过的路由器的IP地址不会出现在IP数据报中
  • 路由器只根据目的站的IP地址的网络号进行网络选择。
  • 在局域网的链路层,只能看见MAC帧。链路层收到MAC帧要丢弃原来的首部和尾部,在转发时要重新加上首部和尾部,这时首部中的源地址和目的地址就发生了改变。这种变化在上面的IP层是看不见的。
  • IP 层抽象的互联网屏蔽了下层很复杂的细节。在抽象的网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或主机和路由器之间的通信 。

还有两个重要问题有待解决:

  1. 主机和路由器怎样知道应当在MAC帧的首部填入什么样的硬件地址?
  2. 路由器中的路由表是怎样得出的?

地址解析协议ARP

地址解析协议 ARP 是用来解决已经知道了一个机器(主机或路由器)的IP地址,如何找出其相应的硬件地址这样的问题的。

每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如果有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。如果没有,主机A就自动运行ARP,按以下步骤找到B的硬件地址。

  • ARP 进程在本局域网上广播发送一个 ARP 请求分组。请求分组中包含发送方硬件地址 、发送方 IP 地址 、 目标方硬件地址(未知时填 0) 、 目标方 IP 地址。
  • 主机B的IP地址与请求分组中的IP地址一样,就收下这个ARP请求分组,并向A发送响应分组,包括主机B的IP地址和硬件地址。ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发到一个目的地址
  • 可能不久后B也会向A发送数据报,所以B在收到A的请求分组中,会把A的IP地址到硬件地址的映射写入自己的ARP高速缓存中。
  • 主机A收到主机B的响应分组后,就在ARP高速缓存中写入B的IP地址到硬件地址的映射。

ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间,超过生存时间的映射就从高速缓存中删掉。因为若主机B更换网络适配器,那么B的硬件地址就改变了,主机A再通过原先的映射无法找到主机B。过了生产时间后,A重新进行广播发送ARP请求分组,就可以再找到B。

需要注意的是,ARP是解决同一个局域网上的主机或路由器的IP地址到硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。路由器包括物理层、链路层、网络层,也可使用ARP协议。

使用ARP四种典型情况:

  1. 发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
  2. 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
  3. 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
  4. 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器来完成。

那为什么不直接使用硬件地址进行通信?

全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。IP 编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个唯一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为上述的调用 ARP 的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。

IP数据报的格式

IP数据报的格式能够说明IP协议具有什么功能。在TCP/IP的标准中,各种数据格式常以32位(即4字节)为单位来描述。

一个 IP 数据报由首部和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

  • 版本:占 4 位,指 IP 协议的版本。目前的 IP 协议版本号为 4 (即 IPv4)。
  • 首部长度:占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节。
  • 总长度:占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU。
  • 标志(flag) :占 3 位,目前只有前两位有意义。标志字段的最低位是 MF 。MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。标志字段中间的一位是 DF 。只有当 DF = 0 时才允许分片。
  • 片偏移:占13 位,指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
  • 生存时间:占8 位,记为 TTL (Time To Live),指示数据报在网络中可通过的路由器数的最大值。
  • 协议:占8 位,指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给哪个处理过程。
  • 首部检验和:占16 位,只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
  • 源地址和目的地址各占4字节。

IP层转发分组流程

在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)

IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”,当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。

路由分组转发算法

  1. 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
  2. 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行3。
  3. 若路由表中有目的地址为 D特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行4。
  4. 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行5。
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行6。
  6. 报告转发分组出错。

关于路由表,没有给分组指明到某个网络的完整路径,路由表指出,到某个网络应当先到某个路由器(即下一跳路由器)。在到达下一跳路由器后,再继续查找其路由表,知道再下一步应当到哪一个路由器。这样一步一步地查找下去,直到最后到达目的网络。

划分子网和构造超网

划分子网

三级IP地址

分类的IP地址空间利用率很低,一个A类网络或B类网络可分配很多主机,但实际上连接主机可能并不多。划分子网是从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。划分的子网在整体上对外部仍表现为一个网络。

子网掩码

从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。那么路由器该如何将数据报转发到特定的子网?

子网掩码的长度也是32位,IP地址中网络号和子网号均为1,主机号为0就是这个子网的子网掩码。路由器将收到的数据报的目的IP地址和三级IP地址的子网掩码逐位相与,就得到了所要找的子网。

在划分子网的情况下,路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。分组转发最后需要找到目的IP地址所在的子网。

无分类编制CIDR

划分子网在一定程度上缓解了互联网在发展中遇到的困难,但是IPv4地址空间还是消耗太快,路由表的项目数也急剧增长。所以又提出了现在所使用的无分类的IP地址

  • CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
  • CIDR 使用“斜线记法”,即在 IP 地址面加上一个斜线,然后写上网络前缀所占的位数,比如220.78.168.0/24
  • CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。只要知道这个地址块中的任一个地址,就可以知道这个地址块的起始地址、最大地址以及地址数。
    • 比如已知IP地址$128.14.34.7/20$,二进制$10000000$ $00001110$ $00100011$ $00000111$,其中前20位是网络前缀,后面12位是主机号,那这个地址块的最小地址就是主机号全为0,最大地址是主机号全为1。这个地址块共$2^{12}$个地址。
  • “CIDR不使用子网”是指CIDR并没有在32位地址中指明若干位作为子网字段,但分配到一个CIDR地址块的单位,仍然可以在本单位内根据需要划分一些子网。

最长前缀匹配

  • 使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
  • 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配。网络前缀越长,其地址块就越小,因而路由就越具体。

网际控制报文协议ICMP

  • ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。
  • ICMP 差错报告报文:检测在传送数据的过程中,发生的错误,如果发生了错误,会通过该协议返回给源主机一个带有错误原因的数据包
    • n终点不可达
    • 时间超过
    • 参数问题
    • 改变路由(重定向)(Redirect)
  • ICMP询问报文。
    • 回送请求和回答报文:主机向特定目标发出询问,收到此报文必须返回一个ICMP回送回答报文。用于测试目的站是否可达。
    • 时间戳请求和回答报文:请某个路由器或主机回答当前的日期和时间,用于进行时钟的同步和测量时间。
  • ICMP应用举例:Ping(Packet Internet Groper)
    • PING 用来测试两个主机之间的连通性。
    • PING 使用了 ICMP 回送请求与回送回答报文。
    • PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。

路由选择协议

内部网关协议RIP

内部网关协议OSPF

外部网关协议BGP

Author

叶润繁

Posted on

2022-01-16

Licensed under