简介

在TCP/IP协议族中,链路层主要有三个目的:

  1. 为IP模块发送和接收IP数据报;
  2. 为ARP模块发送ARP请求和接收ARP应答;
  3. 为RARP发送RARP请求和接收RARP应答。

TCP/IP协议族支持多种不同的链路层协议,包括以太网、令牌环网、FDDI以及RS-232串行线路等。

数据报的封装

RFC 894 格式

以太网一般指数字设备公司、英特尔公司和Xerox公司在1982年公布的一个标准。在TCP/IP世界中,以太网IP数据报的封装是在RFC 894中定义的,这也是最常使用的封装格式,如图。

Image.png

其中,6个字节的目的地址和6个字节的源地址都属于我们所说的硬件地址;类型字段则定义了后续数据的类型;CRC字段用于帧内后续字节差错的循环冗余码检验(检验和)。另外由于以太网的帧有最小长度要求,需要至少46字节。为了保证这一点,在数据不足的情况下需要插入填充(PAD)字节。

RFC 893 格式(尾部封装)

这是另一种用于以太网的封装格式。它是一个早期BSD系统在DEC VAX机上运行时的试验格式,通过调整IP数据报中字段的次序来提高性能。现在尾部封装遭到反对,很少使用。

SLIP(串行线路IP)封装

SLIP的全称是Serial Line IP,它是一种在串行线路上对IP数据报进行封装的简单形式,适用于家庭中每台计算机几乎都有的RS-232串行端口和高速调制解调器接入Internet。

Image.png

SLIP协议定义的帧格式有以下几个特点:

  1. 为了防止线路噪声被当成数据报内容,数据报开头会传一个END字符,并且数据报也以END字符结束。
  2. 如果IP报文中某个字符为END,那么需要连续传输两个字节0xdb和0xdc来取代它。
  3. 如果IP报文中某个字符为SLIP的ESC字符,那么需要连续传输两个字节0xdb和0xdd来取代它。

以及SLIP封装的缺点有:

  1. 每一端都必须知道对方的IP地址。没办法把本端的IP地址通知给另一端。
  2. 数据帧中没有类型字段,也就是说如果一条串行线路用于SLIP,那么它不能同时使用其他协议。
  3. SLIP的数据帧中没有检验和,如果传输的报文发生错误,只能通过上层协议体现(另外,现在的新型调制解调器可以检测并纠正错误报文)。

CSLIP封装(压缩的SLIP)

由于串行线路的速率通常比较低,并且通信经常是交互式(如Telnet和Rlogin,二者都使用TCP),因此在SLIP线路上有许多小的TCP分组进行交换。传输1个字节的数据需要20个字节的IP首部和20个字节的TCP首部,总数超过40个字节。

因为这些性能上的缺陷,人们提出了被称作CSLIP(即压缩SLIP)的新协议。CSLIP能将上述的40个字节压缩到3或5个字节。现在大多数产品都支持SLIP。

点对点协议(PPP)

点对点协议修改了SLIP协议中的所有缺陷,比如说支持8数据为8位和无奇偶检验的异步模式,也支持面向比特的同步连接,还允许通信双方进行商定是否对报文首部进行压缩(类似于CSLIP)。

Image.png

PPP中的每一帧都以标志字符0x7e开始和结束。标志字符后面是地址字节,值始终是0xff,然后是值为0x03的控制字节。协议字段则类似于以太网中类型字段的功能,不同的取值可以表示信息字段是IP数据报还是链路控制数据还是网络控制数据等。

总结一下,PPP比SLIP拥有以下优点:

  1. PPP支持在单根串行线路上运行多种协议。
  2. 每一帧都有循环冗余校验。
  3. 通信双方可以进行IP地址的动态协商(使用IP网络控制协议时)。
  4. 可以对TCP和IP报文首部进行压缩(类似于CSLIP)。
  5. 链路控制协议可以对多个数据链路选项进行设置。

环回接口

环回接口(Loopback Interface)是一种虚拟接口,任何送到该接口的网络数据报文都会被认为是送往设备本身。大多数设备都支持环回接口,以便允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类网络号127就是为环回接口预留的。根据惯例,大多数系统会把IP地址127.0.0.1分配给环回接口,并命名为localhost。下图是环回接口处理IP数据包的简单过程。

Image.png

环回接口可以被看作是网络层下面的另一个链路层,网络层把一份数据报传送给环回接口,就像传给其他链路层一样,只不过环回接口把它返回到IP的输入队列中。

4.4BSD系统定义了变量useloopback,默认值为1,如果这个变量置0,以太网驱动程序会把本地分组送到网络上而不是送到环回接口上。

最大传输单元MTU

以太网和802.3(IEEE802委员会公布的针对整个CSMA/CD网络的标准集)都对数据帧的长度有一个闲置,分别是1500字节和1492字节。链路层的特性被称作MTU,最大传输单元。如果IP层需要传输的数据报的大小超过MTU,那么IP层需要对其进行分片。图中是几种常见的最大传输单元。

Image.png

路径MTU

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

总结

本章讨论了最底层的协议——链路层协议。另外还比较了以太网和SLIP、PPP的封装格式。由于SLIP和PPP经常用于低速链路,二者都提供了压缩补偿变化的公共字段的方法使交互性能得到提高。最后还讨论了环回接口和MTU这两个重要概念。