链路层主要目的:
1. 为IP模块发送和接收IP数据报。
2. 为ARP模块发送ARP请求和接收ARP应答。
3. 为RARP发送RARP请求和接收RARP应答。
链路层对IP数据报封装格式:
1. 以太网(RFC 894)封装格式。
2. IEEE 802(RFC 1042)封装格式。
3. SLIP串行线路IP
4. PPP点对点协议
以太网和IEEE802封装:
在上面的是IEEE的封装格式,下面的是以太网的封装格式,从图中可以看出这两种帧格式中前12个字节和最后的4个字节都是一样的。在前12个字节中,分别以目的地址和原地址组成;帧的最后4个字节是由CRC组成。
在以太网的帧格式中,跟在员地址字段后面的是2个字节大小的类型字段,这个字段指定了后续数据的类型。
在IEEE帧格式中,跟在原地址字段后面的是长度字段,同样占用2个字节,长度字段是指它后续数据的字节长度。与以太网帧格式不同,在IEEE帧格式中长度字段后面跟的并非是数据,而是大小为3字节大小的802.2 LLC和5个字节大小的802.2 SNZP。目的服务访问点(DSAP)和源服务访问点(SSAP)的值都为0xaa;Ctrl字段的值为3,之后的3个字节的org code都为0。跟在SNZP后面的是类型字段,与以太网中的类型字段一样,指定了后续数据的类型。
CRC字段为帧内后续字节差错的循环冗余码效验(效验和)。
SLIP 串行线路IP:
SLIP报文格式
SLIP是一种在串行线路上的对IP数据报进行封装的简单形式,适用于RS-232串行端口和高速调制解调器。
SLIP协议定义的帧格式:
1. IP数据报以一个END(0xc0)的特殊字符结束。同时,为了防止在数据报到达之前将线路噪声当成数据包内容,大多数实现会在数据报的开始出也传一个END字符。
2. 如果IP数据报的某个字符为END,需要用0xdb和0xdc来代替。0xdb在SLIP中被称作ESC字符,但它与ASCII中的ESC字符(0x1b)不同。
3. 如果IP报文中某个字符为SLIP中的ESC字符,需要用0xdb和0xdd来代替。上图中就含有一个END和ESC字符的IP报文。
SLIP的缺陷:
1. 两端都必须知道对方的IP地址,没有办法将IP地址通知给对方。
2. 数据帧中没有类型字段。在使用SLIP的串行线路上不能同时使用其他协议。
3. 没有效验和,出现错误后只能通过上层协议来发现。不过,新型的调制解调器可以检测并纠正错误的报文。
压缩的SLIP:
由于串行线路的速率通常较低,而通信通常是交互式的。可能会出现为了传输1个字节却需要增加超过40个字节的IP(20个字节)首部和TCP(20个字节)首部。为了弥补这些性能上的缺陷,提出了一个称为CSLIP(即压缩SLIP)的新协议。它能将40个字节压缩到3到5个字节,并能在SLIP两端维持多大16个TCP链接。
ppp:点对点协议:
ppp协议修改了SLIP协议的所有缺陷,包括:
- 在串行链路上封装IP数据报的方法。PPP既支持数据为8位和无奇偶检验的异步模式(如串行接口),还支持面向比特的同步连接。
- 建立、配置及测试数据链路的链路控制协议(LCP: Link Control Protocol)。它允许通信双方进行协商,已确定不同的选项。
- 针对不同网络层协议的网络控制协议体系。
PPP数据帧格式
字段说明:
- 标志字段:帧的开始和结束的两个标志字段的值都为0x7e。
- 地址字段:地址字节的值始终是0xff。
- 控制字段:控制字节的值为0x03。
- 协议字段:与以太网中的类型字段相似。当值为0x0021时,信息字段是一个IP数据报;当值为0xc021时,信息字段是一个链路控制数据;当值为0x8021时,信息字段为网络控制数据。
- CRC字段(或FCS,帧检验序列):CRC字段是一个循环冗余检验码。
由于标志字符的值是0 x 7 e,因此当该字符出现在信息字段中时, P P P需要对它进行转义。在同步链路中,该过程是通过一种称作比特填充(bit stuff i n g )的硬件技术来完成的[ Ta n e n b a u m1 9 8 9 ]。在异步链路中,特殊字符0 x 7 d用作转义字符。当它出现在P P P数据帧中时,那么紧接着的字符的第6个比特要取其补码,具体实现过程如下:
1) 当遇到字符0 x 7 e时,需连续传送两个字符: 0 x 7 d和0 x 5 e,以实现标志字符的转义。
2) 当遇到转义字符0 x 7 d时,需连续传送两个字符: 0 x 7 d和0 x 5 d,以实现转义字符的转义。
3 ) 默认情况下,如果字符的值小于0 x 2 0(比如,一个A S C I I控制字符),一般都要进行转义。例如,遇到字符0 x 0 1时需连续传送0 x 7 d和0 x 2 1两个字符(这时,第6个比特取补码后变为1,而前面两种情况均把它变为0)。
这样做的原因是防止它们出现在双方主机的串行接口驱动程序或调制解调器中,因为有时它们会把这些控制字符解释成特殊的含义。另一种可能是用链路控制协议来指定是否需要对这3 2个字符中的某一些值进行转义。默认情况下是对所有的3 2个字符都进行转义。
与S L I P类似,由于P P P经常用于低速的串行链路,因此减少每一帧的字节数可以降低应用程序的交互时延。利用链路控制协议,大多数的产品通过协商可以省略标志符和地址字段,并且把协议字段由2个字节减少到1个字节。如果我们把P P P的帧格式与前面的S L I P的帧格式(图2 - 2)进行比较会发现, P P P只增加了3个额外的字节: 1个字节留给协议字段,另2个给C R C字段使用。另外,使用I P网络控制协议,大多数的产品可以通过协商采用Van Jacobson报文首部压缩方法(对应于C S L I P压缩),减小I P和T C P首部长度。
总的来说, P P P比S L I P具有下面这些优点:
(1) PPP支持在单根串行线路上运行多种协议,不只是I P协议;
(2) 每一帧都有循环冗余检验;
(3) 通信双方可以进行I P地址的动态协商(使用I P网络控制协议);
(4) 与C S L I P类似,对T C P和I P报文首部进行压缩;
(5) 链路控制协议可以对多个数据链路选项进行设置。为这些优点付出的代价是在每一帧的首部增加3个字节,当建立链路时要发送几帧协商数据,以及更为复杂的实现。