rfc1812 第五章转发(译).docVIP

  • 48
  • 0
  • 约1.5万字
  • 约 15页
  • 2018-09-17 发布于江苏
  • 举报
rfc1812 第五章转发(译)

网络层-转发 5.1 概述 本章描述转发数据包的过程。 5.2 转发综述 IP中没有关于转发功能的单独的规范。相反,网络层的协议协议规范介绍了转发的内容。 5.2.1 转发算法 既然所有的主要协议文档都没有讲述转发算法的细节,我们将在这里予以介绍。这里只是一个大纲,省略了重要的细节,如:拥塞处理,将在后续章节中介绍。 不需要完全遵循5.2.1.1、5.2.1.2和5.2.1.3节中介绍的算法来实现。编写路由器软件的最大挑战是在实现算法效果的同时最大化路由器转发数据包的速率。怎样实现不在本文档介绍的范围,部分原因是其很大程度上取决于路由器的结构。相反,我们仅仅指出顺序依赖关系的步骤: 路由器在执行基于首部内容的任何动作之前必须校验IP首部,这将在5.2.2中介绍。这样,路由器可以在使用其他资源之前,检测和丢弃坏得数据包。 特定IP字段的处理要求路由器把它的IP地址插入IP首部中。5.2.4节中,将介绍插入的地址必须是数据要发送的逻辑接口的地址,或者如果数据包是通过未编号的接口发送的话,插入的地址则是路由器的路由ID。因此,只有输出接口选定后,才能完成这个过程。 在校验数据包是否可以传送之前,路由器不能检查和递减TTL,原因将在4.2.2.9中介绍。 一般来说,数据包在本地传送给路由器时,它的IP首部必须在任何情况下都不能改变(除了路由器可能要把时间戳插入到IP首部中的时间戳选项中)。因此,在确定数据包是否是本地传送之前,路由器在任何情况下都不能更新IP首部。 5.2.1.1 概述 本节介绍一般的转发算法。该算法适用于数据包转发的所有形式:单播、组播和广播。 (1)路由器从链路层收到IP数据包; (2)路由器校验IP首部。注意,除非第4步中本地传递时需要IP分段,IP不需要重组。 (3)路由器执行IP选项中的绝大部分操作。一些IP选项需要路由决策后进行额外的处理。 (4)路由器检查IP数据报的目的IP地址,决定对IP数据报的后续处理。有3种可能: IP数据报要传往路由器,并且需要排队等待本地传递,如果需要的话要进行重组。 IP数据报不是传往路由器,而是排队等待转发。 IP数据包不仅要排队等待转发,而且(副本)要排队等待本地传递。 5.2.1.2 单播 IP数据报排队等待转发,如果目的地址是IP单播地址: (5)通过查找路由器的路由表,转发器决定数据包的下一跳IP地址。详细的介绍见5.2.4节。这个过程也需要确定发送数据包使用的网络接口。 (6)转发器验证是否允许转发数据包。源地址和目的地址必须是合法的。如果路由器支持转发的制约管理,这些制约因素都需要满足。 (7)转发器检查数据包的TTL,并递减TTL(至少是1)。 (8)转发器执行所有步骤3中没有执行的IP选项。 (9)转发器执行必要的IP数据包分段。由于这一步是在接口选择后进行的(第5步),因此同一个数据包的所有分段必须通过同一个接口传出去。 (10)转发器确定数据包下一跳的链路层地址。这样做的机制是链路层依赖(第3章)。 (11)转发器把IP数据报封装成合适的链路层帧,并在第五步选择的输出接口排队。 (12)如果有必要的话,转发器发送一个ICMP(网络控制报文协议)重定向报文。 5.2.1.2 组播 IP单播转发和IP组播转发的主要区别是: IP组播是基于数据报源IP地址和目的IP地址进行转发的; IP组播使用扩展环搜索; IP组播是通过链路层组播转发的; IP组播数据报回应时不发送ICMP错误。 如果目的地址是IP组播地址,将执行如下步骤: (5a)基于数据包首部中的源IP地址和目的IP地址,路由器确定转发的数据包是否从正确的接口接收。如果不正确,路由器默默丢弃该数据包。确定数据包从正确接口接收的方式依赖于使用的路由组播算法。最简单的算法是反向路径转发(Reverse Path Forwarding),正确的接口可以用来向数据包源地址进行单播转发。 (6a)基于数据包首部中的源IP地址和目的IP地址,路由器确定数据包传出的接口。为了实现IP组播的环搜索,每一个传出的接口都有一个特定的TTL最小值。组播数据包的副本就会从所有最小TTL值不大于数据包首部TTL值的接口传出,每个接口必须单独实现后续的步骤。 (7a)路由器把数据包的TTL值减1. (8a)转发器执行所有步骤3中没有执行的IP选项。 (9a)转发器执行必要的IP数据包分段。 (10a)转发器确定链路层封装需要应道的链路层地址。 (11a)转发器把IP数据报封装成合适的链路层帧,并在合适的输出接口排队。 5.2.2 IP首部验证 在处理任何IP数据包之前,路由器必须执行基础的数据包IP首部验证来确保首部是有意义的。如果数据包验证出现如下任何错误的时候,路由器必须丢弃该数据包,并应该把错误记录

文档评论(0)

1亿VIP精品文档

相关文档