TCP/IP详解,卷1:协议--链 路 层

引言

在 T C P / I P 协议族中,链路层主要有三个目的:(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 应答。T C P / I P 支持多种不同的链路层协议,这取决于网络所使用的硬件,如以
太网、令牌环网、F D D I(光纤分布式数据接口)及 R S-2 3 2 串行线路等。

我们将详细讨论以太网链路层协议,两个串行接口链路层协议( S L I P 和 P P P),
以及大多数实现都包含的环回( l o o p b a c k)驱动程序。以太网和 S L I P 是本书中大多数例子使
用的链路层。对 M T U(最大传输单元)进行了介绍,这个概念在本书的后面章节中将多次遇
到。

以太网和 IEEE 802 封装

以太网这个术语一般是指数字设备公司( Digital Equipment Corp.)、英特尔公司(I n t e l
C o r p .)和 X e r o x 公司在 1 9 8 2 年联合公布的一个标准。它是当今 T C P / I P 采用的主要的局域网技
术。它采用一种称作 C S M A / C D 的媒体接入方法,其意思是带冲突检测的载波侦听多路接入
(Carrier Sense, Multiple Access with Collision Detection)。它的速率为 10 Mb/s,地址为 48 bit。
几年后,I E E E(电子电气工程师协会) 8 0 2 委员会公布了一个稍有不同的标准集,其中
8 0 2 . 3 针对整个 C S M A / C D 网络,8 0 2 . 4 针对令牌总线网络,8 0 2 . 5 针对令牌环网络。这三者的共
同特性由 8 0 2 . 2 标准来定义,那就是 8 0 2 网络共有的逻辑链路控制( L L C)。不幸的是,8 0 2 . 2 和
8 0 2 . 3 定义了一个与以太网不同的帧格式。文献 [Stallings 1987]对所有的 IEEE 802 标准进行了
详细的介绍。

在以太网帧格式中,类型字段之后就是数据;而在 8 0 2 帧格式中,跟随在后面的是 3 字节
的 802.2 LLC 和 5 字节的 802.2 SNAP。目的服务访问点( Destination Service Access Point,
D S A P)和源服务访问点(Source Service Access Point, SSAP)的值都设为 0 x a a。Ct r l 字段的
值设为 3。随后的 3 个字节 o rg code 都置为 0。再接下来的 2 个字节类型字段和以太网帧格式一样
(其他类型字段值可以参见 RFC 1340 [Reynolds and Postel 1992])。
C R C 字段用于帧内后续字节差错的循环冗余码检验(检验和)(它也被称为 F C S 或帧检验
序列)。
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 数据报中字段的次序来提高性能。在以太网数据帧中,开始的那部分是变长的字段
(I P 首部和 T C P 首部)。把它们移到尾部(在 C R C 之前),这样当把数据复制到内核时,就可以
把数据帧中的数据部分映射到一个硬件页面,节省内存到内存的复制过程。 T C P 数据报的长
度是 5 1 2 字节的整数倍,正好可以用内核中的页表来处理。两台主机通过协商使用 A R P 扩展协
议对数据帧进行尾部封装。这些数据帧需定义不同的以太网帧类型值。
现在,尾部封装已遭到反对,因此我们不对它举任何例子。有兴趣的读者请参阅 RFC 893
以及文献[ L e ffler et al. 1989]的 11 . 8 节。

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 来
    取代它。
    图 2 - 2 中的例子就是含有一个 E N D 字符和一个 E S C 字符的 I P 报文。在这个例子中,在串行
    线路上传输的总字节数是原 I P 报文长度再加 4 个字节。

S L I P 的历史要追溯到 1 9 8 4 年,Rick Adams 第一次在 4 . 2 B S D 系统中实现。尽管它本
身的描述是一种非标准的协议,但是随着调制解调器的速率和可靠性的提高, S L I P 越
来越流行。现在,它的许多产品可以公开获得,而且很多厂家都支持这种协议

压缩的 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。作者所在的子网(参见封面内页)中有两条
SLIP 链路,它们均是 CSLIP 链路。

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

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 个字节,当建
立链路时要发送几帧协商数据,以及更为复杂的实现。
尽管 P P P 比 S L I P 有更多的优点,但是现在的 S L I P 用户仍然比 P P P 用户多。随着产品
越来越多,产家也开始逐渐支持 PPP,因此最终 PPP 应该取代 SLIP

环回接口

大多数的产品都支持环回接口( 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 数据报离开网络层时把它返回给自己。
图 2 - 4 是环回接口处理 I P 数据报的简单过程

图中需要指出的关键点是:

  1. 传给环回地址(一般是 1 2 7 . 0 . 0 . 1)的任何数据均作为 I P 输入。
  2. 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是
    因为广播传送和多播传送的定义(第 1 2 章)包含主机本身。
    3 ) 任何传给该主机 I P 地址的数据均送到环回接口。
    看上去用传输层和 I P 层的方法来处理环回数据似乎效率不高,但它简化了设计,因为环
    回接口可以被看作是网络层下面的另一个链路层。网络层把一份数据报传送给环回接口,就
    像传给其他链路层一样,只不过环回接口把它返回到 I P 的输入队列中。

最大传输单元 MTU

路径 MTU

当在同一个网络上的两台主机互相进行通信时,该网络的 M T U 是非常重要的。但是如果
两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的 M T U。重要的
不是两台主机所在网络的 M T U 的值,重要的是两台通信主机路径中的最小 M T U。它被称作路
径 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 的控制部分(用户的命令,而不是数据)。
这种服务排队方法是不完善的。它不能影响已经进入下游(如串行驱动程序)队
列的非交互数据。同时,新型的调制解调器具有很大的缓冲区,因此非交互数据可能
已经进入该缓冲区了。
对于交互应用来说,等待 533 ms 是不能接受的。关于人的有关研究表明,交互响应时间
超过 1 0 0 ~ 200 ms 就被认为是不好的 [Jacobson 1990a]。这是发送一份交互报文出去后,直到
接收到响应信息(通常是出现一个回显字符)为止的往返时间。
不幸的是,当使用新型的纠错和压缩调制解调器时,这样的计算就更难了。这些调制解
调器所采用的压缩方法使得在线路上传输的字节数大大减少,但纠错机制又会增加传输的时
间。不过,这些计算是我们进行合理决策的入口点。

小结

这讨论了 I n t e r n e t 协议族中的最底层协议,链路层协议。我们比较了以太网和 I E E E
8 0 2 . 2 / 8 0 2 . 3 的封装格式,以及 S L I P 和 P P P 的封装格式。由于 S L I P 和 P P P 经常用于低速的链路,
二者都提供了压缩不常变化的公共字段的方法。这使交互性能得到提高。
大多数的实现都提供环回接口。访问这个接口可以通过特殊的环回地址,一般为
1 2 7 . 0 . 0 . 1。也可以通过发送 I P 数据报给主机所拥有的任一 I P 地址。当环回数据回到上层的协议
栈中时,它已经过传输层和 I P 层完整的处理过程。

我们描述了很多链路都具有的一个重要特性, M T U,相关的一个概念是路径 M T U。根据
典型的串行线路 M T U,对 S L I P 和 C S L I P 链路的传输时延进行了计算。
这的内容只覆盖了当今 T C P / I P 所采用的部分数据链路公共技术。 T C P / I P 成功的原因之
一是它几乎能在任何数据链路技术上运行。

猜你喜欢

转载自www.cnblogs.com/ygjzs/p/12202844.html