数据链路层最基本的功能是向该层用户提供透明和可靠的数据传输基本服务。透明性是指该层上传输 的数据内容,格式及编码没有限制,也没有必要解释信息结构的意义。可靠的传输使用户免去对丢失信息,干扰信息及顺序不正确等的担心。在物理层中这些情况都可能发生,在数据链路层中必须用纠错码来检错和纠错。
数据链路层是对物理层传输原始比特流功能的加强,将物理层提供的可能出错的物理连接改造成逻辑上无差错的数据链路,使之对网络层表现为无差错的线路。
链路层提供的服务
尽管任一链路层的基本服务都是将数据报通过单一通信链路从一个节点移动到相邻节点,但所提供的服务细节能够随着链路层协议的不同而变化。链路层协议能够提供的可能服务包括
(1)成帧(framing):在每个网络层数据报经链路传送之前,几乎所有的链路层协议都要将其用链路层帧封装起来。一个帧由一个数据字段和若干个首部字段组成,其中网络层数据报就插在数据字段中。帧的结构由链路层协议决定
(2)链路接入:媒体访问控制(Medium Access Control MAC)协议规定了帧在链路上传输的规则。对于在链路的一端仅有一个发送方,链路的另一端仅有一个接收方的点对点链路,MAC协议比较简单(或者不存在),即无论何时链路空闲,发送方都能够发送帧,更有趣的情况是当多个节点共享单个广播链路时,即所谓多路访问问题。这里,MAC协议用于协调多个节点的帧传输
(3)可靠交付:当链路层协议提供可靠交付服务时,它保证无差错地经链路层移动每个网络层数据报,与运输层可靠交付服务类似,链路层的可靠交付服务通常是通过确认和重传取得的。链路层可靠交付服务通常用于易于产生高差错率的链路。例如无线链路,其目的是本地(也就是在查错发生的链路上)纠正一个差错,而不是通过运输层或应用层协议迫使进行端到端的数据重传,然而,对于低比特差错的链路,包括光纤,同轴电缆和许多双绞铜线链路,链路层可靠交付可能会被认为是一种不必要的开销,由于这个原因,许多有线的链路层协议不提供可靠交付服务。
(4)差错检测和纠正:当帧中的一个比特作为1传输时,接收方节点中的链路层硬件可能不正确地将其判断为0,反之亦然。这种比特差错是由信号衰减和电磁噪声导致的。因为没有必要转发一个有差错的数据报,所以许多链路层协议提供一种机制来检查这样的比特差错,通过让发送节点在帧中包括差错检测比特,让接收节点进行差错检查,以此来完成这项工作,
链路层在何处实现
下图展示了一个典型的主机体系结构。链路层的主体部分是在网络适配器(network adapter)中实现的,网络适配器有时候也称为网络接口卡(Network Interface Card NIC)。
位于网络适配器核心的是链路层控制器,该控制器通常是一个实现了很多链路层服务(成帧,链路接入,差错控制等)的专用芯片。因此,链路层控制器的很多功能是用硬件实现的。例如,Inter的710控制器实现了以太网协议,Atheros AR5006控制器实现了802.11WiFi协议。直到20世纪90年代后期,大部分网络适配卡还是物理上分离的卡(如一块PCMCIA卡或者一块插进PC中的PCI卡槽中的插入卡),但越来越多的网络适配器被综合进主机的主板,即所谓的局域网在主板配置。
在发送端,控制器取得了由协议较高层生成并存储在主机内存中的数据包,在链路层帧中封装该数据报(填写该帧的各个字段),然后遵循链路接入协议将该帧传进通信链路中。在接收端,控制器接收了整个帧,抽取出网络层数据报。如果链路层执行差错检测,则需要发送控制器在该帧的首部设置差错检测比特,由接收控制器执行差错检测。
下图展示了与主机总线(比如一条PCI或PCI-X总线)连接的网络适配器,这里它看起来非常像与其他主机组件的任何其他I/O设备。下图还显示了尽管大部分链路层是在硬件中实现的,但部分链路层是在运行于主机CPU上的软件中实现的。链路层的软件组件实现了高层链路层功能,如组装链路层寻址信息和激活控制器硬件。在接收端,链路层软件响应控制器中断(例如,由于一个或多个帧 的到达),处理差错条件和将数据报向上传递给网络层,所以,链路层是网络和软件的结合体,即此处是协议栈中软件和硬件交接的地方。
数据链路层协议
TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,目前有以下协议
- 异步传输模式
- VLAN(IEEE 802.1Q)
- 帧中继
- 高级资料链接控制
- 点对点协议
- 以太网(IEEE 802.3)
- Wi-Fi(IEEE 802.11)
以太网和IEEE802封装
以太网这个术语一般是指数字设备公司(Digital Equipment Corp),因特尔公司(Inter Crop)和Xerox公司在1982年联合公布的一个标准。它是当今TCP/IP采用的主要的局域网技术。它采用一种称作CSMA/CD的媒体接入方法,其意思是带冲突检测的载波侦听多路接入(Carrier Sense,Multiple Access with Collision Detection)。它的速率为10Mb/s,地址为48比特。
几年后,IEEE(电子电气工程师协会)802委员会公布了一个稍有不同的标准集,其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络。这三者的共同特性由802.2标准来定义,那就是802网络共有的逻辑链路控制(LLC),不信的事,802.2和802.3定义了一个与以太网不同的帧格式。
在TCP/IP世界中,以太网IP数据报的封装是在RFC 894中定义的,IEEE802网络数据的IP数据报是在RFC 1042中定义的。主机需求RFC要求每台Internet主机都与一个10Mb/s的以太网电缆相连接:
1)必须能发送和接收采用RFC 894(以太网)封装格式的分组
2)应该能接收与RFC 894混合的RFC 1042(IEEE 802)封装格式的分组
3)也许能够发送采用RFC 1042格式封装的分组。如果主机能同时发送两种类型的分组数据,那么发送的分组必须是可以设置的,而且默认条件下必须是RFC 894分组
最常使用的封装格式是RFC 894定义的格式,下图中显示了两种不同的封装格式,图中每个方框下面的数字是它们的字节长度。
两种帧格式都采用48bit(6字节)的目的地址和源地址(802.3允许使用16 bit的地址,但一般是48bit)。这也是所谓的硬件地址(MAC地址)
接下来的2个字节在两种帧格式中互不相同。在802标准定义的帧格式中,长度字段是指它后续数据的字节长度,但不包括CRC检验码。以太网的类型字段定义了后续数据的类型。在802标准定义的帧格式中,类型字段则由后续的子网接入协议(Sub-network Access Protocol SNAP)的首部给出。幸运的事,802定义的有效长度值与以太网的有效类型值无一相同,这样,就可以对两种帧进行区分。
在以太网帧格式中,类型字段之后就是数据,而在802帧格式中,跟随在后面的是3字节的802.2 LLC和5字节的802.2 SNAP。目的服务访问点(Destination Service Access Point DSAP)和源服务访问点(Source Service Access Point SSAP)的值都设为oxaa。Ctrl字段的设置为设置3,随后的3个字节org code都设置为0。再接下来的2的字节类型字段和以太网帧格式一样。
CRC字段用于帧内后续字节差错的循环冗余码检验(检验和)。
802.3标准定义的帧和以太网的帧都有最小长度要求,802.3规定数据部分必须至少为38字节,而对于以太网,则要求最少要有46字节。为了保证这一点,必须在不足的空间插入填充(pad)字节,在开始观察线路上的分组时将遇到这种最小长度的情况。
参考资料
《计算机网络 自顶向下方法》
《TCP/IP 详解 卷1:协议》
https://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82