链路层

2.1 引言

链路层在TCP/IP协议族中主要有三个目的:
* 为IP模块发送和接收IP数据报
* 为ARP模块发送ARP请求和接收ARP应答
* 为RARP发送RARP请求和接收RARP应答
TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件。
主要讨论以太网链路层协议,两个串行接口链路层协议(SLIP和PPP)以及大多数实现都包含的环回(loopback)驱动程序

2.2以太网和IEEE 802封装

  • 以太网
  • IEEE(电子电气工程师协会)
    在TCP/IP世界中,以太网IP数据报的封装是在RFC 894[Horning 1984]中定义的,IEEE 802网络的IP数据报封装是在RFC 1042[Postel and Reynolds 1988]中定义的。主机需求RFC要求每台Internet主机都与一个10Mb/s的以太网电缆相连接:
    1)必须能发送和接收采用 RFC 894(以太网)封装格式的分组。
    2)应该能接收与RFC 894混合的RFC 1042(IEEE 802)封装格式的分组。
    3)也许能够发送采用 RFC 1042格式封装的分组。如果主机能同时发送两种类型的分组数
    据,那么发送的分组必须是可以设置的,而且默认条件下必须是 RFC 894分组。
    学习笔记:《TCP/IP详解 卷1》链路层

2.3 尾部封装

另一种用于以太网的封装格式。这是一个早期BSD系统在DECVAX机上运行时的试验格式,它通过调整IP数据报中字段的次序来提高性能。在以太网数据帧中,开始的那部分是变长的字段(IP首部和TCP首部)。把它们移到尾部(在CRC之前),这样当把数据复制到内核时,就可以把数据帧中的数据部分映射到一个硬件页面,节省内存到内存的复制过程。TCP数据报的长度是512字节的整数倍,正好可以用内核中的页表来处理。两台主机通过协商使用ARP扩展协议对数据帧进行尾部封装。这些数据帧需定义不同的以太网帧类型值。
现在,尾部封装已遭到反对。

2.4 SLIP:串行线路IP

它是一种在串行线路上对IP数据报进行封装的简单形式,在RFC1055[Romkey 1988]中有详细描述。 SLIP适用于家庭中每台计算机几乎都有的RS-232串行端口和高速调制解调器接入Internet。
下面的规则描述了SLIP协议定义的帧格式:
1 ) I P 数据报以一个称作END(0xc0)的特殊字符结束。同时,为了防止数据报到来之前的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个END字符(如果有线路噪声,那么END字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
2 ) 如果IP报文中某个字符为END,那么就要连续传输两个字节0xdb和0xdc来取代它。0xdb这个特殊字符被称作SLIP的ESC字符但是它的值与ASCII码的ESC字符(0x1b)不同。
3) 如果IP报文中某个字符为SLIP的ESC字符,那么就要连续传输两个字节0xdb和0xdd来取代它。
学习笔记:《TCP/IP详解 卷1》链路层
SLIP是一种简单的帧封装方法,还有一些值得一提的缺陷:
1) 每一端必须知道对方的IP地址。没有办法把本端的IP地址通知给另一端。
2) 数据帧中没有类型字段(类似于以太网中的类型字段)。如果一条串行线路用于SLIP,那么它不能同时使用其他协议。
3 ) SLIP没有在数据帧中加上检验(类似于以太网中的CRC字段)。如果SLIP传输的报文被线路噪声影响而发生错误,只能通过上层协议来发现(另一种方法是,新型的调制解调器可以检测并纠正错误报文)

2.5 压缩的SLIP(CSLIP)

CSLIP一般能把上面的40个字节压缩到3或5个字节。它能在CSLIP的每一端维持多达16个TCP连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。这些被压缩的首部大大地缩短了交互响应时间。

2.6 PPP:点对点协议

P P P ,点对点协议修改了 S L I P 协议中的所有缺陷。 P P P 包括以下三个部分:
1 ) 在串行链路上封装 I P 数据报的方法。 P P P 既支持数据为 8 位 和 无 奇 偶 检 验 的 异 步 模 式 (如大多数计算机上都普遍存在的串行接口),还支持面向比特的同步链接。
2) 建立、配置及测试数据链路的链路控制协议( L C P : L i n k C o n t r o l P r o t o c o l )。它允许通 信双方进行协商,以确定不同的选项。
3) 针对不同网络层协议的网络控制协议( N C P : N e t w o r k C o n t r o l P r o t o c o l )体系。当前 RFC定义的网络层有IP、OSI网络层、DECnet以及AppleTalk。例如,IP NCP允许双方商定是 否对报文首部进行压缩,类似于 C S L I P (缩写词 N C P 也可用在 T C P 的前面)。
学习笔记:《TCP/IP详解 卷1》链路层
总的来说,PPP比SLIP具有下面这些优点:
(1) PPP支持在单根串行线路上运行多种协议,不只是IP协议;
(2) 每一帧都有循环冗余检验;
(3) 通信双方可以进行IP地址的动态协商(使用IP网络控制协议);
(4) 与CSLIP类似,对TCP和IP报文首部进行压缩;
(5) 链路控制协议可以对多个数据链路选项进行设置。为这些优点付出的代价是在每一帧的首部增加 3个字节,当建立链路时要发送几帧协商数据,以及更为复杂的实现。

2.7 环回接口

学习笔记:《TCP/IP详解 卷1》链路层
图中需要指出的关键点是:
1) 传给环回地址(一般是127.0.0.1)的任何数据均作为IP输入。
2) 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是
因为广播传送和多播传送的定义包含主机本身。
3 ) 任何传给该主机IP地址的数据均送到环回接口。

2.8 最大传输单元MTU

不同网络对数据帧的长度的限度。

网络 MTU字节
超通道 65535
16Mb/s令牌环(IBM) 17914
4Mb/s令牌环(IEEE 802.5) 4464
FDDI 4352
以太网 1500
IEEE 802.3/802.2 1492
X.25 576
点对点(低时延) 297

2.9 路径MTU

当在同一个网络上的两台主机互相进行通信时,该网络的MTU是非常重要的。但是如果两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的MTU。重要的不是两台主机所在网络的MTU的值,重要的是两台通信主机路径中的最小MTU。它被称作路径MTU。
两台主机之间的路径MTU**不一定是个常数**。它取决于当时所选择的路由。而选路不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此路径MTU在两个方向上不一定是一致的。

2.10 串行线路吞吐量计算

2.11 小结

本章讨论了Internet协议族中的最底层协议,链路层协议。我们比较了以太网和IEEE 802.2/802.3的封装格式,以及SLIP和PPP的封装格式。由于SLIP和PPP经常用于低速的链路,二者都提供了压缩不常变化的公共字段的方法。这使交互性能得到提高。
大多数的实现都提供环回接口。访问这个接口可以通过特殊的环回地址,一般为127.0.0.1。也可以通过发送IP数据报给主机所拥有的任一IP地址。当环回数据回到上层的协议栈中时,它已经过传输层和IP层完整的处理过程。
我们描述了很多链路都具有的一个重要特性,MTU,相关的一个概念是路径MTU。根据典型的串行线路MTU,对SLIP和CSLIP链路的传输时延进行了计算。
本章的内容只覆盖了当今TCP/IP所采用的部分数据链路公共技术。TCP/IP成功的原因之一是它几乎能在任何数据链路技术上运行。

相关文章: