目录

数据链路层 Data Link Layer

  • 本层研究的是,在同一个局域网中,分组packet怎样从一台主机传送到另一台主机,并不经过路由器转发

  • 数据链路层使用的信道有: 点对点信道 广播信道

  • 三个基本问题: 封装成帧,透明传输,差错检测

  • 数据链路(data link) : 链路 link是连接相邻节点的线路,两台计算机通信往往需要经过多段链路,并且需要通信协议来控制数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路

  • 封装成帧 : 在一段数据的前后分别添加首部SOH 帧开始符和尾部EOT 帧结束符,这样就构成了一个帧。

  • 透明传输 : 在传输二进制文件时,数据有EOT帧结束符一样的编码,如何在接收端不解释为尾部呢?答案是在前面插入ESC字符,在接收端接收完数据后,再将ESC去除掉,这叫字节填充

  • 差错检测 : 比特在传输过程中,1 可能变成 0,0 也可能变成 1,使用循环冗余检验CRC或者帧检验序列方法可以检测出来

  • 在通信质量比较差的无线传输链路,数据连接层协议使用了帧编号,确认和重传机制,向上层提供可靠传输的服务,而在通信质量好的有线链路,则没有这些机制,而是交给上层 TCP 完成确认和重传

  • 如何将数据组合成帧 frame,控制它在物理信道上的传输,处理传输差错,调节发送速率与接收方匹配

  • 在两个网络实体之间提供数据链路通路的建立,维持和释放,提供物理地址寻址,数据成帧,流量控制,数据检错,重发等功能

  • 设备:网桥 交换机

如何解决在共用物理媒介上的多设备同时发消息的问题(多路访问)

CSMA/CD是实际中使用的协议:具体思想是:在发送之前先监听信道。如果介质空闲,则马上传输。如果介质正在忙,则一直监听到信道空闲,立刻传输。如果检测到冲突,那么立刻停止传输,等待一个随机的时间,之后再重复上面的步骤。

如何检测到冲突?

消息发送的过程中主机进行监听,如果发现信道上面的电平值和自己发送端的电平值不相同,那么它就认为自己发送的时候有别人进行发送,也就是说信道发生了冲突。

在信道空闲时发送一条消息后,我监听多长时间后没有监听到冲突,就认为我的消息成功发送了呢?

我们假设AB是两个局域网中相距最远的节点,并且从一端传递到另一端所需要的时间为τ。我们考虑极端的情况:假设A发送到B的消息,在马上就到达B的时候,B突然发送了消息发生冲突。那么这个冲突信号再传递给A,这个过程应该持续2τ。也就是说,在消息最后一比特监听时间持续了2τ之后,还没有检测到冲突,那么认为消息应该已经无冲突的到达。

如何控制传输过程中,数据发生错误的问题

利用 CRC循环冗余校验 。通过 XOR 异或的算法,来计算整个包是否在发送的过程中出现了错误。

https://www.cnblogs.com/Mayfly-nymph/p/11100021.html#N6FTYAKr

要注意的是,CRC循环冗余校验是硬件完成的,对于上层软件或用户来说是感觉不到的。因此,发送端对出错的数据帧进行重传是自动进行的,这种差错控制体质常简称为ARQ(自动重传请求/自动请求重传)

数据链路层的封装格式

  • IEEE 802.2 封装格式,目的地址 6 + 源地址 6 + 长度 2 + DSAP 1 + SSAP 1 + cntl + org code + 类型 + 数据 + CRC

  • 以太网的封装格式: 目的地址 6 + 源地址 6 + 类型 2 + 数据 + CRC

PPP 点对点协议

  • 标志 1 + 地址 1 + 控制 1 + 协议 2 + 信息 + CRC + 标志

最大传输单元 MTU

  • PPP : 296 字节

  • 以太网: 1500 字节

  • FDDI : 4352 字节