02-链路层
TCP/IP协议族中,链路层主要有三个目的:
(1)为IP模块发送和接收IP数据报
(2)为ARP模块发送ARP请求和就收ARP应答
(3)为RARP发送RARP请求和接收RARP应答。
TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网、令牌环网、FDDI(光纤分布式数据接口)及RS-232串行线路等
这里主要讨论以太网链路层协议,两个串行接口链路层协议(SLIP和PPP),以及大多数实现都包含的环回(loopback)驱动程序。
2.以太网和IEEE 802封装
以太网,当今TCP/IP采用的主要的局域网技术。采用CSMA/CD的媒体接入方法,意思是带冲突检测的载波侦听多路接入。速率10Mb/s,地址为48bit。
IEEE(电子电气工程师协会)802委员会稍有不同的标准集,其中:
802.3针对整个CSMA/CD网络,
802.4针对令牌总线网络,
802.5针对令牌环网络。
这三者的共同特性由802.2标准来定义,那就是802网络共有的逻辑链路控制(LLC).不幸的是,802.2和802.3定义了一个与以太网不同的帧格式。
主机需求RFC要求每台Internet主机都与一个10Mb/s的以太网电缆相连接:
1)必须能发送和接受采用RFC 894(以太网)封装格式的分组
2)应该能接收与RFC 894混合的RFC 1042(IEEE 802)封装格式的分组
3)也许能够发送采用RFC 1042格式封装的分组。如果主机能同时发送两种类型的分组数据,那么发送的分组必须是可以设置的,而且默认条件下必须是RFC 894分组。
在802标准定义的帧格式中,长度字段是指它后续数据的字节长度,但不包括CRC检验码。以太网的类型字段定义了后续数据的类型。
在以太网帧格式中,类型指端之后就是数据;而在802帧格式中,跟随在后面的是3字节的802.2LLC和5字节的802.2 SNAP。目的服务访问点和源服务访问点的值都设为0xaa。Ctrl字段的值设为3.随后的3个字节org code都置为0.
CRC字段用于帧内后续字节差错的循环冗余检验(检验和)(它也被称为FCS或帧检验序列)。
3.尾部封装
略
4.SLIP: 串行线路IP
S L I P的全称是Serial Line IP。是一种在串行线路上对IP数据报进行封装的简单形式(RFC 1055). S L I P适用于家庭中每台计算机几乎都有的 R S - 2 3 2串行端口和高速调制解调器接入 I n t e r n e t。
SLIP协议定义的帧格式格则:
1) IP数据报以一个称作 E N D(0 x c 0)的特殊字符结束。同时,为了防止数据报到来之前的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个 E N D字符(如果有线路噪声,那么 E N D字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
2) 如果 I P报文中某个字符为 E N D,那么就要连续传输两个字节 0 x d b和0 x d c来取代它。
0 x d b这个特殊字符被称作S L I P的E S C字符,但是它的值与 A S C I I码的E S C字符(0 x 1 b)不同。
3) 如果I P报文中某个字符为 S L I P的E S C字符,那么就要连续传输两个字节 0 x d b和0 x d d来取代它。
SLIP是一种简单的帧封装方法,一些缺陷:
1)每一端必须知道对方的I P地址。没有办法把本端的I P地址通知给另一端。
2)数据帧中没有类型字段(类似于以太网中的类型字段)。如果一条串行线路用于 S L I P,那么它不能同时使用其他协议。
3 ) S L I P没有在数据帧中加上检验和(类似于以太网中的 C R C字段)。如果 S L I P传输的报文被线路噪声影响而发生错误,只能通过上层协议来发现(另一种方法是,新型的调制解调器可以检测并纠正错误报文)。这样,上层协议提供某种形式的 C R C就显得很重要。
5.压缩的SLIP
由于串行线路的速率通常较低( 19200 b/s或更低),而且通信经常是交互式的(如 Te l n e t和R l o g i n,二者都使用T C P),因此在 S L I P线路上有许多小的T C P分组进行交换。为了传送1个字节的数据需要2 0个字节的I P首部和2 0个字节的T C P首部,总数超过4 0个字节。
既然承认这些性能上的缺陷,于是人们提出一个被称作 C S L I P(即压缩 S L I P)的新协议,它在RFC 1144[Jacobson 1990a]中被详细描述。 C S L I P一般能把上面的4 0个字节压缩到3或5个字节。它能在C S L I P的每一端维持多达1 6个T C P连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。这些被压缩的首部大大地缩短了交互响应时间。
现在大多数的S L I P产品都支持C S L I P。
6.PPP: 点对点协议
P P P,点对点协议修改了S L I P协议中的所有缺陷。P P P包括以下三个部分:
1) 在串行链路上封装 I P数据报的方法。 P P P既支持数据为 8位和无奇偶检验的异步模式如大多数计算机上都普遍存在的串行接口),还支持面向比特的同步链接。
2) 建立、配置及测试数据链路的链路控制协议( L C P:Link Control Protocol)。它允许通信双方进行协商,以确定不同的选项。
3) 针对不同网络层协议的网络控制协议( N C P:Network Control Protocol)体系。当前R F C定义的网络层有I P、O S I网络层、 D E C n e t以及A p p l e Ta l k。例如,IP NCP允许双方商定是否对报文首部进行压缩,类似于 C S L I P(缩写词N C P也可用在T C P的前面)。
RFC 1548[Simpson 1993]描述了报文封装的方法和链路控制协议。 RFC 1332[McGregor 1 9 9 2 ]描述了针对I P的网络控制协议。
P P P数据帧的格式看上去很像 I S O的H D L C(高层数据链路控制)标准。
每一帧都以标志字符 0 x 7 e开始和结束。紧接着是一个地址字节,值始终是 0 x ff,然后是一个值为0 x 0 3的控制字节。
接下来是协议字段,类似于以太网中类型字段的功能。当它的值为 0 x 0 0 2 1时,表示信息字段是一个 I P数据报;值为 0 x c 0 2 1时,表示信息字段是链路控制数据;值为 0 x 8 0 2 1时,表示信息字段是网络控制数据。
C R C字段(或F C S,帧检验序列)是一个循环冗余检验码,以检测数据帧中的错误。
由于标志字符的值是 0 x 7 e,因此当该字符出现在信息字段中时, P P P需要对它进行转义。在同步链路中,该过程是通过一种称作比特填充 (bit stuff i n g )的硬件技术来完成的 [ Ta n e n b a u m 1 9 8 9 ]。在异步链路中,特殊字符 0 x 7 d用作转义字符。当它出现在 P P P数据帧中时,那么紧接着的字符的第6个比特要取其补码,具体实现过程如下:
1)当遇到字符 0 x 7 e时,需连续传送两个字符: 0 x 7 d和0 x 5 e,以实现标志字符的转义。
2)当遇到转义字符0 x 7 d时,需连续传送两个字符: 0 x 7 d和0 x 5 d,以实现转义字符的转义。
3) 默认情况下,如果字符的值小于 0 x 2 0(比如,一个 A S C I I控制字符),一般都要进行转义。
P P P比S L I P具有下面这些优点:
(1) PPP支持在单根串行线路上运行多种协议,不只是I P协议;
(2) 每一帧都有循环冗余检验;
(3) 通信双方可以进行 I P地址的动态协商(使用I P网络控制协议);
(4) 与C S L I P类似,对T C P和I P报文首部进行压缩;
(5) 链路控制协议可以对多个数据链路选项进行设置。为这些优点付出的代价是在每一帧的首部增加 3个字节,当建立链路时要发送几帧协商数据,以及更为复杂的实现。
7.环回接口
大多数的产品都支持环回接口( Loopback Interface),以允许运行在同一台主机上的客户程序和服务器程序通过 T C P / I P进行通信。A类网络号 1 2 7就是为环回接口预留的。根据惯例,大多数系统把I P地址1 2 7 . 0 . 0 . 1分配给这个接口,并命名为 l o c a l h o s t。一个传给环回接口的 I P数据报不能在任何网络上出现。
我们想象,一旦传输层检测到目的端地址是环回地址时,应该可以省略部分传输层和所有网络层的逻辑操作。但是大多数的产品还是照样完成传输层和网络层的所有过程,只是当I P数据报离开网络层时把它返回给自己。
需要指出的关键点是:
1) 传给环回地址(一般是 1 2 7 . 0 . 0 . 1)的任何数据均作为I P输入。
2) 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是因为广播传送和多播传送的定义(第 1 2章)包含主机本身。
3 ) 任何传给该主机I P地址的数据均送到环回接口。 看上去用传输层和 I P层的方法来处理环回数据似乎效率不高,但它简化了设计,因为环回接口可以被看作是网络层下面的另一个链路层。网络层把一份数据报传送给环回接口,就像传给其他链路层一样,只不过环回接口把它返回到 I P的输入队列中。
4.4BSD系统定义了变量 u s e l o o p b a c k,并初始化为1。但是,如果这个变量置为0,以太网驱动程序就会把本地分组送到网络,而不是送到环回接口上。它也许不能工作,这取决于所使用的以太网接口卡和设备驱动程序。
8.最大传输单元MTU
以太网和 8 0 2 . 3对数据帧的长度都有一个限制,其最大值分别是
1 5 0 0和1 4 9 2字节。字节。链路层的这个特性称作M T U,最大传输单元。不同类型的网络大多数都有一个上限。
如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片,把数据报分成若干片,这样每一片都小于MTU。
9.路径MTU
当在同一个网络上的两台主机互相进行通信时,该网络的 M T U是非常重要的。但是如果两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的 M T U。重要的不是两台主机所在网络的 M T U的值,重要的是两台通信主机路径中的最小 M T U。它被称作路径M T U。
两台主机之间的路径 M T U不一定是个常数。它取决于当时所选择的路由。而选路不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此路径M T U在两个方向上不一定是一致的。
10.串行线路吞吐量计算
如果线路速率是9600 b/s,而一个字节有8 bit,加上一个起始比特和一个停止比特,那么
线路的速率就是960 B/s(字节/秒)。以这个速率传输一个 1 0 2 4字节的分组需要1066 ms。如果用S L I P链接运行一个交互式应用程序,同时还运行另一个应用程序如 F T P发送或接收 1 0 2 4字节的数据,那么一般来说就必须等待一半的时间( 533 ms)才能把交互式应用程序的分组数据发送出去。
来源:TCP/IP卷一