在IEEE 802网络上传送IP数据报

介绍

本文的目的是允许IP数据包传送和ARP请求与响应的兼容实现。为了达到这个目的,有些时候应该限制IP和ARP使用某一特定的IEEE 802标准。IEEE 802是LAN的协议族,处理物理层与数据链路层的问题,它定义了物理层标准(如802.3,802.4和802.5)以及数据链路层标准(802.2)。IEEE物理层标准说明ISO/OSI物理层和数据链路层的媒介访问(MAC)子层。802.2数据链路层标准说明数据链路层的逻辑链路控制子层。本文说明了IP和ARP在三种类型网络上的应用。本文的目的是提供足够的材料确定IP和ARP在这些网络上达到以下功能:

(1) 所有在802.3网络上的IP和ARP设备能够互操作;

(2) 所有在802.4网络上的IP和ARP设备能够互操作;

(3) 所有在802.5网络上的IP和ARP设备能够互操作;

描述

IEEE 802网络可用于各级(A,B或C)IP网络。这些系统使用LLC头中两个链接服务访问点(LSAP)域,而且还有对LLC头扩充称为子网访问协议(SNAP)的一个协议。IP包在802网络上传送时,会在802.2 LLC和SNAP数据链路层和802.3,802.4,802.5物理层上打包。SNAP用和一个组织代码(Organization Code)一起使用。通常所有通信使用802.2的1类通信,当两个网络都使用IEEE 802网络时,可以使用2类通信,这由802.2 XID机制完成。但是1类通信是推荐的方法,所以实现必须支持。IEEE 802网络可以使用16位或48位物理地址,本文中所指地址不区别是具体是哪一种。802.3标准规定的网络传输速率从1Mbps到20Mbps,802.4规定的传输速率为1Mbps,5Mbps和10Mbps,而802.5规定的传输速率为1Mbps和4Mbps,通常情况下,802.3和802.4的传输速率为10Mbps,802.5的传输速率为4Mbps,但是本文的IP数据报传输与具体传输速率无关。

头格式

LCC头和SNAP头的总长为8个字节。K1=170,K2=0,控制值=3。

地址映射

将32位IP地址映射到IEEE 802地址必须使用ARP协议的动态发现过程。ARP有几个参数域:

hrd

16 位

硬件类型码

pro

16 位

协议类型码

hln

8 位

硬件地址

pln

8 位

协议地址

op

16 位

操作码

IEEE 802网络的硬件类型码是6,IP的协议类型码为2048,IP的协议地址长度为4,硬件地址长度为2(对16位802地址)或6(对48位802地址),操作码是1时代表请求,是2时代表应答。

广播地址

IP广播地址映射到IEEE 802的广播地址(全1地址)。

尾部格式

有些版本的Unix 4.x bsd使用不同的打包格式,为了利用VAX虚拟内存体系提高网络性能,这些系统之间可以使用这种打包格式进行通信,但是所有实现必须支持标准的(无尾部)方法。

字节顺序

IP数据报在IEEE 802网络上传送时是以8位字节串的形式传送,传送顺序称为"big-endian"。

最大传输单元(MTU)

不同的802网络的MTU不同,下面会列出所有网络的MTU。在同一个网络内的所有主机必须使用相同的MTU,下文中最大包大小和MTU等效。

帧格式与MAC层

对于所有硬件类型,IP数据报和ARP请求与应答以标准802.2 LLC类型一无序号信息格式传送,控制码为3,DSAP和SSAP域为170,为SNAP指定全局SAP值。24位的组织码为0,其余的16是EtherType,如果是IP则为2048,如果是ARP则为2054。IEEE 802有最小包大小限制,因此过小的包必须加以填充,而填充不记入IP包头内。为了兼容性,最小包大小为28字节,因为IP头的最小大小为20字节,LCC和SNAP头加起来有8字节,所以是28字节,其中不包括MAC头。而ARP的最小包大小为20字节。通常情况下,ARP包大小为32字节。因为IEEE 802包有最大包限制,实现中推荐使用最大包长度。而在网关中,则要准备对最大包长度的支持和对大包的分段。主机的实现应该准备接收最大长度的包,但是不推荐发送大于576字节的包,除非明确知道对方能够接收。IEEE 802网络上的包可能大于576字节,因此主机必须注意在向非本网络主机发送消息时要使用尽量小的包,减少网关对包的分段操作。

因为没有必要支持IP和ARP,但是必须支持IEEE 802.2标准I类服务,要支持无序号信息(UI)命令,XID命令,TEST命令和响应。对于XID或TEST必须返回应答。当poll位关闭时XID命令或应答的LCC控制域为175,如果打开则为191,而对于TEST命令来说,关闭时为227,打开时为243。SSAP地址的最高位为0时,这是一个命令帧,如果为1则为应答帧。XID应答帧应该包括802.2 XID信息域129.1.0,指明是I类服务。

IEEE 802.3

IEEE 802.3物理层定义的特殊点在于它定义了三个域,速率,介质类型和最大段长度(百米为单位)。我们可以看一下10BASE5,10Mbps,基带传输,最大长度为500米。这符合标准以太网标准。MAC头包括6(或2)字节的源地址和目的地址,2字节的长度。MAC尾包括4字节的帧校验序列(FCS)。IEEE 802.3网络拥有最小包长度,这和传输速率有关,对于10BASE5 802.3网络来说,最小包大小为64字节,而最大包长度也和传输速率有关,对于10BASE5 802.3网络来说,最大包大小为1518字节,包括所有在目的地址和FCS之间的字节数。对于IP数据来说,包括包头的大小不得大于1518-18(MAC头和尾)-8(LCC和SNAP头)=1492字节。

IEEE 802.4

MAC头包括1字节帧控制,包括6(或2)字节的源地址和目的地址,MAC尾包括4字节的帧校验序列(FCS)。IEEE 802.4网络没有最小包大小。最大包长度为8191字节。因为IP数据报的最大长度为8191-17(MAC头和尾)-8(LLC和SNAP头)= 8166。

IEEE 802.5

这个标准就是我们所熟悉的令牌环网,它是一个单环,但现在的实现已经把它扩展为多环了。MAC头包括1字节的访问控制,1字节的帧控制,包括6(或2)字节的源地址和目的地址,对于多环来说,还有0到18字节的路由信息域(RIF), MAC尾包括4字节的帧校验序列(FCS)。在FCS后还有附加的帧状态字节。

IEEE 802.5多环

源地址最高位(MSB)称为路由信息标记(RII)用来指示是否有路由信息域。如果RII=0,没有RIF;如果RII=1,有RIF。虽然RII在源地址中,但它不是MAC地址的一部分,而且目的地址的MSB也是一个标记,个体/组标记,如果设置此标记,此帧用于广播。因此在实现的时候要注意这两位的表示。

RIF包括两位路由控制(RC)域,后面是0到8个双字节RD域。全路由(all-route)广播帧的格式如下:

全路由广播帧格式

B - 广播标记:3位

此标记用于指示此帧可以被路由过一个特定的路由,或多环网络中每个非中继路,或由扩展树算法决定的某一特定路由,其结果是要帧在每个环出现一次。目前可用的值有(其它值保留):

000

非广播,指定路由

100

全路由广播,全广播

110

单路由广播,有限广播

LTH - 长度:5位

用于表示长度或RI域,只有2到30之间的偶数可以使用。

D - 方向域:1位

D位指定RD域的顺序,如果D=1,RD域以反序排列。

LF - 最大帧:3位

LF位指定在指定路由上所有网桥支持的MTU。所有多环广播帧应该至少以支持的MTU大小广播,LF的具体含义如下(其它值保留):

LF

MAC MTU

IP MTU

000

552

508

001

1064

1020

010

2088

2044

011

4136

4092

100

8232

8188

接收方比较LT和MTU,如果LF>=MTU,不进行任何操作,否则拒绝此帧。在LF<MTU时实际上有三种操作,第一种是拒绝,第二种是减少MTU使之和LF相等,第三种是基于接收的LF对每个通信主机保持独立的MTU。

r - 保留:4位

保留位设置为0。

IEEE 802.5网络没有最小包大小限制,最大包限制基于令牌在一个节点能够呆的时间。这个时间取决于许多因素,数据信号速率,结点数等。在多环带网桥的情况下,判断这个时间是十分复杂的。如果时间为9毫秒,4Mbps,最大包大小=4508。对于IP数据的大小最大可以达到4508-36(MAC头和尾及18字节的RIF)-8(LCC和SNAP头)=4464。但就现在的实现来说,一般规定最大包大小为2046,对于IP数据报就只有2002了,对于所有支持IP包的实现来说,至少要支持接收2002字节的数据报。一般来说,使用多环802.5网络中使用源路由网桥的情况下,最大包不会超过8232字节。那么IP数据报的最大大小也就是8188字节了。

两接两个环的源路由网桥会限制转发包的大小为552字节,去掉MAC头和尾的36字节和LCC和SNAP的8字节,IP数据的最大大小也就是508字节。这小于默认的IP MTU 576字节,因此会因为分段造成效率的下降。IEEE 802.5网络支持三种类型的广播。全基站(all-stations)广播发送时没有RIF,或广播标记设备为0,所有在本地网的基站复制一次。全路由广播和相应的广播标记一起广播,可能会产生多个复本,而单路由广播在多环网络上对每个基站点产生一个广播帧。因此在进行ARP动态查找过程时,要尽量减少广播就要先采取全基站广播,然后再视情况进行全路由或单路由广播。全路由广播比较好,因为它有容错性。在多冗余网桥中,全路由广播即使在扩展树桥失败的情况下也可以使用。但是,如果IP和ARP必须使用相同的广播方法,还是使用单路由广播比较好。

当ARP请求或应答接收到以后,所有实现必须能够识别无RIF和空RIF的帧。如果支持多环源路由,需要保存非空RIF用于对发起ARP请求或应答的主机进行响应。如果源路由没有实现,所有带有非空RIF的包被忽略。在使用全路由广播时,可以会因为多个网桥的传送接收到多个广播帧,但是因为经过不同的路由,所以RIF的内容不同。具体实现中必须决定使用哪一个,而把其它的帧作废。具体实现方法有三种:(1)先到的留下,其它作废;(2)最后到的留下,其它作废;(3)留下最短路由的。因为没有兼容性的问题,用什么方法实现者自己看着办。但ARP请求的接收者必须以点对点消息的形式使用RIF消息返回ARP应答。

RIF消息与ARP表不同,前者是对IP地址和802的48位地址进行映射,而后者是对IP地址和802.5源路由进行映射。如果可以实现者可以将ARP和RIF一起保存。IP广播必须必须以802.5单路由广播形式广播。如果IP广播产生多个副本会对使用IP协议的协议产生不可预知的错误。因为当前的接口硬件地址只允许一个组地址,而功能地址又不是全局唯一的,因此IP和ARP不使用这些特点。IP优先级不应该被映射到802.5优先级上,所有IP和ARP包应该以默认的802.5优先级(3级)发送。在包传输中,802.5提供帧未复制或未识别标记,具体实现者可以使用这些标记提供一些容错功能。如果设置了帧复制位而未设置地址不可识别位,接收方接收拥塞。发送方可以再次发送,重复几次(通常是4次),或者一直发送一直等到接收方可以接收为止。如果设置了地址不可识别位,实现者有三种选择:(1)忽略错误并丢弃包;(2)返回ICMP目的不可达信息到源地址或者(3)删除用于发送此包的ARP入口,发送新的ARP请求到目的地址。后面的方法是比较可取的。

与Ethernet互操作

可以在相同的物理线路上使用Ethernet链路层协议和IEEE 802.3链路层协议。这样使用的计算机接口可以读取Ethernet和802.3包。如果计算机读取两种类型的包,它必须确定对方计算机使用的是什么协议,在向它发送时要使用正确的协议。在这种情况下,广播帧可能不能为网络内所有的主机获得。因为必须假设大部分计算机将使用某一种链路协议发送和接收,所以推荐使用IP网关把使用Etherent和802.3协议的计算机分为两个独立的网络。还有一点,在Ethernet的MTU下IP最大包大小是1500字节,而在802.3网络下只有1492字节。