持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情
前言
昨天我们介绍了计算机网络网络层中IP协议的IP分组、IPv4地址。今天我们再讲解一下子网与IP地址的划分、子网掩码和CIDR,另外介绍一下ARP协议和DHCP协议。了解了这些,你就可以明白IP数据报是如何在网络层中传播的了。
子网 subnet
子网划分
之前我们介绍的 两级IP地址{network, host} 不仅不够灵活、利用率低,而且;给每个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏。
因此从1985年开始, IP 地址中又增加了一个 子网号字段,使两级IP地址变成了 三级IP地址{network, subnet, host} 。这种做法成为子网划分。
- 子网划分属于一个单位内部的事。单位对外仍表现为没有划分子网的网络。
- 子网号是从主机号中借用来的,主机号对应减少相应的比特。不影响ABC类网络号的比特数。
- 凡是从其他网络发送给本单位某台主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号,先找到连接到本单位网络上的网关(Gateway),再由网关路由器根据目的子网号找到对应的LAN,发送到目的主机。
💡 不论是分类的 IPv4 地址还是 CIDR,其子网中的主机号为全 0 或全 1 的地址都不能被指派。子网中主机号全 0 的地址为子网的网络号,主机号全 1的地址为子网的广播地址。
子网掩码
为了告诉主机或路由器某个IPv4地址进行了A类、B类、C类网络子网划分,使用子网掩码来表达对原网络中主机号的借位。
子网掩码是一个与 IP 地址相对应的、长 32bit 的二进制串,它由一串 1 和跟随的一串 0 组成。其中, 1 对应 IP 地址中的网络号及子网号,而 0 对应主机号。IP地址和其子网掩码逐位进行与运算,可以得到子网的网络地址: (IP address) & (Mask) === subnet IP
现在的因特网标准规定:所有的网络都必须使用子网掩码。如果一个网络未划分子网,那么就采用默认子网掩码:
- Class A:255.0.0.0
- Class B:255.255.0.0
- Class C:255.255.255.0
💡 路由器在相互之间交换路由信息时,必须把自己所在网络的子网掩码告诉对方。
同属一个子网的所有主机及路由器的相应端口,必须设置相同的子网掩码。
无分类域间路由选择 CIDR
无分类域间路由选择 CIDR 是在变长子网掩码的基础上提出的一种消除传统 A、B、C 类网络划分,并且可以在软件的支持下实现超网构造的一种 IP 地址的划分方法。
试想一下,如果一个单位需要 2000 个地址,如果直接使用 B 类地址(支持65534个地址),那必然会导致IP地址的浪费。给他分配 2048(2(11))个地址就足够。这样可以大幅度提高 IP 地址空间的利用率,减小路由器的路由表大小,提高路由转发能力。
前缀和斜线记法
CIDR 使用 网络前缀 的概念代替子网络的概念,与传统分类 IP 地址最大的区别就是,网络前缀的位数不是固定的,可以任意选取。IP::={, }
CIDR 使用 斜线计法 来代替之前的子网掩码的写法。例如,128.14.32.5/20这个地址表示它的掩码是 20 个连续的 1 和后续 12 个连续的 0。
💡 "CIDR不使用子网"是指 CIDR 并没有在 32 位地址中指明若干位作为子网字段。但分配到一个 CIDR 地址块的组织,仍可以在本组织内根据需要划分出一些子网。
路由聚合
将网络前缀都相同的连续 IP 地址组成 CIDR 地址块。一个 CIDR 地址块可以表示很多地址,这种地址的聚合称为路由聚合(route aggregation)或地址聚合(address aggregation),或称构成超网。
在路由表选择转发IP数据报时,只需找到网络前缀相同的路由器,剩下的寻址任务交由子网内部进行。这使得路由表中的一个项目可以表示多个原来传统分类地址的路由,有利于减少路由器之间的信息的交换,从而提高网络性能:
💡 CIDR 地址块中的地址数一定是 2 的整数次幕,实际可指派的地址数通常为 2(N) -2。N表示主机号的位数,主机号全 0 代表网络号,主机号全 1 为广播地址。
在三级结构的 IP 地址中,划分子网使网络前缀变长。而 CIDR 的优点在于网络前缀长度的灵活性。由于上层网络的前缀长度较短,因此相应的路由表的项目较少。而内部又可采用延长网络前缀的方法来灵活地划分子网。
最长前缀匹配
使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。此时,应当从匹配结果中选择具有最长网络前缀的路由,因为网络前缀越长,其地址块就越小,因而路由就越具体。
💡 为了更快地查找转发表,可以按照前缀的长短,将前缀最长的排在第 1 行,按前缀长度的降序排列。这样,从第 1 行最长的开始查找,只要检索到匹配的,就不必再继续查找。
地址解析协议 ARP
无论网络层使用什么协议,在实际网络的链路上传送数据帧时,最终必须使用硬件地址。地址解析协议(ARP, Address Resolution Protocol) 的本质就是完成 IP地址 <-> MAC地址 的映射。
每台主机都设有一个 ARP 高速缓存,用来存放本局域网上各主机和路由器的 IP地址到 MAC地址的映射表,称 ARP 表。使用 ARP 来动态维护此 ARP 表。
ARP 工作在网络层,其工作原理如下:
- 主机 A 欲向本局域网上的某台主机 B 发送 IP 数据报时,先在其 ARP 高速缓存中查看有无主机 IP 地址。
- 如果有,A 主机就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。
- 如果没有,A 主机就通过使用目的 MAC 地址为 FF-FF-FF-FF-FF-FF 的帧来封装并广播 ARP 请求分组(广播发送),使同一个局域网里的所有主机都收到此 ARP 诮求。
- 主机 B 收到该 ARP 请求后,向主机 A 发出ARP 响应分组(单播发送),分组中包含主机 IP MAC 地址的映射关系。
- 主机 A 收到 ARP响应分组后就将此映射写入 ARP 缓存,然后按查询到的硬件地址发送 MAC 帧。
💡 ARP 请求分组是广播发送的,ARP 响应分组是普通的单播。
ARP 使用的几种情况,总结一下就是:
- 同一网段内:直接使用ARP找到目标MAC。
- 不同网段内:发送网络请求到网关路由,网关路由把请求通过IP寻址找到对应网段。交于目标网段的网关路由,让它通过ARP找到目标MAC。
ARP 对主机用户是透明的,一台网络设备与网络中另一个已知 IP地址 的网络设备通信时,ARP会自动进行解析。
动态主机配置协议 DHCP
动态主机配置协议(Dynam Host Configuration Protocol, DHCP) 常用于给主机动态地分IP 地址,它提供了即插即用的联网机制, 这种机制允许一台计算机加入新的网络时自动获取IP地址而不用手动分配。 DHCP 是应用层协议,它基于UDP。
它的工作流程如图:
DHCP 的客户端和服务器端需要通过广播方式来进行交互:
- 在 DHCP 执行初期,客户端不知道服务器端的 IP 地址。
- 在执行中间,客户端并未被分配 IP 地址,从而导致两者之间的通信必须采用广播的方式
采用 UDP 的原因也很是 TCP 需要建立连接,不知道对方的 IP 地址就不可能通过双方的套接字建立连接。
💡 DHCP 是应用层协议,因为它是通过
client-server模式工作的:DHCP 客户端向 DHCP 服务器请求服务。其他层次的协议是没有这两种工作方式的。
总结
网络层的数据平面至此介绍完毕。