路由器连接不同的网络
路由器的任务是,在不同的网络之间传送 IP 数据报。不同的端口连接不同的网络,每个端口都有不同的 IP 地址和 MAC 地址。
路由器连接多个局域网的例子
从途中可以知道:
- 处于同一个局域网中的主机和路由器,其网络号都是相同的。
- 路由器的每个端口,都有自己的 IP 地址和 MAC 地址
两个路由器相连时,相连的端口组成了一个点对点的网络,网络中只有两台主机。可以不为这个网络分配 IP 地址,这样的网络叫做匿名网络。
路由器允许不同的网络层协议
通过路由器连接的多个网络,他们的物理层,数据链路层,网络层协议可以不同,网络层以上的高层协议必须相同
- 网络层可以不同。现在 TCP/IP 大量使用,容易产生「网络层协议必须相同」的误解。连接 IPv4 和 IPv6 两个网络的路由器就是一个反例
- 高层协议必须相同:因为路由器最多只能处理到网络层的差异,更高层处理不了。如果两个网络需要通信,那么上层的协议必须要相同才行。
路由选择和分组转发
可以将路由器的功能划分为两个层面:
- 路由选择部分,也就是控制层面。根据路由选择协议构造出转发表,这一部分主要是由软件实现。
- 分组转发部分,数据层面。这一部分由硬件实现。
查询转发表进行转发
转发表的表项是 IP 地址,而不是 MAC 地址;查询过程就是前缀匹配的过程,要进行最长前缀匹配。
为了快速地进行最长前缀匹配,可以把路由表按照前缀长度进行排序,前缀最长的放在前面,这样可以确保第一个找到的匹配项前缀一定是最长的。
CIDR 的转发表是以二叉线索树的形式存储在路由器中的,利用这种结构可以很快地进行前缀匹配。
直接交付与间接交付
从 IP 数据报的首部提取出目的主机的 IP 地址,并计算出目的网络地址。
直接交付:直接交付有两种情况,共同特征都是「当前主机和目的主机在同一个网络中」。
- 第一种:源主机和目的主机在同一个网络中,源主机会查询自己的转发表,不经过路由器,直接发送给目的主机。
- 第二种:发生在间接交付的最后阶段,路由器和目的网络直接相连,此时不需要经过其他路由器,直接交付。
间接交付:
- 如果路由表中有指向目的主机 IP 的路由,则将数据报传送给指定的下一跳主机;
- 如果路由表中有指向目的网络的路由,则将数据报传送给指定的下一跳路由。
- 否则将数据报传送给默认路由
- 如果连默认路由也没有,就报错。
网络层进行转发时,将当前路由的 MAC 地址和目的路由器的 MAC 地址填入 MAC 帧的首部。
IP 数据报在路由器之间转发
涉及网络层和数据链路层的分组转发
跨网络通信时,依靠 IP 地址进行路由,由路由器进行转发;
当数据报到达局域网时,只需要数据链路层广播即可找到目的主机,此时使用的是 MAC 地址
IP 数据报在路由器之间传输
IP 数据报在传输的过程中,源 IP 和目的 IP 都是不变的;源 MAC 和目的 MAC 会改变。