Data Link Layer
通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
在两个网络实体之间提供数据链路通路的建立,维持和释放,提供物理地址寻址,数据成帧,流量控制,数据检错,重发等功能。
目前主要有两种链路
点对点链路:链路一端只有一个发送方,另一端只有一个接收方
广播链路/广播信道:能够让多个发送和接收节点,都连接到相同的 统一的 共享的广播信道上
三个基本问题: 封装成帧,透明传输,差错检测
封装成帧 : 在一段数据的前后分别添加首部
SOH 帧开始符
和尾部EOT 帧结束符
,这样就构成了一个帧。透明传输 : 在传输二进制文件时,数据有
EOT帧结束符
一样的编码,如何在接收端不解释为尾部呢?答案是在前面插入ESC
字符,在接收端接收完数据后,再将ESC
去除掉,这叫字节填充差错检测 : 比特在传输过程中,1可能变成0, 0也可能变成1,使用
循环冗余检验CRC
或者帧检验序列
方法可以检测出来
在通信质量比较差的无线传输链路,数据连接层协议使用了帧编号,确认和重传机制,向上层提供可靠传输的服务,而在通信质量好的有线链路,则没有这些机制,而是交给上层 TCP 完成确认和重传
广播信道
IEEE 802.2 封装格式: 目的地址 6 + 源地址 6 + 长度 2 + DSAP 1 + SSAP 1 + cntl + org code + 类型 + 数据 + CRC
以太网的封装格式: 目的地址 6 + 源地址 6 + 类型 2 + 数据 + CRC
点对点信道
标志 1 + 地址 1 + 控制 1 + 协议 2 + 信息 + CRC + 标志
如何解决在共用物理媒介上的多设备同时发消息的问题(多路访问)
CSMA/CD
是实际中使用的协议:具体思想是:在发送之前先监听信道。如果介质空闲,则马上传输。如果介质正在忙,则一直监听到信道空闲,立刻传输。如果检测到冲突,那么立刻停止传输,等待一个随机的时间,之后再重复上面的步骤。
如何检测到冲突?
消息发送的过程中主机进行监听,如果发现信道上面的电平值和自己发送端的电平值不相同,那么它就认为自己发送的时候有别人进行发送,也就是说信道发生了冲突。
在信道空闲时发送一条消息后,我监听多长时间后没有监听到冲突,就认为我的消息成功发送了呢?
我们假设AB是两个局域网中相距最远的节点,并且从一端传递到另一端所需要的时间为τ。我们考虑极端的情况:假设A发送到B的消息,在马上就到达B的时候,B突然发送了消息发生冲突。那么这个冲突信号再传递给A,这个过程应该持续2τ。也就是说,在消息最后一比特监听时间持续了2τ之后,还没有检测到冲突,那么认为消息应该已经无冲突的到达。
CSMA/CD
以太网采用附加冲突检测的载波帧听多路访问(CSMA/CD)机制,以太网中所有节点都可以看到在网络中发送的所有信息。因此,以太网是一种广播网络。它需要判断计算机何时可以把数据发送到访问介质。通过使用CSMA/CD,所有计算机都可以监视传输介质的状态,在传输之前等待线路空闲。如果两台计算机尝试同时发送数据,就会发生冲突,计算机会停止发送,等待一个随机的时间间隔,然后再次尝试发送。
(1)监听信道上是否有信号在传输。如果有,表示信道处于忙状态,则继续帧听,直到信道空闲为止。
(2)若没有监听到任何信号,就传输数据。
(3)传输数据的时候继续监听。如果发现冲突,则执行退避算法。随机等待一段时间后,重新执行步骤(1)。
当冲突发生时,涉及冲突的计算机会返回监听信道状态。若未发现冲突,则表示发送成功。
如何控制传输过程中,数据发生错误的问题
利用 CRC循环冗余校验 。通过 XOR 异或的算法,来计算整个包是否在发送的过程中出现了错误。
https://www.cnblogs.com/Mayfly-nymph/p/11100021.html#N6FTYAKr
要注意的是,CRC循环冗余校验是硬件完成的,对于上层软件或用户来说是感觉不到的。因此,发送端对出错的数据帧进行重传是自动进行的,这种差错控制体质常简称为ARQ(自动重传请求/自动请求重传)
最大传输单元 MTU
PPP : 296 字节
以太网: 1500 字节
FDDI : 4352 字节
以太帧结构
以太帧起始部分由前同步码和帧开始定界符组成。后面紧跟着一个以太网报头,以MAC地址说明目的地址和源地址。帧的中部是该帧负载的包含其他协议报头的数据包,如IP协议。
前同步码:用来使接收端的适配器在接收MAC帧时能够迅速调整时钟频率,使它和发送端的频率相同。前同步码为7个字节,1和0交替。
帧开始定界符:帧的起始符,为1个字节。前6位1和0交替,最后的两个连续的1表示告诉接收端适配器:“帧信息要来了,准备接收”。
目的地址:接收帧的网络适配器的物理地址(MAC地址),为6个字节(48比特)。作用是当网卡接收到一个数据帧时,首先会检查该帧的目的地址,是否与当前适配器的物理地址相同,如果相同,就会进一步处理;如果不同,则直接丢弃。
源地址:发送帧的网络适配器的物理地址(MAC地址),为6个字节(48比特)。
是“粉丝”,是因为有一些人,扛着教 ...展开类型:上层协议的类型。由于上层协议众多,所以在处理数据的时候必须设置该字段,标识数据交付哪个协议处理。例如,字段为0x0800时,表示将数据交付给IP协议。
数据:也称为效载荷,表示交付给上层的数据。以太网帧数据长度最小为46字节,最大为1500字节。如果不足46字节时,会填充到最小长度。最大值也叫最大传输单元(MTU)。在Linux中,使用ifconfig命令可以查看该值,通常为1500。
帧检验序列FCS:检测该帧是否出现差错,占4个字节(32比特)。发送方计算帧的循环冗余码校验(CRC)值,把这个值写到帧里。接收方计算机重新计算CRC,与FCS字段的值进行比较。如果两个值不相同,则表示传输过程中发生了数据丢失或改变。这时,就需要重新传输这一帧。