2. 链路层 (LINK LAYER)
2.1 引言 (INTRODUCTION)
所有互联网系统(包括主机和网关)对链路层协议都有相同的要求。这些要求在"互联网网关要求"[INTRO:2]的第3章中给出,并由本节的材料进行补充。
2.2 协议演练 (PROTOCOL WALK-THROUGH)
无。
2.3 具体问题 (SPECIFIC ISSUES)
2.3.1 Trailer协议协商 (Trailer Protocol Negotiation)
可以使用用于链路层封装的trailer协议[LINK:1],但仅当已验证链路层通信中涉及的两个系统(主机或网关)都实现了trailer时才可以。如果系统不对每个目的地动态协商trailer协议的使用,则默认配置必须禁用该协议。
讨论: trailer协议是一种链路层封装技术,它重新排列在物理网络上发送的数据包的数据内容。在某些情况下,trailer通过减少操作系统内的数据复制量来提高更高层协议的吞吐量。更高层协议不知道trailer的使用,但如果使用了trailer,发送和接收主机必须理解该协议。
不当使用trailer会导致非常令人困惑的症状。只有具有特定大小属性的数据包才使用trailer进行封装,并且通常只有一小部分交换的数据包具有这些属性。因此,如果使用trailer的系统与不使用的系统交换数据包,一些数据包会消失在黑洞中,而其他数据包则会成功交付。
实现: 在以太网上,用trailer封装的数据包使用不同的以太网类型[LINK:1],并且在使用ARP发现目标系统的链路层地址时执行trailer协商。
具体来说,ARP交换以通常的方式使用正常的IP协议类型完成,但是想要使用trailer的主机将发送一个额外的"trailer ARP应答"数据包,即指定trailer封装协议类型但在其他方面具有正常ARP应答格式的ARP应答。如果配置为使用trailer的主机从远程机器接收到trailer ARP应答消息,它可以将该机器添加到理解trailer的机器列表中,例如,通过标记ARP缓存中的相应条目。
希望接收trailer封装的主机在完成IP的正常ARP消息交换时发送trailer ARP应答。因此,接收到其IP协议地址的ARP请求的主机将发送trailer ARP应答以及正常的IP ARP应答;发送IP ARP请求的主机将在收到相应的IP ARP应答时发送trailer ARP应答。通过这种方式,IP ARP交换中的请求或响应主机都可以请求接收trailer封装。
该方案使用额外的trailer ARP应答数据包,而不是为trailer协议类型发送ARP请求,旨在避免与行为异常的主机持续交换ARP数据包,该主机违反任何规范或常识,用另一个IP的ARP应答响应trailer的ARP应答。通过仅在IP ARP应答回答未完成请求时发送trailer ARP应答来响应IP ARP应答来避免此问题;当接收到IP ARP应答时主机的硬件地址仍然未知时,这是正确的。trailer ARP应答可以始终与响应IP ARP请求的IP ARP应答一起发送。
2.3.2 地址解析协议 -- ARP (Address Resolution Protocol)
2.3.2.1 ARP缓存验证 (ARP Cache Validation)
地址解析协议(ARP)[LINK:2]的实现必须提供刷新过时缓存条目的机制。如果此机制涉及超时,则应该可以配置超时值。
必须包含防止ARP泛洪(以高速率重复发送相同IP地址的ARP请求)的机制。推荐的最大速率是每个目的地每秒1次。
讨论: ARP规范[LINK:2]建议但不要求使用超时机制来在主机更改其以太网地址时使缓存条目无效。代理ARP(参见[INTRO:2]的第2.4节)的普及显著增加了主机中的缓存条目变为无效的可能性,因此现在主机需要某种ARP缓存失效机制。即使在没有代理ARP的情况下,长周期缓存超时对于自动纠正可能已被缓存的任何错误ARP数据也是有用的。
实现: 已使用四种机制(有时组合使用)来刷新过时的缓存条目。
(1) 超时 -- 定期使缓存条目超时,即使它们正在使用中。请注意,当通过观察来自所讨论系统的ARP广播的源字段(无论目标地址如何)"刷新"缓存条目时,应重新启动此超时。对于代理ARP情况,超时需要在一分钟左右。
(2) 单播轮询 -- 通过定期向其发送点对点ARP请求来主动轮询远程主机,如果没有从N次连续轮询中接收到ARP应答,则删除该条目。同样,超时应该在一分钟左右,通常N为2。
(3) 链路层建议 -- 如果链路层驱动程序检测到传输问题,刷新相应的ARP缓存条目。
(4) 更高层建议 -- 提供从互联网层到链路层的调用以指示传输问题。此调用的效果是使相应的缓存条目无效。此调用将类似于从传输层到互联网层的"ADVISE_DELIVPROB()"调用(参见第3.4节),实际上ADVISE_DELIVPROB例程可能反过来调用链路层建议例程来使ARP缓存条目无效。
方法(1)和(2)涉及一分钟或更短时间的ARP缓存超时。在没有代理ARP的情况下,如此短的超时可能会在非常大的以太网上产生明显的开销流量。因此,可能需要配置主机以延长ARP缓存超时。
2.3.2.2 ARP数据包队列 (ARP Packet Queue)
链路层应该保存(而不是丢弃)发送到同一未解析IP地址的每组数据包中的至少一个(最新的)数据包,并在地址已解析时传输保存的数据包。
讨论: 未能遵循此建议会导致每次交换的第一个数据包丢失。虽然更高层协议通常可以通过重传来应对数据包丢失,但数据包丢失确实会影响性能。例如,TCP打开请求的丢失会导致初始往返时间估计膨胀。基于UDP的应用程序(如域名系统)受到的影响更严重。
2.3.3 以太网和IEEE 802封装 (Ethernet and IEEE 802 Encapsulation)
RFC-894 [LINK:3]描述了以太网的IP封装,而RFC-1042 [LINK:4]描述了IEEE 802网络的IP封装。RFC-1042详细说明并替换了[INTRO:2]第3.4节中的讨论。
连接到10Mbps以太网电缆的每个互联网主机:
- 必须能够使用RFC-894封装发送和接收数据包;
- 应该能够接收RFC-1042数据包,与RFC-894数据包混合;
- 可以能够使用RFC-1042封装发送数据包。
实现发送RFC-894和RFC-1042封装的互联网主机必须提供配置开关来选择发送哪种,并且此开关必须默认为RFC-894。
请注意,RFC-1042中的标准IP封装不使用IEEE为IP保留的协议id值(K1=6);相反,它使用一个值(K1=170),该值意味着可用于保存以太类型字段的扩展("SNAP")。互联网系统禁止使用K1=6发送802数据包。
在以太网和IEEE 802网络上,从互联网地址到链路层地址的地址转换必须由地址解析协议(ARP)管理。
以太网的MTU为1500,802.3的MTU为1492。
讨论: IEEE 802.3规范规定可以在10Mbps以太网电缆上操作,在这种情况下,以太网和IEEE 802.3帧可以物理混合。接收器可以通过802.3长度字段的值来区分以太网和802.3帧;这个两字节字段在头部中与以太网帧的以太类型字段重合。特别是,802.3长度字段必须小于或等于1500,而所有有效的以太类型值都大于1500。
另一个兼容性问题出现在链路层广播中。使用一种帧发送的广播不会被只能接收另一种帧的主机看到。
本节的规定旨在在同一电缆上的894功能系统和1042功能系统之间提供最大程度的直接互操作。它旨在支持当前情况,其中894专用系统占主导地位,同时为1042功能系统变得普遍的可能未来提供便利的过渡。
请注意,894专用系统无法与1042专用系统直接互操作。如果两种系统类型在同一电缆上设置为两个不同的逻辑网络,它们只能通过IP网关通信。此外,双格式主机自动发现发送哪种格式既不有用也不可能,因为存在链路层广播的问题。
2.4 链路/互联网层接口 (LINK/INTERNET LAYER INTERFACE)
IP层和链路层之间的数据包接收接口必须包含一个标志,以指示传入数据包是否寻址到链路层广播地址。
讨论: 虽然IP层通常不知道链路层地址(因为每个不同的网络介质通常具有不同的地址格式),但支持广播的介质上的广播地址是一个重要的特殊情况。参见第3.2.2节,特别是有关广播风暴的讨论。
IP和链路层之间的数据包发送接口必须包括5位TOS字段(参见第3.2.1.6节)。
链路层禁止仅因为目的地没有ARP缓存条目而向IP报告目的地不可达错误。
2.5 链路层要求摘要 (LINK LAYER REQUIREMENTS SUMMARY)
| | | | |S| | | | | | |H| |F | | | | |O|M|o | | |S| |U|U|o | | |H| |L|S|t | |M|O| |D|T|n | |U|U|M| | |o | |S|L|A|N|N|t | |T|D|Y|O|O|t
| 功能 | 章节 | T | T | e | |||
|---|---|---|---|---|---|---|---|
| Trailer封装 | 2.3.1 | x | |||||
| 未经协商默认发送Trailer | 2.3.1 | x | |||||
| ARP | 2.3.2 | ||||||
| 刷新过时的ARP缓存条目 | 2.3.2.1 | x | |||||
| 防止ARP泛洪 | 2.3.2.1 | x | |||||
| 缓存超时可配置 | 2.3.2.1 | x | |||||
| 保存至少一个(最新的)未解析数据包 | 2.3.2.2 | x | |||||
| 以太网和IEEE 802封装 | 2.3.3 | ||||||
| 主机能够: | 2.3.3 | ||||||
| 发送和接收RFC-894封装 | 2.3.3 | x | |||||
| 接收RFC-1042封装 | 2.3.3 | x | |||||
| 发送RFC-1042封装 | 2.3.3 | x | |||||
| 然后配置开关选择,RFC-894为默认 | 2.3.3 | x | |||||
| 发送K1=6封装 | 2.3.3 | x | |||||
| 在以太网和IEEE 802网络上使用ARP | 2.3.3 | x | |||||
| 链路层向IP层报告广播 | 2.4 | x | |||||
| IP层将TOS传递给链路层 | 2.4 | x | |||||
| 没有ARP缓存条目被视为目的地不可达 | 2.4 | x |