《TCP/IP详解:卷一》第2章:链路层

引言

链路层的三个目的:

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

TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网,令牌环网,FDDI(光纤分布式数据接口)及RS-232串行线路等。

本章详细的讨论了以太网链路层协议,两个串行接口链路层协议(SLIP和PPP)。大多数实现都包含的环回驱动程序。还讲了MTU(最大传输单元)。如何为串行线路选择MTU。

以太网和IEEE 802封装

以太网,1982年公布的一个标准,当今TCP/IP采用的主要的局域网技术。采用CSMA/CD的媒体接入方法,意思是带冲突检测的载波侦听多路接入。速率为10Mb/s,地址为48bit。

IEEE 802委员会又公布了一个标准集,802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络。三者的共同特性由802.2来定义,那就是802网络共有的逻辑链路控制(LLC)。802.3,802.2定义了一个与以太网不同的帧格式。

那么,现在有两个标准,怎么办?

在TCP/IP里,以太网IP数据报的封装在RFC 894中定义,IEEE 802网络的IP数据报封装在RFC 1042中定义。主机需求RFC要求每一个Internet主机都与一个10Mb/s的以太网电缆相连接:

  • 1:必须能发送接收采用RFC 894(以太网)封装格式的分组。
  • 2:应该能接收两者混合封装格式的分组。
  • 3:也许能发送RFC 1042(IEEE 802)格式封装的分组。

如果主机能发送两种格式的分组,那么发送的格式必须是可设置的,且默认必须要是RFC 894格式。

两种帧格式:

两种的目的地址和源地址都是48bit(6字节)。

802标准的长度是指后续数据的长度,不包括CRC。以太网的类型字段定义了后续数据的类型。802中类型字段由后续子网接入协议的首部给出。
802定义的有效长度值与以太网的有效类型值无一相同,这样就可以将两种帧格式进行区分。

802中,3字节802.2的LLC,5字节的SNAP。DSAP(目的服务访问点)和SSAP(源服务访问点)值都为0xaa,ctrl字段值为3。3字节的org code置为0。类型与以太网帧格式的类型相同。

CRC。循环冗余码检验,(FCS或帧检验序列)。

802.3规定数据部分必须至少为38字节,以太网要求至少为46字节。

尾部封装

就是在尾部封装上一些数据。已遭到反对,不讨论。

SLIP:串行线路IP

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

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,那么它不能同时使用其他协议。
  • 没有检验和(类似于以太网中的CRC)。如果SLIP传输的报文被线路噪声影响而发生错误,只能通过上层协议发现(或者,新型的调制解调器可以检测并纠正错误报文)。这样,上层协议提供某种形式的CRC就显得很重要。

但尽管有这些缺陷,但SLIP仍然是一种广泛使用的协议。

压缩的SLIP

CSLIP。串行线路的速率通常较低,而且通常是交互式的,因此在SLIP线路上有许多小的TCP分组进行交换。为了传送一个字节的数据需要20个字节的IP首部和20字节的TCP首部,总数超过40字节。CSLIP通常能把这40个字节压缩到3到5个字节,他能在CSLIP的每一端维持多达16个TCP连接,并且知道其中每个连接的首部中的字段一般不会发生变化。这些被压缩的首部大大地缩短了交互响应的时间。

PPP:点对点协议

PPP修改了SLIP中的所有缺陷。PPP包括下面三个部分:

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

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

PPP数据帧格式:

每一帧都以字符0x7e开始和结束。
地址字节,值始终为0xff。
控制字节,0x03。
协议字段类似于以太网中的类型字段的功能,具体标识如上。
CRC

标志符为0x7e的话,当它出现在信息字段中时,PPP就要对他进行转义。在同步链路中,该过程是通过一种叫做比特填充的硬件技术来完成的。在异步链路中,0x7d被用作转义字符。当它出现在PPP数据帧中时,那么紧接着的字符的第六个比特要取其补码。具体如下:

  • 1:当遇到字符0x7e时,需连续传送两个字符:0x7d和0x5e。
  • 2:当遇到转义字符0x7d时,需连续传送两个字符:0x7d和0x5d。
  • 3:默认情况下,如果字符的值小于0x20(比如一个ASCII控制字符),一般都要进行转义。例如,遇到字符0x01时需要连续传送0x7d和0x21两个字符(这时,第六个比特取补码后变为1,前面两种情况均把它变为0)。

这样做的原因是防止它们出现在双方主机的串行接口驱动程序或调制解调器中,因为有时它们会把这些控制字符解释成特殊的含义。另一种可能是用链路控制协议来指定是否需要对这32个字符中的某一些值进行转义。默认情况下是都转义。

与SLIP类似,PPP经常用于低速的串行链路,因此减少每一帧的字节数可以降低应用程序的交互时延。利用链路控制协议,大多数产品通过协商可以省略标志符和地址字段,协议字段由2减为1。与前面的SLIP比的话只额外增加了3个字节,1协议,2CRC。另外,使用IP网络控制协议,大多数产品可以协商采用一种报文首部压缩方法(对应与CSLIP),减少IP和TCP报文首部长度。

PPP比SLIP的优点:

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

代价是多出的3个字节。当建立链路时要发送几帧协商数据,以及更为复杂的实现。

环回接口

以允许运行在同一主机上的客户程序和服务程序通过TCP/IP进行通信。A类网络号127就是为环回接口预留。大多数系统把IP地址127.0.0.1分配给这个接口。

一个传给环回接口的IP数据报不能在任何网络上出现。

传数据给环回接口时照样完成传输层和网络层的所有过程,只是档数据报离开网络层时把它返回给自己。

这个图其实我现在暂时还不太懂,等再给后面看一些看能不能再理解一下。。这里留下以后补充。

图中的关键点:

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

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

送给主机本身IP地址的IP数据报一般不出现在相应的网络当中。

最大传输单元MTU

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

路径MTU

两台通信主机路径中最小的MTU称作路径MTU。

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

-------------本文结束感谢您的阅读-------------