首页 > 代码库 > TCP/IP详解之链路层

TCP/IP详解之链路层

一 链路层主要有三个目的:

(1)为I P模块发送和接收I P数据报;(2)为A R P模块发送A R P请求和接收A R P应答;(3)为R A R P发送R A R P请求和接收R A R P应答。

二 以太网和IEEE 802封装

以太网:采用一种称作 C S M A / C D的媒体接入方法,其意思是带冲突检测的载波侦听多路接入(Carrier Sense, Multiple Access with Collision Detection)。它的速率为10 Mb/s,地址为48 bit。

在T C P / I P世界中,以太网I P数据报的封装是在RFC 894[Hornig 1984]中定义的,IEEE 802
网络的I P数据报封装是在RFC 1042[Postel and Reynolds 1988]中定义的。主机需求R F C要求每
台I n t e r n e t主机都与一个10 Mb/s的以太网电缆相连接:
1) 必须能发送和接收采用RFC 894(以太网)封装格式的分组。
2) 应该能接收与RFC 894混合的RFC 1042(IEEE 802)封装格式的分组。
3) 也许能够发送采用RFC 1042格式封装的分组。如果主机能同时发送两种类型的分组数
据,那么发送的分组必须是可以设置的,而且默认条件下必须是 RFC 894分组

最常使用的封装格式是 RFC 894定义的格式:


RFC 1024定义的格式:


8 0 2 . 3标准定义的帧和以太网的帧都有最小长度要求。 8 0 2 . 3规定数据部分必须至少为3 8字节,而对于以太网,则要求最少要有 4 6字节。为了保证这一点,必须在不足的空间插入填充(p a d)字节。在开始观察线路上的分组时将遇到这种最小长度的情况。

RFC 893[Leffler and Karels 1984]描述了另一种用于以太网的封装格式,称作尾部封装(trailer encapsulation)。这是一个早期B S D系统在DEC VA X机上运行时的试验格式,它通过调整I P数据报中字段的次序来提高性能。

 SLIP串行线路IP  :

S L I P的全称是Serial Line IP。它是一种在串行线路上对I P数据报进行封装的简单形式,在RFC 1055[Romkey 1988]中有详细描述。S L I P适用于家庭中每台计算机几乎都有的 R S - 2 3 2串行端口和高速调制解调器接入I n t e r n e t。

下面的规则描述了S L I P协议定义的帧格式:

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:S L I P线路上有许多小的T C P分组交换。为了传送1个字节的数据需要2 0个字节的I P首部和2 0个字节的T C P首部,总数超过4 0个字节这就是SLIP性能上的缺陷,于是人们提出一个被称作 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连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。这些被压缩的首部大大地缩短了交互响应时间。

四 PPP:点对点协议(经常用于低速串行链路)

ppp协议包含以下三个方面:

1) 在串行链路上封装 I P数据报的方法。 P P P既支持数据为 8位和无奇偶检验的异步模式(如大多数计算机上都普遍存在的串行接口),还支持面向比特的同步链接。

1) 在串行链路上封装 I P数据报的方法。 P P P既支持数据为 8位和无奇偶检验的异步模式(如大多数计算机上都普遍存在的串行接口),还支持面向比特的同步链接。

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的前面)。

P P P数据帧的格式:



由于标志字符的值是 0 x 7 e,因此当该字符出现在信息字段中时, P P P需要对它进行转义。

在同步链路中ppp通过比特填充方式解决在伊布链路中通过特殊转义字符0x7d解决,当它出现在 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控制字符),一般都要进行转义。例如,遇到字符0 x 0 1时需连续传送0 x 7 d和0 x 2 1两个字符(这时,第6个比特取补码后变为,而前面两种情况均把它变为0)。

ppp的压缩:大多数的产品通过协商可以省略标志符和地址字段,并且把协议字段由 2个字节减少到1个字节。大多数的产品可以通过协商采用 Van Jacobson报文首部压缩方法(对应于C S L I P压缩),减小I P和T C P首部长度。

总的来说,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个字节,当建
立链路时要发送几帧协商数据,以及更为复杂的实现。

SLIP用户要比ppp用户多虽然优点比较多,但未来ppp用户会超过SLIP

五 环回接口

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数据报的简单过程:


大多数产品照样完成传输层和网络层的所有过程只是当ip数据报离开网络层时把它返回给自己

图中需要指出的关键点是:
1) 传给环回地址(一般是1 2 7 . 0 . 0 . 1)的任何数据均作为I P输入。
2) 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是因为广播传送和多播传送的定义(第 1 2章)包含主机本身。
3 ) 任何传给该主机I P地址的数据均送到环回接口。

图中另一个隐含的意思是送给主机本身 I P地址的I P数据报一般不出现在相应的网
络上。例如,在一个以太网上,分组一般不被传出去然后读回来。

六 最大传输单元MTU

以太网要求数据帧格式长度不超过1500字节802.3协议要求1492字节链路层的这个特性称作M T U,最大传输单元

如果I P层有一个数据报要传,而且数据的长度比链路层的 M T U还大,那么I P层就需要进行分片( f r a g m e n t a t i o n),把数据报分成若干片,这样每一片都小于 M T U

常见的几种最大传输单元:


七 路径MTU

概念:不是两台主机所在网络的 M T U的值,而是两台通信主机路径中的最小 M T U

两台主机之间的路径 M T U不一定是个常数。它取决于当时所选择的路由。而选路不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此路径M T U在两个方向上不一定是一致的。

八 串行线路吞吐量的计算

如果线路速率是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)才能把交互式应用程序的分组数据发送出去。假定交互分组数据可以在其他“大块”分组数据发送之前被发送出去。大多数的 S L I P实现确实提供这类服务排队方法,把交互数据放在大块的数据前面。交互通信一般有Te l n e t、R l o g i n以及F T P的控制部分(用户的命令,而不是数据)。

把S L I P的M T U缩短到2 5 6就意味着链路传输一帧最长需要 266 ms,它的一半是 133 ms这是一般需要等待的时间)。这样情况会好一些,但仍然不完美。我们选择它的原因(与 6 4或1 2 8相比)是因为大块数据提供良好的线路利用率(如大文件传输)。假设C S L I P的报文首部是5个字节,数据帧总长为 2 6 1个字节,2 5 6个字节的数据使线路的利用率为 9 8 . 1 %,帧头占了1 . 9 %,这样的利用率是很不错的。如果把 M T U降到2 5 6下,那么将降低传输大块数据的最大吞吐量。

我们对平均等待时间的计算(传输最大数据帧所需时间的一半)只适用于 S L I P链路(或P P P链路)在交互通信和大块数据传输这两种情况下。当只有交互通信时,如果线路速率是9600 b/s,那么任何方向上的 1字节数据(假设有 5个字节的压缩帧头)往返一次都大约需要12.5 ms。它比前面提到的100~200 ms要小得多。需要注意的是,由于帧头从 4 0个字节压缩到5个字节,使得1字节数据往返时间从85 ms减到12.5 ms。

数据进入协议栈的分装过程:


TCP/IP详解之链路层