哈工大计算网络课程数据链路层详解之:数据链路层服务
在介绍完网络层的实现功能和协议之后,接下来我们继续介绍网络层的下一层:数据链路层。 本节首先对数据链路层的功能和所提供的服务进行概述。
如下图示例网络所示,标红色的部分实际上就是一段段的链路。实际上,数据链路层主要的功能就是实现将数据在节点之间的的链路上进行传输。
因此在数据链路层中,经常会用到以下一些术语:
-
结点(nodes):主机和路由器
在数据链路层中,不管是主机还是路由器,都可以把它概括性的称之为一个结点。
-
链路(links):连接相邻结点的通信信道
- 有线链路(wired links)
- 无线链路(wireless links)
- 局域网(LANs)
-
链路层封装的数据包/数据分组:帧(frame)
用来封装网络层的数据报,在链路上进行传输。
数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送数据报。
数据链路层服务
接下来我们来分析,数据链路层能够为高层(网络层)在这一段数据链路的传输上,提供哪些服务。
概括来讲,主要提供的服务主要有以下几种:
-
组帧(framing)
-
封装数据报构成数据帧,加首部和尾部。
-
帧同步
组帧另一个要实现的功能就是帧同步。作为数据链路层数据帧,在物理层传输时是一系列的比特。那么物理层在接收到一系列的比特流后,如何重新识别出数据帧呢?通常的做法,是在组帧之后,在帧收尾加上一个特殊的帧定界符,可以是一个特殊的字符/字符串。
-
-
链路接入(link access)
- 如果使用的链路是共享介质,则需要解决信道接入(channel access)。所谓共享就是有很多节点都要利用这段链路来传输数据。这个时候要防止不同节点传输数据间的干扰和混淆。
- 伴随链路接入还有一个很重要的内容是链路寻址。在数据帧首部会有一个"MAC"地址,作为MAC地址其重要意义尤其在于当使用共享链路时,当构造数据帧时,需要这样一个链路层的物理地址来标识一个数据帧的源地址和目的地址。
- MAC地址IP地址有很大不同,IP地址是网络层地址,MAC地址是链路层地址。
-
相邻结点间可靠交付(比如借助确认、重传等机制)
- 在低误码率的有线链路上很少采用(如光纤,某些双绞线等)
- 无线链路:误码率高,需要可靠交付。
-
流量控制(flow control)
- 协调(pacing)相邻的发送结点的发送速率和接收速率。
-
差错检测(error detection)
- 作为很多链路层协议,未必会保证可靠传输,但通常都会进行差错检测。
- 主要是应对信号衰减和噪声引起的差错。
- 接收端检测到差错:
- 通知发送端重传或者直接丢弃帧
-
差错纠正(error correction)
- 采用特殊的纠错编码,从而在接收端直接纠正比特差错。
-
全双工和半双工通信控制
- 全双工:链路两端结点同时双向传输
- 半双工:链路两端结点交替双向传输
链路层具体实现
作为链路层提供的服务,一方面并不是所有的链路层协议都一定要提供上述提及的所有服务。另外,作为链路层,它的功能在网络中的具体实现,尤其是在主机上的实现,就是网络接口卡来实现的。因此,作为最常见的链路层具体实现,比如以太网网卡、802.11网卡、以太网芯片组等等,这些组件同时实现了链路层和物理层的功能。
因此,作为链路层的数据传输形式如下示例所示:
主机的网卡把高层(网络层)协议交付的数据报,在本地通过网卡的控制器封装成数据帧,然后通过物理链路把数据帧发送出去。另外一端主机的网卡接收数据帧,经过一系列差错检测等处理确认数据帧,如果没有差错,则把数据帧里封装的高层数据报提取出来,进一步交给上层协议。
- 发送端:
- 将数据报封装成帧
- 增加差错检测比特,实现可靠数据传输和流量控制等
- 接收端
- 检测差错,实现可靠数据传输和流量控制等
- 提取数据报,交付上层协议实体。、