链路层服务、帧与物理传输基础
链路层
数据链路层用于跨物理层在网段节点之间传输数据,通常指以太网、无线局域网等通信手段。数据链路层提供了在网络的两个实体之间传输数据的功能,并且提供了差错检测用于纠正物理层中发生的错误。
在本章中,运行链路层协议的主机、路由器、交换机和接入点都称为结点(node),连接相邻结点的通信信道称为链路(link)。一个数据报从源主机到目的主机,要依次经过路径上的每一条链路;不同的链路可能使用完全不同的链路层协议,例如第一段是以太网,中间是光纤上的点对点链路,最后一段是无线局域网。
在数据链路层中,链路层地址有很多种不同的称谓,如LAN地址、物理地址或者MAC地址。因为MAC地址是最流行的术语,所以一般称呼链路层地址为MAC地址(Media Access Control Address)。
在每个网络层数据报在传输之前,几乎所有的链路层协议都会将数据报封装为帧(frame)。如果帧太大的话,数据链路层会将大帧拆分为一个个的小帧,小帧能够使传输控制和错误检测更加高效。
帧由首部、数据部分和尾部组成:数据部分装着网络层数据报,首部里通常有链路层地址和类型字段,尾部通常是差错检测码。链路层可以提供的服务包括:
| 服务 | 说明 |
|---|---|
| 成帧 | 把数据报封装成帧,并让接收方识别帧的边界 |
| 链路接入 | 由媒体访问控制(MAC)协议规定结点何时可以向链路发送帧 |
| 可靠交付 | 用确认和重传保证帧无差错地通过这一条链路 |
| 差错检测和纠正 | 发现、甚至纠正物理传输中出现的比特差错 |
链路层的大部分功能由网络适配器(也称网络接口卡)中的硬件实现,其余部分由主机操作系统中的软件实现。
同一个数据报,三种不同的帧
解锁完整互动实验、进阶解析与精选参考答案。
知识测验
物理传输基础
链路层把帧交给物理层,物理层把比特变成可以在铜线、光纤或空气中传播的信号。最直接的编码方法是不归零制(NRZ):1用高电平表示,0用低电平表示。但如果连续出现很多个相同的比特,信号会长时间保持不变,接收方就难以判断每个比特从哪里开始、到哪里结束。
曼彻斯特编码在每个比特的中间都安排一次电平跳变:按IEEE 802.3的约定,由低到高表示1,由高到低表示0。接收方可以从这些跳变中恢复发送方的时钟,代价是信号的变化速率是数据速率的两倍。早期10 Mbps以太网使用的就是曼彻斯特编码。
按照数据能否同时双向传输,链路可以分为单工(只能单向传输)、半双工(两个方向都能传输,但不能同时进行)和全双工(两个方向可以同时传输)。5.4节的共享介质网络是半双工的,5.5节通过交换机连接的现代以太网链路则是全双工的。
可靠交付
网络层提供的可靠交付更多指的是端系统到端系统的交付,而数据链路层提供的可靠交付更多指的是单段链路节点到节点的传送。当链路层协议提供可靠交付时,它能保证无差错地经链路层移动每个网络层数据报。链路层提供可靠交付的方法和TCP类似,也是使用确认和重传的机制。
链路层的可靠交付通常用于出错率很高的链路,例如无线链路,它的目的是在本地纠正出错的帧,而不是通过运输层或应用层协议强制进行端到端的数据传输。对于出错率较低的链路,比如光纤、同轴电缆和双绞线来说,链路层的交付开销是没有必要的,由于这个原因,这些链路通常不提供可靠的交付。
在本地纠错,还是端到端重传?
解锁完整互动实验、进阶解析与精选参考答案。
知识测验
比较本地恢复与端到端恢复的代价
一个分组经过三条链路。前两条从不丢包;最后一条(无线)链路每次传输独立地以概率p丢失。使用链路层可靠交付时只在最后一条链路上重传;不使用时由发送方沿三条链路重传。求p = 0.2和p = 0.5时两种方案每个分组的期望链路传输次数,以及端到端恢复的代价达到逐跳恢复两倍时的p。
用Python把比特编码为NRZ和曼彻斯特信号
用H和L表示高、低电平。编写Python程序,把比特10110001分别用NRZ(1 = H,0 = L)和曼彻斯特编码(1 = LH,0 = HL,即IEEE 802.3约定)编码,统计每种信号中的电平跳变次数,并把曼彻斯特信号解码回比特。