Linux C/C++服务器开发实践
上QQ阅读APP看书,第一时间看更新

1.5.2 数据链路层主要功能

数据链路层的主要功能如下:

(1)为网络层提供服务

· 无确定的无连接服务。适用于实时通信或者误码率较低的通信信道,如以太网。

· 有确定的无连接服务。误码率较高的通信信道,如无线通信。

· 有确认的面向连接服务。适用通信要求比较高的场合。

(2)成帧、帧定界、帧同步、透明传输

为了向网络层提供服务,数据链路层必须使用物理层提供的服务。而物理层是以比特流进行传输的,这种比特流并不能保证在数据传输过程中没有错误,接收到的位数量可能少于、等于或者多于发送的位数量,而且它们还可能有不同的值。这时数据链路层为了能实现数据有效的差错控制,就采用一种“帧”的数据块进行传输。而要采用帧格式传输,就必须有相应的帧同步技术,这就是数据链路层的“成帧”(也称为“帧同步”)功能。

· 成帧:两个工作站之间传输信息时,必须将网络层的分组封装成帧,以帧的形式进行传输,将一段数据的前、后分别添加首部和尾部,就构成了帧。

· 帧定界:首部和尾部中含有很多控制信息,它们的一个重要的作用是确定帧的界限,即帧定界。

· 帧同步:指的是接收方应当能从接收的二进制比特流中区分出帧的起始和终止。

· 透明传输:指的是不管所传数据是什么样的比特组合都能在链路上传输。

(3)差错控制

在数据通信过程可能会因物理链路性能和网络通信环境等因素,出现一些传送错误,但为了确保数据通信的准确,必须使这些错误发生的几率尽可能低。这一功能也是在数据链路层实现的,即“差错控制”功能。

(4)流量控制

在双方的数据通信中,如何控制数据通信的流量同样非常重要。它既可以确保数据通信的有序进行,还可避免通信过程中不会出现因为接收方来不及接收而造成的数据丢失。这就是数据链路层的“流量控制”功能。

(5)链路管理

数据链路层的“链路管理”功能包括数据链路的建立、链路的维持和释放三个主要方面。当网络中的两个结点要进行通信时,数据的发送方必须确知接收方是否已处在准备接收的状态。为此通信双方必须要先交换一些必要的信息,以建立一条基本的数据链路。在传输数据时要维持数据链路,而在通信完毕时要释放数据链路。

(6)MAC寻址

这是数据链路层中的MAC子层的主要功能。这里所说的“寻址”与“IP地址寻址”是完全不一样的,因为此处所寻找地址是计算机网卡的MAC地址,也称“物理地址”或“硬件地址”,而不是IP地址。在以太网中,采用媒体访问控制(Media Access Control,MAC)进行寻址,MAC地址被烧入每个以太网网卡中。

网络接口层中的数据通常称为MAC帧,帧所用的地址为媒体设备地址,即MAC地址,也就是通常所说的物理地址。每一块网卡都有唯一的物理地址,它的长度固定为6字节,比如00-30-C8-01-08-39。在Linux操作系统的命令行下用ifconfig -a可以看到系统所有网卡信息。

MAC帧的帧头的定义如下:

     typedef struct _MAC_FRAME_HEADER   //数据帧头定义
     {
      char  cDstMacAddress[6];                //目的MAC地址
      char  cSrcMacAddress[6];                //源MAC地址
      short m_cType;       //上一层协议类型,如0x0800代表上一层是IP协议,0x0806为ARP
     }MAC_FRAME_HEADER,*PMAC_FRAME_HEADER