链路层 ---《TCP/IP协议》卷一

第2章 链路层


2.1 引言

链路层主要有三个目的:

  • 为IP模块发送和接收IP数据报。
  • 为ARP模块发送ARP请求和接收ARP应答。
  • 为RARP发送RARP请求和接收RARP应答。

详细讨论:

  • 以太网链路层协议
  • 两个串行接口链路层协议(SLIP 和 PPP)
  • 环回(loopback)驱动程序
  • 以太网SLIP本书中大多数例子使用的链路层

2.2 以太网和IEEE802封装

以太网:它采用一种CSMA/CD(带冲突检测的载波监听多路接入机制),它的速率为10Mb/s,地址为48bit。

802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络;这三者的共同特性由802.2标准来定义,那就是802网络共有的逻辑链路控制(LLC)。(不幸的是,802(802.2和802.3)的封装格式与以太网的封装格式是不同)

以太网和IEEE 802的 RFC 要求每一台 Internet 主机都与一个 10Mb/s 的以太网电缆相连接

  • 必须能发送和接收采用 RFC 894(以太网) 封装格式的分组。
  • 应该能接收与 RFC 894 混合的 RFC 1042(IEEE802) 封装格式的分组。
  • 也许能够发送采用 RFC 1042 格式封装的分组。如果主机能同时发送两种类型的分组数据,那么发送的分组必须是可以设置的,而且默认条件下必须是RFC 894分组。

下面给出802.3和以太网封装格式:
这里写图片描述
(看完这个,表示懵逼了一会。802.3针对整个CSMA/CD网络了,为什么还会有以太网封装格式?答案很简单,802.3是以太网的标准封装格式。所以,我们可以将重心放在802.3封装格式上。)

802.3封装格式具体说明,特别详细


2.3 尾部封装(过时)

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

现在,尾部封装已遭到反对。


2.4 SLIP:串行线路IP

SLIP的全称是Serial Line IP。SLIP适用于家庭中,因为每台计算机机会都会有RS-232串行端口和高速调制解调器接入Internet。

SLIP报文封装:
这里写图片描述

SLIP 协议定义的帧格式:

  • IP数据报以一个称作 END(0xc0)的特殊字符结束。同时,为了防止数据报到来之前的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个 END 字符(如果有线路噪声,那么 END 字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
  • 如果 IP 报文中某个字符为 END,那么就要连续传输两个字节 0xdb 和 0xdc 来取代它。0xdb 这个特殊字符被称作 SLIP 的 ESC 字符,但是它的值与 ASCII 码的 ESC 字符(0x1b)不同。
  • 如果 IP 报文中某个字符为 SLIP 的 ESC 字符,那么就要连续传输两个字节 0xdb 和 0xdd 来
    取代它。

SLIP协议的缺陷:

  • 每一端必须知道对方的 IP 地址。没有办法把本端的 IP 地址通知给另一端。
  • 数据帧中没有类型字段(类似于以太网中的类型字段)。如果一条串行线路用于 SLIP,那么它不能同时使用其他协议。
  • SLIP 没有在数据帧中加上检验和(类似于以太网中的 CRC 字段)。如果 SLIP 传输的报文被线路噪声影响而发生错误,只能通过上层协议来发现(另一种方法是,新型的调制解调器可以检测并纠正错误报文)。这样,上层协议提供某种形式的 CRC 就显得很重要。

因此,随着调制解调器的速率和可靠性的提高,SLIP越来越流行。


2.5 压缩的SLIP

由于串行线路的速率比较低(19200b/s或更低),而且通信经常是交互式的,因此在SLIP线路上有许多小的TCP分组进行交换。为了传送1个字节的数据需要20个字节的IP首部和20个字节的TCP首部,总数超过40个字节。

认识到这些性能上的缺陷,人们提出一个被称作 CSLIP(即压缩SLIP) 的新协议,它在 RFC1144[Jacobson 1990a] 中被详细描述。CSLIP一般能把上面的40个字节压缩到3或5个字节,它能在CSLIP的每一端维持多达16个TCP连接,并且知道其中每个连接的首部中某些字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和改变。这些被压缩的首部大大缩短了交互响应时间。


2.6 PPP:点对点协议(支持IP等各种上层协议)

PPP,点对点协议修改了SLIP协议中的所有缺陷

  • 在串行链路上封装IP数据报的方法。PPP既支持数据为8位和无奇偶校验的异步模式,还支持面向比特的同步链接。
  • 建立、配置及测试数据链路的链路控制协议(LCP)。它允许通信双方进行协商,以确定不同的选项。
  • 针对不同网络层协议的网络控制协议(NCP)体系。当前RFC定义的网络层有IP、OSI网络层、DECnet以及AppleTalk。例如:IP NCP允许双方商定是否对报文首部进行压缩,类似于CSLIP(注:缩写词NCP也用来指TCP的前身)。

RFC 1548描述了报文封装的方法和链路控制协议。RFC 1332描述了针对IP的网络控制协议。

PPP 数据帧的格式看上去很像 ISO 的 HDLC(高层数据链路控制) 标准。

PPP数据帧格式:
这里写图片描述

  • 每一帧都以标志字符 0x7e 开始和结束。紧接着是一个地址字节,值始终是 0xff,然后是一个值为 0x03 的控制字节;
  • 协议字段;
  • CRC循环冗余校验码。

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

  • 当遇到字符 0x7e 时,需连续传送两个字符:0x7d 和 0x5e,以实现标志字符的转义;
  • 当遇到转义字符 0x7d 时,需连续传送两个字符:0x7d 和 0x5d,以实现转义字符的转义;
  • 默认情况下,如果字符的值小于 0x20(比如,一个 ASCII 控制字符),一般都要进行转义。

PPP 比 SLIP 具有下面这些优点:

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

这些优点付出的代价是在每一帧的首部增加3个字节,当建立链路时要发送几帧协商数据,以及更为复杂的实现。

PPP最终将会取代SLIP


2.7 环回接口

大多数的产品都支持环回接口(Loopback Interface),以允许运行在同一台主机上的客户程序和服务器程序通过 TCP/IP 进行通信。 A类网络号 127 就是为环回接口预留的。根据惯例,大多数系统把 IP 地址 127.0.0.1 分配给这个接口,并命名为 localhost 。一个传给环回接口的 IP 数据报不能在任何网络上出现

环回接口处理I P数据报的简单过程:
这里写图片描述
关键点:

  • 传给环回地址(一般是 127.0.0.1)的任何数据均作为 IP 输入;
  • 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是因为广播传送和多播传送的定义包含主机本身;
  • 任何传给该主机 IP 地址的数据均送到环回接口。

2.8 最大传输单元MTU

如果 IP 层有一个数据报要传,而且数据的长度比链路层的 MTU 还大,那么 IP 层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于 MTU 。

如图,几种常见的MTU:
这里写图片描述

正如我们看到的,所学的以太网和IEEE 802.3还有点对点的MTU都被列出。不难发现,MTU是指数据帧的数据部分的长度


2.9 路径MTU

当在同一个网络上的两台主机互相进行通信时,该网络的 MTU是非常重要的。但是如果两台主机之间的通信要通过多个网络,那么每个网络的链路层就可能有不同的 MTU。重要的不是两台主机所在网络的 MTU的值,重要的是两台通信主机路径中的最小 MTU。它被称作路径 MTU


2.10 串行线路吞吐量计算

如果线路速率是9600 b/s,而一个字节有 8 bit,加上一个起始比特和一个停止比特,那么线路的速率就是960 B/s(字节/秒)。


2.11 小结

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

练习

如果你的系统支持 netstat(1) 命令(参见 3.9 节),那么请用它确定系统上的接口及其 MTU 。netstat详解

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值