TCP/IP 笔记 1.2 链 路 层
都是包含三种类型。根据类型字段的值来进行区分
2.4 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) 每一端必须知道对方的 I P地址。没有办法把本端的 I P地址通知给另一端。
2) 数据帧中没有类型字段(类似于以太网中的类型字段)。如果一条串行线路用于 S L I P,那么它不能同时使用其他协议。
3 ) S L I P没有在数据帧中加上检验和(类似于以太网中的 C R C字段)。如果 S L I P传输的报文被线路噪声影响而发生错误,只能通过上层协议来发现(另一种方法是,新型的调制解调器可以检测并纠正错误报文)。这样,上层协议提供某种形式的 C R C就显得很重要。 I P首部和 T C P首部及其数据始终都有检验和。U D P首部及其数据的检验和却是可选的。
尽管存在这些缺点, S L I P仍然是一种广泛使用的协议。
2.5 压缩的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连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。这些被压缩的首部大大地缩短了交互响应时间。
2.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[McGregor1 9 9 2 ]描述了针对 I P的网络控制协议。
P P P数据帧的格式看上去很像 I S O的H D L C(高层数据链路控制)标准。图 2 - 3是P P P数据帧的格式。
(1)每一帧都以标志字符 0 x 7 e开始和结束。紧接着是一个地址字节,值始终是 0 x ff,然后是一个值为0 x 0 3的控制字节。
(2)接下来是协议字段,类似于以太网中类型字段的功能。当它的值为 0 x 0 0 2 1时,表示信息字段是一个 I P数据报;值为 0 x c 0 2 1时,表示信息字段是链路控制数据;值为 0 x 8 0 2 1时,表示信息字段是网络控制数据。
(3)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 m1 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控制字符),一般都要进行转义。例如,遇到字符 0 x 0 1时需连续传送 0 x 7 d和0 x 2 1两个字符(这时,第 6个比特取补码后变为1,而前面两种情况均把它变为 0)。
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个字节,当建立链路时要发送几帧协商数据,以及更为复杂的实现。
2.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层的方法来处理环回数据似乎效率不高,但它简化了设计,因为环回接口可以被看作是网络层下面的另一个链路层。
大多数的实现都提供环回接口。访问这个接口可以通过特殊的环回地址,一般为1 2 7 . 0 . 0 . 1。也可以通过发送 I P数据报给主机所拥有的任一 I P地址。当环回数据回到上层的协议栈中时,它已经过传输层和 I P层完整的处理过程。
2.8 最大传输单元MTU
以太网和 8 0 2 . 3对数据帧的长度都有一个限制,其最大值分别是1 5 0 0和1 4 9 2字节。链路层的这个特性称作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。
2.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在两个方向上不一定是一致的。