2.1 引言
数据链路层是计算机网络最基本的内容,在 TCP/IP 协议族中,数据链路层主要有三个目的:
1. 为IP 模块发送和接收 IP 数据报;
2. 为ARP 模块发送 ARP 请求和接收 ARP 应答;
3. 为RARP发送RARP 请求和接收RARP 应答;
数据链路层的协议数据单元——帧:将 IP 层(网络层)的数据报添加首部和尾部封装成帧。数据链路层协议有许多种,都会解决三个基本问题:封装成帧,透明传输,差错检测。
ARP 协议主要用来将 32bit 的 IP 地址解析为对应 48bit(以太网中)的 MAC 地址(硬件地址)。而 RARP 协议则是将硬件地址解析为 IP 地址。TCP/IP支持多种不同的数据链路协议,这取决于网络所使用的硬件,如以太网、令牌环网、FDDI、RS-232串行线路等,当今TCP/IP 采用的主要局网技术是以太网。
2.2 以太网和IEEE802 封装
以下是两种常用的封装格式,两中帧格式都是采用48bit 的目的 MAC 地址和源 MAC 地址;
以太网帧本体的前端是以太网首部,总共 14 字节。分别是 6 字节的目的 MAC 地址、6 字节的源MAC 地址以及 2 字节的上层协议类型。紧跟帧头后面的是数据,一个数据帧所能容纳的数据范围是46~1500 个字节。帧尾是一个 4 字节的 FCS(FrameCheck Sequence,帧检查序列)。在目的 MAC 地址中存放的是目的工作站的物理地址,源 MAC 地址中则存放的是构造以太网帧发送端工作站的物理地址。
IEEE802 与一般的以太网在帧的首部上有区别,一般的以太网帧中表示类型字段,而IEEE802 则表示帧的长度。此外,数据部分的前端还存在LLC 和 SNAP 字段,而标志上一层协议类型的字段就存放在 SNAP 字段中。
2.4 SLIP: 串行线路 IP
SLIP 串行线路 IP 是一种在串行线路上对IP 数据报进行封装的简单形式,SLIP 协议有以下的帧格式:
1. IP 数据报以END(0xc0)的特殊字符结束;为了防止数据报到来之前的线路噪声被当成数据报,大多数实现在数据报的开始处也传一个END 字符;
2. 若IP 数据报报文中存在 END 字符,则要连续传入两个字节 0xdb 和 0xdc 来取代它;
3. 若IP 报文中存在字符为 SILP 的 ESC 字符,则要连续传入两个字节0xdb 和 0xdd 来取代它;
SLIP是一种简单的帧封装方法,还有一些值得一提的缺陷:
1. 每一端都必须知道对方的 IP 地址;没办法把本端的 IP 地址通知给另一端;
2. 数据帧中没有类型字段,即一条串行线路使用了SLIP 协议,则不能同时使用其他协议;
3. SLIP 没有在数据帧中加上检验和;如果SLIP传输的报文被线路噪声影响而发生错误,只能通过上层协议来发现(另一种方法是,新型的调制解调器可以检测并纠正错误报文) 。这样,上层协议提供某种形式的CRC就显得很重要。
2.6 PPP点对点协议
为了解决 SLIP 串行线路 IP 的缺点,PPP点对点协议对其进行了修改,其内容如下:
1. 在串行链路上封装IP 数据报的方法;即 PPP 支持数据为 8 位和无奇偶检验的异步模式,还支持面向比特的同步链接;
2. 建立、配置及测试数据链路的链路控制协议(LCP:Link Control Protocol),允许通信双方进行协商,以确定不同的选项;
3. 针对不同的网络层协议的网络控制协议(NCP:Network Control Protocol)体系;当前 RFC 定义的网络层有 IP、OSI 网络层、DECnet以及 AppleTalk;
P P比SLIP具有下面这些优点: (1) PPP支持在单根串行线路上运行多种协议,
不只是 I P协议; (2) 每一帧都有循环冗余检验; (3) 通信双方可以进行 I P地址的动态协商(使用I P网络控制协议); (4) 与CSLIP类似,对TCP和IP报文首部进行压缩; (5) 链路控制协议可以对多个数据链路选项进行设置。为这些优点付出的代价是在每一帧的首部增加 3个字节,当建立链路时要发送几帧协商数据,以及更为复杂的实现。
2.7 环回接口
大多数的产品都支持环回接口(Loopback Interface),以允许运行在同一台主机上的客户程序和服务器程序通过T C P / I P进行通信。 A类网络号127就是为环回接口预留的。根据惯例,大多数系统把I P地址127.0.0.1分配给这个接口,并命名为localhost。一个传给环回接口的I P数据报不能在任何网络上出现。
我们想象,一旦传输层检测到目的端地址是环回地址时,应该可以省略部分传输层和所有网络层的逻辑操作。但是大多数的产品还是照样完成传输层和网络层的所有过程,只是当IP数据报离开网络层时把它返回给自己。
2.9 最大传输单元 MTU
最大传输单元(MaximumTransmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。数据链路层中的网络对数据帧的长度都有一个限制,不同网络的MTU 值不同,常用的以太网为 1500 个字节,802.3 为1492 个字节,网络中一些常见链路层协议MTU 的缺省数值如下:
FDDI 协议:4352字节
以太网(Ethernet)协议:1500字节
PPPoE(ADSL)协议:1492字节
X.25 协议(DialUp/Modem):576字节
Point-to-Point:4470字节
如果在IP层要传输一个数据报比链路层的MTU 还大,那么 IP 层就会对这个数据报进行分片。一个数据报会被分为若干片,每个分片的大小都小于或者等于链路层的MTU 值。当同一网络上的主机互相进行通信时,该网络的MTU 对通信双方非常重要。但当主机间要通过很多网络才能通信时,对通信双方最重要的是通信路径中最小的MTU,因为在通信路径上不同网络的链路层 MTU 不同。通信路径中最小的 MTU 被称为路径 MTU。