跳转至

网络层

约 1965 个字 3 张图片 预计阅读时间 10 分钟

网络层的主要任务是将Packet从源地址经过多个网络传输到目的地址.该任务可以拆分为分组转发和路由选择两个子任务.

路由表存储了目的ip地址与子网掩码,下一跳路由器地址,出接口等信息,路由选择算法根据路由表选择最佳路径将数据包发送到目的地址.

OSI模型主张在网络层建立面向连接的虚电路,依靠网络来确保可靠传输.而TCP/IP模型则主张在网络层建立无连接的分组交换网络,由用户主机来保证通信的可靠.

异构网络互联

网际协议(Internet Protocol,IP)是实现异构网络互联的基础协议.它定义了IP地址的格式,数据报的格式,以及路由选择等内容.IP协议是无连接的,每个数据报独立传输,不保证可靠性

异构网络互联的基本思想是将不同类型的网络通过路由器连接起来,形成一个统一的网络体系结构.路由器负责在不同网络之间转发数据报,并根据路由选择算法选择最佳路径.当IP网上的主机通信时,它们会感觉自己直接连接在一起,而不需要关心底层网络的差异.

IPV4地址

IPV4地址是每一个联网设备的唯一标识,由32位二进制数组成,通常表示为四个十进制数(0-255)用点分隔开.

IPV4地址分为网络地址和主机地址两部分,网络地址用于标识一个网络,主机地址用于标识网络中的一台主机.子网掩码用于区分网络地址和主机地址,通过与运算可以得到网络地址.

分类编址方法

IPV4地址根据网络规模分为A,B,C,D,E五类:

  • A类地址: 网络号占8位,主机号占24位,适用于大型网络.范围: 1.0.0.0 - 126.255.255.254

  • B类地址: 网络号占16位,主机号占16位,适用于中型网络.范围: 128.0.0.0 - 191.255.255.254

  • C类地址: 网络号占24位,主机号占8位,适用于小型网络.范围: 192.0.0.0 - 223.255.255.254

  • D类地址: 用于多播通信.范围: 224.0.0.0 - 239.255.255.255

  • E类地址: 保留地址,用于实验和研究.范围: 240.0.0.0 - 255.255.255.255

注意:

  • 主机号全0表示网络地址,主机号全1表示广播地址,不能分配给主机使用.

特殊的IPV4地址

划分子网编址

分类编址的IPV4地址容易造成浪费,例如,一个子网中有100000台设备,此时采用A类地址,还剩下许多地址可以使用,但是别的子网就不不能用了.

因此我们希望从主机号中借用一些位作为网络号,这样就可以划分更多的子网,提高地址利用率.这种方法称为子网划分(Subnetting).

我们使用子网掩码来表示子网划分的情况.子网掩码也是一个32位的二进制数,与IPV4地址进行与运算,得到网络地址.

子网划分将原来的两级IP地址(网络号、主机号)转变为三级IP地址(网络号、子网号、主机号)。子网号是从原来的主机号部分借位而来的。


IP地址结构

子网掩码由一连串的1和一连串的0组成,其中1对应IP地址中的网络号和子网号,0对应主机号。

子网划分示例

假设有一个B类网络 145.13.0.0,其默认子网掩码为 255.255.0.0。现在需要将其划分为多个子网,每个子网最多容纳约500台主机。

  1. 确定主机位数: 为了容纳500台主机,我们需要确定主机号所需的位数 n。 $$ 2^n - 2 \ge 500 $$ 计算可知,\(2^9 - 2 = 510\),满足条件。因此,主机号需要9位。

  2. 确定子网位数: B类地址的主机号部分有16位。借走一部分给子网号后,还剩9位给主机号。 因此,子网号的位数为:\(16 - 9 = 7\) 位。

  3. 计算子网掩码: 新的子网掩码在默认B类掩码的基础上,将原主机号部分的前7位置为1。

    • 默认B类掩码:11111111.11111111.00000000.00000000

    • 新的子网掩码:11111111.11111111.11111110.00000000

    • 转换为十进制:255.255.254.0

  4. 计算子网数量: 子网号有7位,因此可以划分出 \(2^7 = 128\) 个子网。

通过这种方式,原有的一个B类网络被成功地划分成了128个更小的子网,每个子网可以容纳510台主机,极大地提高了IP地址的利用率。

无分类编址CIDR(Classless Inter-Domain Routing)

随着互联网的发展,分类编址的局限性愈发明显,即使有子网划分,地址浪费和路由表庞大的问题依然存在。为此,IETF提出了无分类域间路由(CIDR)

CIDR消除了传统的A、B、C类地址和子网划分的概念,将32位的IP地址划分为两部分:网络前缀主机号.

\[ \text{IP地址} ::= \{<\text{网络前缀}>, <\text{主机号}>\} \]

CIDR采用斜线记法,在IP地址后面加上/和网络前缀的位数。例如,128.14.32.8/20表示该IP地址的前20位是网络前缀,后12位是主机号。

CIDR地址块:CIDR将网络前缀相同的连续IP地址组成一个“CIDR地址块”. 我们可以根据地址块的起始地址和网络前缀长度,计算出地址块的范围:

  • 地址块中的地址数\(2^{32 - \text{网络前缀长度}}\)
  • 最小地址:网络前缀部分不变,主机号部分全为0。
  • 最大地址:网络前缀部分不变,主机号部分全为1。

CIDR地址块计算

对于地址块 128.14.32.0/20

  • 地址数\(2^{32-20} = 2^{12} = 4096\) 个地址。
  • 子网掩码:前20位为1,后12位为0,即 255.255.240.0
  • 最小地址128.14.32.0
  • 最大地址128.14.47.255

因此,该地址块的范围是 128.14.32.0128.14.47.255

无分类编址相比于之前,最大的进步就是更加灵活了,不需要固定8,16或者24位作为网络号,可以根据实际需求划分任意长度的网络前缀.形成自定义大小的子网.

路由聚合(构成超网)

CIDR的一个核心优势是路由聚合,它允许将多个连续的CIDR地址块合并成一个更大的地址块,从而在路由表中用一个条目来表示多个网络。这个过程也称为构成超网(Supernetting)

例如,一个ISP拥有206.0.68.0/22206.0.71.0/22这4个地址块。它可以向外界宣告它拥有一个更大的地址块206.0.68.0/20,这样外部路由器只需要一条路由记录就能找到这个ISP下的所有主机。

路由聚合极大地减少了路由表的规模,减轻了路由器的负担,提高了互联网的整体性能。


路由聚合示例

要找到聚合后的共同前缀,只需对所有地址进行“按位与”运算。

最长前缀匹配

由于路由聚合的存在,路由表中可能会出现多个匹配目的IP地址的条目。例如,一个路由器中可能有:

  • 206.0.68.0/20 -> 路由器R1
  • 206.0.70.0/22 -> 路由器R2

当一个目的地址为206.0.70.130的数据包到达时,两个条目都能匹配。此时,路由器会采用最长前缀匹配原则,选择网络前缀最长的那个条目进行转发。在这个例子中,/22/20更长,因此数据包会被转发给路由器R2。

评论