以一个例子来说明路由器是如何转发分组的
-
4个A类网络通过3个路由器连接在一起,每一个网络上都有成千上万台主机:
若路由表指出到每一台主机应怎样转发,那么所得到的路由表就过于庞大,每个路由表都需要成千上万个条目。
若路由表仅指出到某个网络该如何转发,就可以简化路由表,只需要四个条目。
上图每个路由器都有两个不同的ip地址 -
将上图整个网络拓补简化为下图
如此不关心某个网络内部的具体拓补以及其中包含的主机,专注于研究分组转发
在互联网上转发分组时,其实是从一个路由器
转发到下一个路由器
-
路由表中每一条路由最主要的两个信息
(目的网络地址,下一跳地址) -
由目的网络地址来确定下一跳路由器
1、ip数据报最终能找到 目的主机 所在 目的网络 上的 路由器(可能要通过多次间接交付)
2、只有达到最后一个路由器,才试图向目的主机进行直接交付 -
特定主机路由
对特定的目的主机
人为指明一个的路由
,人为规定去某个网络必须走指定路径
用于网管方便的控制和测试网络、安全性问题 -
默认路由
找不到某个目的网络的数据报就发送给这个默认路由
可以减小路由表所占用的空间
和搜索路由表所用的时间
主机在发送数据报时都要查找自己的路由表。若一台主机连接在一个小网络上,而网络只用一个路由器和互联网相连,此时使用默认路由时分合适。
如上图,连接在网络N1上的任一台主机中的路由表只需要3个项目即可:
1、到本网络主机的路由,目的网络就是本网络N1,不需要路由器转发,直接交付
2、到网络N2的路由,对应下一条路由器是R2
3、默认路由,只要目的网络是其它网络,就一律选择默认路由,将数据报间接交付R1,让R1转发给下一个路由器,一直转发到目的网络上的路由器,最后进行直接交付 -
待转发的数据报如何找到下一跳路由器?
当路由器收到一个待转发的数据报
,从路由表中得到下一跳路由器的ip地址
之后,不是把这个地址填入ip数据报,而是将这个地址送交数据链路层的网络接口软件。
通过ARP,网络接口软件将下一跳路由器的ip地址转换成mac地址,并将此mac地址
放在2层的mac帧的首部
,将待转发的ip数据报
放到2层的mac帧的数据部分
,然后根据这个mac地址找到下一跳路由器的接口,发送mac帧。
接收方2层接收这个mac帧,将数据报上传到3层,继续以同样方式转发…
如此,当转发若干数据报时,上述:查找路由表得到下一跳ip地址、ARP解析得到下一跳mac地址、将mac地址写入mac帧首部、发送。不断重复进行
虽然ip地址到mac地址的多次转换造成开销,但是在路由表中直接使用mac地址更麻烦 -
分组转发算法
1、路由器从 数据报的首部 提取出 目的主机的ip地址D,得出 目的网络地址N
2、若N就是与此路由器直接相连的某个网络地址,则进行直接交付(ARP获取mac地址,放入mac帧首部,交付目的主机)。否则本次就是间接交付,转3
3、若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表所指明的下一跳路由器。否则执行4
4、若路由表中有到达网络N的路由,则把数据报传送给这个路由。否则转5
5、若路由表中有一个默认路由,则把数据报传送给这个默认路由器。否则转6
6、报告转发分组出错 -
路由器没有指明分组到某个网络的完整路径
路由表指出:到某个网络应先到某个路由器(即下一跳路由器),到达下一跳路由器后继续查找其路由器,得到再下一步应当到哪一个路由器
如此一步一步,直至到达目的网络
这么做的最大好处就是使得路由选择动态灵活,若网络的情况发生变化(如发生拥塞),各路由器中的路由表也会随之更新,而改变下一跳路由,实现动态路由选择。