TCP/IP详解 卷一 链路层
发表于:2025-10-02 | 分类: 学习
链路层

以太网和IEEE 802封装

​ 以太网是当今TCP/IP采用的主要局域网技术。采用CSMA/CD的媒体接入方法(带冲突检测的载波侦听多路接入(Carrier Sense, Multiple Access with Collision Detection))。它的速率为10 Mb/s,地址为48 bit。IEEE(电子电气工程师协会)802委员会则公布了一个稍有不同的标准集,其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络, 802.5针对令牌环网络。这三者的共同特性由802.2标准来定义,那就是 802网络共有的逻辑链路控制( LLC)。不过802.2和802.3定义了一个予以太网不同的帧格式。

主机需求RFC要求每台internet主机都与一个10Mb/s的以太网电缆相连接:

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

下图展示了IEEE 802.2/802.3(RFC 1042)和以太网的封装格式(RFC 894)两种不同的封装格式

两种帧格式都采用48bit(6字节)的目的地址和源地址(802.3允许使用16bit地址但一般是48bit地址)。也就是硬件地址。ARP和RARP协议对32bit的IP地址和48bit的硬件地址进行映射。

接下来的2个字节在两种帧格式中互不相同。在 802标准定义的帧格式中,长度字段是指它后续数据的字节长度,但不包括 CRC检验码。以太网的类型字段定义了后续数据的类型。

在以太网帧格式中,类型字段之后就是数据;而在 802帧格式中,跟随在后面的是 3字节的802.2 LLC和5字节的802.2 SNAP。

CRC字段用于帧内后续字节差错的循环冗余码检验(检验和)

802.3标准定义的帧和以太网的帧都有最小长度要求。 802.3规定数据部分必须至少为 38字节,而对于以太网,则要求最少要有 46字节。

SLIP:串行线路IP

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

下面的规则描述了SLIP协议定义的帧格式:

  1. IP数据报以一个称作 END(0xc0)的特殊字符结束。同时为了保证数据的正确,大多数实现在数据报的开始处也传一个END字符。
  2. 如果 IP报文中某个字符为 END,那么就要连续传输两个字节 0xdb和0xdc来取代它。
  3. 如果IP报文中某个字符为 SLIP的ESC字符,那么就要连续传输两个字节 0xdb和0xdd来取代它。

下图就是一个END和一个ESC字符的IP报文:

SLIP作为一种简单的帧封装方法,有以下缺陷:

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

压缩的SLIP

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

由于有以上缺陷,于是人们提出一个被称作 CSLIP(即压缩 SLIP)的新协议。CSLIP一般能把上面的40字节压缩到3或5字节。能在每一端维持多达16个TCP连接。

PPP:点对点协议

PPP修改了SLIP的所有缺陷,包含以下三个部分:

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

下图是PPP的数据帧的格式:

每一帧都以标志字符 0x7e开始和结束。紧接着是一个地址字节,值始终是 0xff,然后是一个值为0x03的控制字节。

接下来是协议字段,类似于以太网中类型字段的功能。0x0021表示信息是一个IP数据报,0xc021表示信息是一个链路控制数据,0x8021表示信息是一个网络控制数据

CRC字段(或FCS,帧检验序列)是一个循环冗余检验码,以检测数据帧中的错误

PPP需要对标志字符0x7e进行转义,具体过程如下:

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

这样做的原因是防止它们出现在双方主机的串行接口驱动程序或调制解调器中,因为有时它们会把这些控制字符解释成特殊的含义。

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

(1) PPP支持在单根串行线路上运行多种协议,不只是IP协议;

(2) 每一帧都有循环冗余检验;

(3) 通信双方可以进行 IP地址的动态协商(使用IP网络控制协议);

(4) 与CSLIP类似,对TCP和IP报文首部进行压缩;

(5) 链路控制协议可以对多个数据链路选项进行设置。

为这些优点付出的代价是在每一帧的首部增加 3个字节

环回接口

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

下图是环回接口处理IP数据报的简单过程:

从图中可看出:

  1. 传给环回地址的任何数据均作为IP输入。
  2. 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。
  3. 任何传给该主机IP地址的数据均送到环回接口。

最大传输单元MTU

以太网和802.3对数据帧长度都有一个限制,最大值分别是1500和1492字节。链路层的这个特性称作MTU,最大传输单元。不同类型的网络大多数都有一个上限。

如果ip层传输的一个数据报数据的长度比链路层的MTU还大,IP层就会对数据报进行分片。

路径MTU

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

两台主机之间的路径 MTU不一定是个常数。它取决于当时所选择的路由。

串行线路吞吐量计算

如果线路速率是9600b/s,而一个字节有8bit,加上一个起始比特和一个停止比特,那么线路的速率就是960B/s(字节/秒)。以这个速率传输一个1024字节的分组需要1066ms。

上一篇:
TCP/IP详解 卷一 网际协议
下一篇:
TCP/IP详解 卷一 概述