数据链路层的最基本的功能是向该层用户提供透明的和可靠的数据传送基本服务。透明性是指该层上传输的数据的内容、格式及编码没有限制,也没有必要解释信息结构的意义;可靠的 传输使用户免去对丢失信息、干扰信息及顺序不正确等的担心。在物理层中这些情况都可能发生,在数据链路层中必须用纠错码来检错与纠错。数据链路层是对物理层传输原始比特流的功能的加强,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一无差错的线路。
以太网
以太网的封装格式如下
图中每个方块下面的数字是表示大小的字节数
因为以太网要求数据部分最小为46字节,所以在发送ARP/RARP数据报的时候,会有18字节的填充部分
SLIP
SLIP报文的封装格式如上图
IP数据报以一个称作END0xc0的特殊字符结束。同时,为了防止数据报到来之前的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个E N D字符(如果有线路噪声,那么E N D字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
如果I P报文中某个字符为END,那么就要连续传输两个字节0xdb和0xdc来取代它。0xdb这个特殊字符被称作SLIP的ESC字符,但是它的值与ASCII码的ESC字符(0x1b)不同。
如果I P报文中某个字符为SLIP的ESC字符,那么就要连续传输两个字节0xdb和0xdd来取代它
SLIP的缺点
每一端必须知道对方的I P地址。没有办法把本端的I P地址通知给另一端。
数据帧中没有类型字段(类似于以太网中的类型字段)。如果一条串行线路用于SLIP,那么它不能同时使用其他协议。
SLIP没有在数据帧中加上检验和(类似于以太网中的CRC字段)
PPP数据帧
PPP数据帧的格式如下
每一帧都以标志字符0x7e开始和结束。紧接着是一个地址字节,值始终是0xff,然后是一个值为0x03的控制字节。
接下来是协议字段,类似于以太网中类型字段的功能。当它的值为0x0021时,表示信息字段是一个IP数据报;值为0xc021时,表示信息字段是链路控制数据;值为0x8021时,表示信息字段是网络控制数据。
链路控制协议( LCP:Link Control Protocol):建立、配置及测试数据链路,它允许通信双方进行协商,以确定不同的选项。
针对不同网络层协议的网络控制协议( N C P:Network Control Protocol)体系。当前RFC定义的网络层有I P、OSI网络层、DECnet以及Apple Talk。例如,IP NCP允许双方商定是否对报文首部进行压缩,类似于CSLIP(缩写词NCP也可用在TCP的前面)。
由于标志字符的值是0x7e,因此当该字符出现在信息字段中时,PPP需要对它进行转义。在同步链路中,该过程是通过一种称作比特填充(bitstuffing)的硬件技术来完成的[Tanenbaum1989]。在异步链路中,特殊字符0x7d用作转义字符。当它出现在PPP数据帧中时,那么紧接着的字符的第6个比特要取其补码,具体实现过程如下:
当遇到字符0x7e时,需连续传送两个字符:0x7d和0x5e,以实现标志字符的转义。
当遇到转义字符0x7d时,需连续传送两个字符:0x7d和0x5d,以实现转义字符的转义。
默认情况下,如果字符的值小于0x20(比如,一个ASCII控制字符),一般都要进行转义。例如,遇到字符0x01时需连续传送0x7d和0x21两个字符(这时,第6个比特取补码后变为1,而前面两种情况均把它变为0)。
环回接口
大多数的产品都支持环回接口(LoopbackInterface),以允许运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类网络号127就是为环回接口预留的。根据惯例,大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost。一个传给环回接口的IP数据报不能在任何网络上出现
环回接口处理I P数据报的简单过程如下
传给环回地址(一般是1 2 7 . 0 . 0 . 1)的任何数据均作为I P输入。
传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是因为广播传送和多播传送的定义(第1 2章)包含主机本身。
任何传给该主机I P地址的数据均送到环回接口。
最大传输单元MTU
不同类型的网络大多数都有一个上限。如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于MTU。