引言
计算机网络:网络层(一)——服务模型、路由算法与IPv4数据报
在上篇文章中我们介绍了网络层的功能是什么,以及数据报应该如何传输,在本期我们将了解IPv4地址怎样进行划分,路由器怎样根据地址选择路由
IP地址分类
A类地址
- 网络号位数:8
- 主机号位数:24
- 网络号范围:0000 0001 ~ 0111 1110(1~126)
- 网络号:0000 0000 表示网络地址、本机网络或默认路由 0111 1111 特殊用途
- 网络号数量:2^7 - 2
- 单个网络最大主机数:2^24 - 2(去除全0和全1)
B类地址
- 网络号位数:16
- 主机号位数:16
- 网络号范围:1000 0000 0000 0001 ~ 1011 1111 1111 1111(
128.1.x.x~191.255.x.x) - 网络号:1000 0000 0000 0000 (128.0)
- 网络号数量:2^14 - 1
- 单个网络最大主机数:2 ^ 16 - 2(去除全0和全1)
C类地址
- 网络号位数:24
- 主机号位数:8
- 网络号范围:1100 0000 0000 0000 0000 0001 ~ 1101 1111 1111 1111 1111 1111(
192.0.1 ~ 223.255.255) - 网络号:1100 0000 0000 0000 0000 (
192.0)早期/考试不可分配 - 网络号数量:2^21 - 1
- 单个网络最大主机数: 2^8 - 2(去除全0和全1)
特殊IP地址
- 在本地网络中表示网络地址、本机地址,在路由表中表示默认路由(
0.0.0.0) - 通常在
LAN中进行广播,使用该地址表示网络中的所有主机(255.255.255.255) - 在发送方不知道主机号的情况下,用于本地软件回环测试,称为回环地址(
127.x.x.x)
私有地址
有一部分地址保留用于内部网络,称为私有地址。这部分地址不会被公共互联网分配,不会与公共地址重复。这些地址无法在公共互联网使用,因为路由器不对目标地址是私有地址的分组进行转发
子网划分
简介
将一个地址块划分成几部分,将一个大的网络分割成多个小的子网,供多个内部网络使用,但对于外部世界仍然像单个网络一样,这样可以更好的管理和利用地址空间,避免浪费
通过分割子网,可以限制广播域的范围,减少网络中的广播流量,提升效率
通过将不同的部门或区域划分到不同的子网,可以更好的控制流量,减少潜在的安全风险
CIDR
翻译成中文就是无分类域间路由选择CIDR是一种新的IP地址划分方法,是一种更灵活的IP地址分配法,它打破了传统的A、B、C类IP地址的限制,CIDR使用一个斜杠跟网络前缀长度来表示IP地址和网络的关系
子网掩码
常见的3类IP地址子网掩码
网络中的主机被分配IP地址的同时,还会制定子网掩码
通过将IP地址和子网掩码两者进行按位与操作,可以得到IP地址所属的网络地址(网络号)
CIDR无分类编址子网掩码
上图演示的是三类IP地址对应的子网掩码,除了常见的三类IP地址之外我们还会遇到现代CIDR无分类编址,该类型的子网掩码相对于前面三种更为直观,一般会直接写在IP地址后面
形如192.24.12.0/22,这就是一个CIDR无分类编址子网掩码,其子网掩码的位数为22位
判断路由能否匹配当前IP地址
在进行网络数据传送时当数据在面临多个路由器时应该如何选择下一条的路由和后续的路由地址?
对应的判断公式为:
目的IP & 该路由器的子网掩码 = 该路由的网络地址如果计算出来的结果相等,这就说明这条路由能够匹配目的的IP
网络前缀
网络前缀是指IP地址前的若干位,由/n指定长度,用于路由匹配,例如:192.168.1.130/26,这表示前26位是网络前缀,后六位是主机部分。其中网络前缀是指前26位,网络地址是192.168.1.128,主机部分是后6位
在这里还有一个类似的概念需要辨析,那就是网络号,网络号指的是一个网络的编号或者标识。在CIDR中,网络号通常就是指网络前缀所标识的值,所以在很多情况下这两个概念会被混用。但是网络前缀还强调了长度,例如
192.168.1.0/24 192.168.1.0/25虽然前面的十进制数相同,但是前缀长度不同,表示的网络范围也不同
路由选择
路由选择是指主机或者路由器根据数据报的IP地址,从路由表中选择一条合适的路径,并确定下一跳的路由器和数据报发送接口,它解决的问题是:
当目的主机不在当前网络中时,数据接下来应该交给谁
一台路由器通常只决定”下一跳“,不会一次规划数据报经过的全部路由器
路由聚合
简介
路由聚合也叫路由汇总,是指:
将多个连续、具有相同高位前缀的小网络,合并成一个更大范围的CIDR网络,并用一条汇总路由表示
例如下面四条路由:
192.24.12.0/24 192.24.13.0/24 192.24.14.0/24 192.24.15.0/24可以聚合成192.24.12.0/22
于是子路由不必分别保存或通告四条路由,只需要使用一条汇总路由
原理
路由聚合的核心是:找出多个网络地址在二进制形势下共同的连续前缀
将四个网络地址的第三个字节转换为二进制:
12 = 00001100 13 = 00001101 14 = 00001110 15 = 00001111排列在一起:
192.24.00001100.00000000 192.24.00001101.00000000 192.24.00001110.00000000 192.24.00001111.00000000 └──────┘ 公共前缀第三个字节中前6位相同:0000 11
前两个字节已有16位相同,所以共同前缀长度为:22位。将公共前缀之后的位全部置零,得到:192.24.12.0/22
特性
CIDR往往更适合路由聚合,这是因为CIDR可以明确携带的前缀长度,因此路由器能够更准确的知道聚合地址块的范围
最长匹配前缀
简介
最长路由匹配前缀是路由器查询路由表时使用的基本规则:
如果一个目的IP地址同时匹配多条路由,就选网络前缀最长,地址范围最具体的那一条,例如:
/24 的前缀比 /22长 /22 的前缀比 /16长 /16 的前缀比 /0长因此当出现多条路由同时匹配路径时:
/24 优先于 /22 /22 优先于 /16 /16 优先于 /0示例
假设路由表中同时有:
192.24.12.0/22 192.24.15.0/24 0.0.0.0/0这几个网络的范围是:
| 路由 | 表示范围 |
|---|---|
192.24.12.0/22 | 192.24.12.0~192.24.15.255 |
192.24.15.0/24 | 192.24.15.0~192.24.15.255 |
0.0.0.0/0 | 所有IPv4地址 |
| 他们是一层套一层的关系 |
0.0.0.0/0 └── 192.24.12.0/22 └── 192.24.15.0/24所以目的地址192.24.15.2同时处于这三个范围内
为什么我们会优先选择24?
因为/24的范围更小,描述的更加精确
/0 :中国 /22 :某个城市 /24 :某条街道如果我们知道了一个人位于某条街道,那么我们就没必要到全中国的各个角落去找他
总结
后续我还会继续分享相关的网路层学习笔记敬请期待