网络层¶
约 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地址容易造成浪费,例如,一个子网中有100000台设备,此时采用A类地址,还剩下许多地址可以使用,但是别的子网就不不能用了.
因此我们希望从主机号中借用一些位作为网络号,这样就可以划分更多的子网,提高地址利用率.这种方法称为子网划分(Subnetting).
我们使用子网掩码来表示子网划分的情况.子网掩码也是一个32位的二进制数,与IPV4地址进行与运算,得到网络地址.
子网划分将原来的两级IP地址(网络号、主机号)转变为三级IP地址(网络号、子网号、主机号)。子网号是从原来的主机号部分借位而来的。
子网掩码由一连串的1和一连串的0组成,其中1对应IP地址中的网络号和子网号,0对应主机号。
子网划分示例
假设有一个B类网络 145.13.0.0,其默认子网掩码为 255.255.0.0。现在需要将其划分为多个子网,每个子网最多容纳约500台主机。
-
确定主机位数: 为了容纳500台主机,我们需要确定主机号所需的位数
n。 $$ 2^n - 2 \ge 500 $$ 计算可知,\(2^9 - 2 = 510\),满足条件。因此,主机号需要9位。 -
确定子网位数: B类地址的主机号部分有16位。借走一部分给子网号后,还剩9位给主机号。 因此,子网号的位数为:\(16 - 9 = 7\) 位。
-
计算子网掩码: 新的子网掩码在默认B类掩码的基础上,将原主机号部分的前7位置为1。
-
默认B类掩码:
11111111.11111111.00000000.00000000 -
新的子网掩码:
11111111.11111111.11111110.00000000 -
转换为十进制:
255.255.254.0
-
-
计算子网数量: 子网号有7位,因此可以划分出 \(2^7 = 128\) 个子网。
通过这种方式,原有的一个B类网络被成功地划分成了128个更小的子网,每个子网可以容纳510台主机,极大地提高了IP地址的利用率。
无分类编址CIDR(Classless Inter-Domain Routing)¶
随着互联网的发展,分类编址的局限性愈发明显,即使有子网划分,地址浪费和路由表庞大的问题依然存在。为此,IETF提出了无分类域间路由(CIDR)。
CIDR消除了传统的A、B、C类地址和子网划分的概念,将32位的IP地址划分为两部分:网络前缀和主机号.
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.0 到 128.14.47.255。
无分类编址相比于之前,最大的进步就是更加灵活了,不需要固定8,16或者24位作为网络号,可以根据实际需求划分任意长度的网络前缀.形成自定义大小的子网.
路由聚合(构成超网)¶
CIDR的一个核心优势是路由聚合,它允许将多个连续的CIDR地址块合并成一个更大的地址块,从而在路由表中用一个条目来表示多个网络。这个过程也称为构成超网(Supernetting)。
例如,一个ISP拥有206.0.68.0/22到206.0.71.0/22这4个地址块。它可以向外界宣告它拥有一个更大的地址块206.0.68.0/20,这样外部路由器只需要一条路由记录就能找到这个ISP下的所有主机。
路由聚合极大地减少了路由表的规模,减轻了路由器的负担,提高了互联网的整体性能。
要找到聚合后的共同前缀,只需对所有地址进行“按位与”运算。
最长前缀匹配¶
由于路由聚合的存在,路由表中可能会出现多个匹配目的IP地址的条目。例如,一个路由器中可能有:
206.0.68.0/20-> 路由器R1206.0.70.0/22-> 路由器R2
当一个目的地址为206.0.70.130的数据包到达时,两个条目都能匹配。此时,路由器会采用最长前缀匹配原则,选择网络前缀最长的那个条目进行转发。在这个例子中,/22比/20更长,因此数据包会被转发给路由器R2。


