1.路由器的结构
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。其典型的结构如下图所示:
2.路由器转发分组的原理
将路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
输入端口的处理
输入端口对线路上收到的分组的处理:数据链路层剥去帧首部和尾部后,将分组送到网络层的队列中排队等待处理,这会产生一定的时延。
输出端口的处理
输出端口将交换结构传送来的分组发送到线:当交换结构传送过来的分组先进行缓存。数据链路层处理模块将分组加上链路层的首部和尾部,交给物理层后发送到外部线路。
分组丢弃:若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。
交换结构
注:“转发”和“路由选择”的区别:
“转发”(forwarding)就是路由器根据转发表将用户的IP数据报从合适的端口转发出去。
“路由选择”(routing)则是按照分布式算法,根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由。路由表是根据路由选择算法得出的。而转发表是从路由表得出的。不过在讨论路由选择的原理时,往往不去区分转发表和路由表的区别。
3.IP层转发分组的流程
先看一些铺垫性的东西:
路由表为
查找路由表:根据目的网络地址就能确定下一跳路由器,这样做的结果是:IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。只有到达最后一个路由器时,才试图向目的主机进行直接交付。
特定主机路由:这种路由是为特定的目的主机指明一个路由。采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。
默认路由(defaultroute):路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。这种转发方式在一个网络只有很少的对外连接时是很有用的。默认路由在主机发送IP数据报时往往更能显示出它的好处。如果一个主机连接在一个小网络上,而这个网络只用一个路由器和因特网连接,那么在这种情况下使用默认路由是非常合适的。
注:IP数据报的首部中没有地方可以用来指明“下一跳路由器的IP地址”。当路由器收到待转发的数据报,不是将下一跳路由器的IP地址填入IP数据报,而是送交下层的网络接口软件。网络接口软件使用ARP负责将下一跳路由器的IP地址转换成硬件地址,并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器。
IP层的分组转发算法根据IP地址的分类情况:五类IP地址 划分子网 无分类编址 CIDR
五类IP地址分组转发算法:
(1) 从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。
(2) 若网络N与此路由器直接相连,则把数据报直接交付目的主机D;否则是间接交付,执行(3)。
(3) 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
(4) 若路由表中有到达网络N的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
(5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
(6) 报告转发分组出错。
在划分子网的情况下路由器转发分组的算法:
(1)从收到的分组的首部提取目的IP地址D。
(2)先用各网络的子网掩码和D逐位相“与”,看是否和
相应的网络地址匹配。若匹配,则将分组直接交付。
否则就是间接交付,执行(3)。
(3)若路由表中有目的地址为D的特定主机路由,则将
分组传送给指明的下一跳路由器;否则,执行(4)。
(4)对路由表中的每一行的子网掩码和D逐位相“与”,
若其结果与该行的目的网络地址匹配,则将分组传送
给该行指明的下一跳路由器;否则,执行(5)。
(5)若路由表中有一个默认路由,则将分组传送给路由表
中所指明的默认路由器;否则,执行(6)。
(6)报告转发分组出错。
在划分子网的情况下路由器转发分组的算法:
无分类编址CIDR路由转发算法:
1.最长前缀匹配
使用CIDR时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配(longest-prefixmatching)。
网络前缀越长,其地址块就越小,因而路由就越具体(morespecific) 。
最长前缀匹配又称为最长匹配或最佳匹配。
举例说明:
2.使用二叉线索查找路由表
当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。
为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binarytrie)。
IP地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
为了提高二叉线索的查找速度,广泛使用了各种压缩技术。
举例说明:用5个前缀构成的二叉线索