我们上篇介绍的 IP 地址是网络层的基础,要真正将数据包从发送端成功发送到目标主机,还需要通过路由控制。今天就来介绍路由控制的概念及其跳转流程。
路由控制定义
发送数据包时使用的地址就是 IP 地址,然而仅仅有 IP 地址还不足以将数据包发送到目标地址,在数据包发送过程中还需要指明下一跳路由器或主机,以便发往最终目标地址。
在这里我们需要先了解「跳」的概念,「跳」是网络中的一个区间(网段),IP 数据包正是在网络中一个个跳之间转发,因此 IP 路由也叫多跳路由,在每一个区间内决定着包在下一跳被转发的路径:
在以太网等数据链路中使用 MAC 地址传输数据帧,此时的一跳指的是源 MAC 地址到目标 MAC 地址之间传输帧的区间。也就是说它是主机或路由器网卡不经其它路由器而能直接到达相邻主机或路由器网卡之间的一个区间。
为了将数据包发送给目标主机,所有主机和路由器都维护着一张路由控制表,该表记录 IP 数据在下一步应该发给哪个路由器,IP 数据包将根据这个路由表在各个数据链路上传输。
该路由控制表有两种生成方式,一种是管理员手动设置,一种是路由器根据与其他路由器相互交换信息时自动刷新。前者叫静态路由控制,后者叫动态路由控制。为了让动态路由及时刷新路由控制表,在网络上互连的路由器之间必须设置好路由协议,保证正常读取路由控制信息(关于路由协议后面我们会单独介绍)。
路由控制流程
我们在上一篇介绍的 IP 地址的网络地址部分将会用于路由控制,根据网络标识选择下一跳的路由器。具体的跳转逻辑如下图所示:
要从源主机 10.1.1.30 发送一个数据包到目标主机 10.1.2.10,由于 10.1.2.10 的网络地址与源主机 10.1.1.0/24 的网络地址不匹配,所以数据包被转发到路由器,路由器的路由控制表中如果已经存在 10.1.2.0/24 的网络地址映射,则直接将请求转发到对应的路由器(关于路由控制表的生成逻辑我们后面会详细介绍),如果目标主机 IP 地址在该路由器所在的数据链路中,再将数据包发送过去,就完成了将数据包发送到目标主机的流程。
IP数据包的分片与合并
IP 数据包是在数据链路层处理的基础上对数据进行打包,不同数据链路的各自最大传输单位(MTU)不尽相同,但是 IP 协议又是可以实现多个数据链路之间通信的协议,所以,意味着它对不同的数据链路差异进行了抽象,使得上层无需关注底层网络构造细节。
在具体实现时,IP 协议采用了对数据包进行分片处理,将较大的 IP 包分割成较小的包,到了接收端以后再根据分片序号重新组合起来传递给上一层,通过这种方式实现了对数据链路层的抽象。
分片会导致路由器处理负荷加重,所以只要允许,都不会让路由器进行 IP 数据包的分片处理,其次,在分片过程中,如果某个分片丢失,整个 IP 数据包都会作废。实际实现过程中,为了避免路由器对 IP 数据包进行分片,还产生了一种叫做「路径 MTU 发现」的技术,所谓路径 MTU 指的是从发送端主机到接收端主机之间路由器不需要对 IP 数据包进行分片的最大 MTU 的大小,然后发送端根据这个 MTU 的大小对数据包进行分片发送,从而避免路由器对其进行分片处理。感兴趣的同学可以去了解下其实现细节,这里就不深入展开了。
小结
关于路由控制以及IP数据包的发送就简单介绍到这里,下一篇将带大家了解下 IP 数据报文的结构,以便更好地了解计算机网络中数据的传输原理。