1.2.2 数据链路层
物理层处理的对象是比特,原始的比特流对于主机识别其所代表的实际信息是没有什么帮助的,所以,数据链路层要解决一些更现实的问题,如网络上的计算机如何被定位,即寻址等问题。数据链路层建议应该为网络上的主机定义一个可以标志它的地址,在制造网卡时就在网卡里烧结了一个编号,该编号被称为主机的物理地址。计算机安装了网卡,网卡的编号就代表了这台主机。有了这个地址,网络上的主机之间的通信就有了目标,也就知道了数据从哪里来到哪里去,哪一台主机应该接收数据,不是数据目标的主机就会忽略它。
当两台主机进行通信时,一台主机把连续的比特流通过物理媒介在网络上传播。对于目的地主机来说,它必须知道什么时候应该开始接收,什么时候接收应该结束;哪些是有用的比特,哪些是无用的比特;哪些是有效信息,哪些是无效信息(其他用途)等一系列问题。例如,前面讲过的地址,代表主机地址的比特肯定在源主机发送出的比特流中。对于网络上的其他主机来说,为了确定该数据是否是给自己的,必须比较代表目的地地址的那些比特。可是,并不能随便从比特流中截取一些比特来比较,因为这些比特可能不是代表地址的。
数据链路层的另一个重要功能是要把一系列连续的比特流形成一系列称为帧(Frame)的数据段,该数据段具有一定的数据结构,每部分都有特定的含义,如图1-3所示,这样主机就能够知道其代表的含义了。成帧(Framing)是第2层的重要功能,只有成了帧,原本没有实际意义的比特就有了含义了。
图1-3 帧结构
一个完整的帧应该包括如下字段:
● 帧起始字段(Start Frame Field)——表示一个帧的开始。
● 地址字段(Address Field)——源计算机物理地址及目的地计算机物理地址。
● 长度/类型控制字段(Length/Type Field)——帧(长度)字段,说明帧的确切长度。(类型)字段,指出第3层协议。
● 数据字段(Data Field)——第3层的信息。
● 帧校验序列(Frame Check Sequence,FCS)字段——用以校验数据字段,可以帮助目的地计算机判断收到的帧是否正确。
● 帧结束字段(Stop Frame Field)——表示帧的结束。
在数据传输过程中,难免会因为各种原因造成数据被破坏。数据链路层定义,使用帧校验序列的方法,使目标主机判断接收到的数据是否在传输过程中被破坏了。图1-3中的FCS字段就是用做此目的的。发送端主机对发送的数据采用某种校验算法进行计算,把计算的值写入FCS字段。目标主机收到数据后采用同样方法进行校验,然后和预先写入的值比较,如果相同,表明数据在传输过程中没有被破坏,如果不同则表明数据被破坏了。
计算帧校验序列的方式常用的有以下3种:
● 循环冗余校验(CRC);
● 奇偶校验;
● 校验和。
对于被破坏了的数据,目标主机请求对方重传。重传体现了数据链路层为数据传输提供可靠性的功能。除此之外,数据链路层还提供数据的流量控制,使通信双方的会话顺利、可靠地进行。
数据链路层定义的第3个功能是媒介访问控制方法(Media Access Control Method)。媒介访问控制方法定义了网络上的计算机如何获得物理通道的使用权,只有获得使用权的计算机才可以向网络上发送数据。从计算机组网来看,网络中的计算机是共享同一个物理传输通道的,如果没有一定的方法管理计算机使用该传输通道,势必造成数据碰撞,使得哪一台设备也不能通信。媒介访问控制方法可以分为以下3类。
● 竞争方式:也称为争用方式,如CSMA/CD。这种方式没有确定性,抢到通道就使用,抢不到就不用。
● 令牌传递方式:如Token Passing。这种方式有确定性,那就是拥有令牌的使用通道。
● 轮询方式:这种方式也有确定性,网络上的设备被轮流询问,优先级高的设备拥有使用通道的优先权。