TCP/IP 协议详解 第2章 链路层

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

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

以太网和IEEE 802封装

以太网这个术语一般是指DEC、Intel、Xeror公司在1982年联合发布的一个标准,它是当今TCP/IP采用的主要的局域网技术,以太网IP数据报的封装在RFC894中定义,地址是48bit。

IEEE 802 是IEEE(电子电气工程师协会)802委员会公布的一个稍有不同的标准集,其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络。

最常用的封装格式是RFC894。

IEEE 802.2/802.3(RFC-1042)和以太网封装格式(RFC-894) (方框下的数字表示占用的字节数):
ieee802和以太网帧封装格式

  • 两种帧格式都采用48bit的地址,称为硬件地址。ARP和RARP协议用于对32bit的IP地址和48bit的硬件地址进行映射。
  • 802标准的长度指后续数据的字节长度,但不包括CRC校验码;以太网的类型字段定义了后续数据的类型。802定义的有效长度值与以太网的有效类型值无一相同,这样就可以对两种帧格式进行区分。
  • 在以太网帧格式中,类型字段之后就是数据;而在802帧格式中,跟随在后面的是3字节的802.2 LLC和5字节的802.2 SNAP。目的服务访问点(Destination Service Access Point, DSAP)和源服务访问点(Source Service Access Point,SSAP)的值都设为0xaa。Ctrl字段的值设为3.随后的3个自己org code都置为0。再接下来的2个字节类型字段和以太网帧格式一样。
  • CRC字段用于帧内后续字节差错的循环冗余码校验(校验和)(它也称为FCS或帧校验序列)。
  • 802.3标准定义的帧和以太网的帧都有最小长度要求。802.3标准要求至少38字节,以太网要求至少48字节。如果空间不足,则需要填充字节。

SLIP,串行线路IP

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

SLIP协议定义帧格式的规则:

  1. IP数据报以一个称作END(0xc0)的特殊字符结束。大多数实现在数据报的开始处传一个END字符。
  2. 如果IP报文中某个字符为END,那么就要连续传输两个字节0xdb0xdc来取代它。0xdb被称作SLIP的ESC字符(转义字符),它的值与ASCII码的ESC字符(0x1b,这是物理按键的值,前者是协议定义的逻辑转义字符)不同。
  3. 如果IP报文中某个字符为SLIP的ESC字符,那么就要连续传输两个字节的0xdb0xdd来取代它。

SLIP报文封装图解:
SLIP报文封装

SLIP的一些缺陷:

  1. 每一端必须知道对方的IP地址,没有办法把本端的IP地址通知给另一端。
  2. 数据帧中没有类型字段。如果一条串行线路用于SLIP,那么它不能同时使用其他协议。
  3. SLIP没有在数据帧中加上校验和。只能通过上层协议发现出错的报文。

压缩的SLIP

由于串行线路的速率通常较低,而且通信经常是交互式的,因此在SLIP线路上有许多小的TCP分组进行交换。

CSLIP(即压缩SLIP)压缩了大多数的IP和TCP首部,因此更高效。

PPP:点对点协议

PPP,点对点协议修改了SLIP协议中的所有缺陷。包括以下三个部分:

  1. 在串行链路上封装IP数据报的方法。PPP既支持数据为8位和无奇偶校验的异步模式,还支持面向比特的同步链接。
  2. 建立、配置以及测试数据链路的链路控制协议(LCP,Link Control Protocol)。允许通信双方进行协商,以确定不同的选项。
  3. 针对不同网络层协议的网络控制协议(NCP,Network Control Protocol)体系。

PPP帧格式

PPP帧格式

每一帧都以标志字符0x7e开始和结束,紧接着是一个地址字节,值始终是0xff,然后是一个值为0x03的控制字节。
协议字段类似于以太网中类型的功能。
CRC字段(或FCS,帧校验序列)是一个循环冗余校验码,以检测数据帧中的错误。

由于标志字符的值是0x7e,因此当该字符出现在信息字段中时,PPP需要对它进行转义。
在同步链路中,该过程是通过一种称作比特填充(bit stuffing)的硬件技术来完成的。
在异步链路中,特殊字符0x7d用作转义字符。当它出现在PPP数据帧中时,那么紧接着的字符的第6个比特要取其补码,具体实现过程如下:

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

环回接口,Loopback Interface

环回接口允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类网络号 127 就是为环回接口预留的。

大多数系统把IP地址 127.0.0.1 分配给这个接口,并命名为 localhost。一个传给环回接口的IP数据报不能在任何网络上出现。大多数产品照样完成传输层和网络层的所有过程,只是当IP数据报离开网络层时把它返回给自己。

环回接口数据报处理过程:
环回接口数据报处理过程

上图有3个关键点:

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

用传输层和IP侧过的方法来处理环回数据简化了设计,环回接口可以被看作是网络层下面的另一个链路层。网络层把一份数据报传送给环回接口,就像传给其他链路层一样,只不过环回接口把它返回到IP的输入队列中。

最大传输单元MTU

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

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

路径MTU

当两台主机之间的通信要通过多个网络,这两台通信主机路径中的最小MTU就称作路径MTU。

两台主机之间的路径MTU不一定是个常数,它取决于当时所选择的路由。而选路不一定是对称的,因此路径MTU在两个方向上不一定是一致的。


欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据