数据通信与网络技术
上QQ阅读APP看书,第一时间看更新

2.5 网络接口层协议

TCP/IPv4协议栈的网络接口层实际上并不是因特网协议组中的一部分,它是数据包从一个设备的网络层传输到另外一个设备的网络层的方法。这个过程包括将数据包添加数据链路层首部以封装成帧、通过物理媒介(如光纤、双绞线、无线等)传输数据、接收端接收数据后去掉数据链路层封装的首部并将接收到的数据包传到网络层。

TCP/IPv4协议栈的网络接口层包含了OSI参考模型的数据链路层和物理层的功能。网络设备的接口(计算机的网卡、路由器的接口)实现数据链路层和物理层的功能。下面重点介绍数据链路层实现的功能。

数据链路层协议负责将数据包封装成帧,从链路的一端传到另一端。如图2-44所示,PC1给PC2通信,需要经过链路1、链路2直至链路6。计算机连接交换机的链路是以太网链路,以太网链路使用CSMA/CD协议。路由器和路由器之间的连接为点到点连接,针对这种链路的数据链路层协议有PPP、高级数据链路控制(High-Level Data Link Control,HDLC)协议等。不同的数据链路层协议定义了不同的帧格式。

图2-44 链路和数据链路层协议

常见的数据链路层协议有CSMA/CD、PPP、HDLC、帧中继、X.25等。这些数据链路层协议都具备3个基本功能,即封装成帧、透明传输和差错检测。

(1)封装成帧。

封装成帧就是将网络层的IP数据包的前后分别添加首部和尾部,这样就构成了一个帧。如图2-45所示,不同的数据链路层协议的帧的首部和尾部包含的信息有明确的规定,帧的首部和尾部有帧开始符和帧结束符,称为帧定界符。接收端收到物理层传过来的数字信号,读取到帧开始符一直到帧结束符,就认为接收到了一个完整的帧。

图2-45 帧首部和帧尾部封装成帧

在数据传输中出现差错时,帧定界符的作用更加明显。如果发送端在尚未发送完一个帧时突然出现故障,中断发送,接收端收到了只有帧开始符没有帧结束符的帧,就认为是一个不完整的帧,必须丢弃。

为了提高数据链路层传输效率,应当使帧的数据部分尽可能大于首部和尾部的长度。但是每一种数据链路层协议都规定了所能够传送帧的数据部分长度的上限,即最大传输单元(MTU),以太网的MTU为1500字节,如图2-45所示,MTU指的是数据部分长度。

(2)透明传输。

帧开始符和帧结束符最好选择不会出现在帧的数据部分的字符,如果帧的数据部分出现帧开始符和帧结束符,就要插入转义字符,接收端接收时看到转义字符就去掉,把转义字符后面的字符当作数据来处理,这就是透明传输。如图2-46所示,某数据链路层协议的帧开始符为SOH,帧结束符为EOT,转义字符选定为ESC。节点A给节点B发送数据帧,在发送到数据链路之前,在数据中出现SOH、ESC和EOT字符编码之前的位置插入转义字符ESC的编码,这个过程就是字节填充,节点B接收之后,再去掉填充的转义字符,视转义字符后的字符为数据。

图2-46 使用字节填充法解决透明传输的问题

发送节点A在发送帧之前在原始数据中必要位置插入转义字符,接收节点B收到后去掉转义字符,又得到原始数据,中间插入转义字符是为了让传输的原始数据原封不动地发送到节点B,这个过程称为“透明传输”。

(3)差错检测。

现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错。1可能会变成0,而0也可能变成1,这就叫作比特差错。比特差错是传输差错中的一种。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率。例如,误码率为10-10时,表示平均每传送1010比特就会出现一个比特差错。误码率与信噪比有很大的关系。如果设法提高信噪比,就可以使误码率降低。但实际的通信链路并非理想的,它不可能使误码率下降到零。因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。目前在数据链路层广泛使用循环冗余检测(Cyclic Redundancy Check,CRC)的差错检测技术。

要想让接收端能够判断帧在传输过程是否出现差错,就需要在传输的帧中包含用于检测错误的信息,这部分信息称为帧校验序列(Frame Check Sequence,FCS)。如图2-47所示,使用帧的数据部分和数据链路层首部来计算FCS,放到帧的末尾。接收端收到后,再使用数据部分和数据链路层首部来计算FCS,比较两个计算结果是否相同,如果相同则认为在传输过程中没有出现差错;如果出现差错,接收端丢弃该帧。

图2-47 帧校验序列