网络层
在ip编址和路由选择算法之前,我们需要先了解网络层的两种网络模型
- 连接服务(虚电路网络)
- 无连接服务(数据报网络)
网络层并不同时提供这两种服务
虚电路
虚电路是一种面向连接的服务,也就是说,它虚拟的构造了一条电路,这条电路的两端就是我们发起连接的主机和待连接的服务器,它们可以通过这条虚电路传输数据
我们看一下虚电路是怎么构建的
其实很简单,只要路由器维护一个转发表
入接口 入VC号 出接口 出VC号
1 12 2 22
这样一个转发表意味着什么,当路由器在一个入接口收到一个数据报,取出头部信息得知它的VC号为12,这时候找到对应的出接口,用出VC号替换该数据包的VC号,这样数据报就能由路由器转发表转发到目的地了
当我们要搭建一条虚电路时,就指定一个目标地址,网络层为我们选择路径,并为每一条链路设立一个VC号,然后在每个路由器的转发表中插入表项
当我们拆除一个虚电路时,网络层会更新路径上的所有路由器的转发表,将对应的表项删除
为什么我们不将一条虚电路的所有链路的VC号都一样?
因为如果这样,那当我们要建立一条新的虚电路时,必须用一个重未用的VC号,可是路由器那么多,你怎么知道哪个VC号没用过,这中间必然要经过很多数据报转发来通知,属实是浪费
数据报网络
数据报网络不同于虚电路网络,为了实现虚电路网络,我们是在路由器中维护一个基于VC的转发表,也就是维护一个连接状态信息,确保数据沿着这条虚电路发送的目的端
但是数据报网络不同,他是无连接服务,也就是你的数据报头部给出目的ip地址,然后我数据报网络帮你送到目的地
也就是说,数据报网络是基于ip地址来转发的,那么可想而知,它的路由器的转发表是什么东西?肯定是一堆ip地址对应各个端口
假如我们的ip地址编址是32位的,也就是ipv4编址,那2^32是多少,大约是40亿,我们总不可能在一个路由器中加入40亿个表项吧,因此我们必须减少表项,那我们要如何匹配地址呢?
其实也很简单,我们只要在路由器中加入4个表项就可以了,然后根据目的ip地址和我的表项中的ip地址的前缀匹配程度(也就是较多位相同的话优先选择)来决定转发到哪个端口
可能你会好奇,这样数据报真的能到达目的ip地址吗?等你看到后面的ip编址就知道了
参考:
《计算机网络自顶向下方法》