计算机网络(第6版) WriteBy 谢希仁 —— 数据链路层
计算机网络(第6版) WriteBy 谢希仁 —— 数据链路层
-
前言
这里开始变得重要了哦,虽然是这样,但是对于应用程序的开发人员来说,对该层我们也是不可控的。
数据链路层主要使用点对点通信信道和广播通信信道。
所谓的点对点就是一对一;广播就是一对多
数据链路层的研究范围是在同一局域网下的节点是如何通信的(分组是如何转发的)
-
一些名词解释
链路:一个节点到相邻节点的一段物理线路(有线或无线)
数据链路:一种概念,表示链路+协议。(链路就像一条水管,协议控制着水怎么在里面流)
帧:数据链路层的数据单元,就是将网络层的数据封装了一下,添加了首部和尾部。
-
三个基本问题
数据链路层的协议很多,但是他们都面临着三个问题:封装成帧、透明传输和差错检测
-
封装成帧
数据链路层会将网络层交付的数据添加首部和尾部,这就封装成了一个帧,首部和尾部就标识了该帧的开始与结束。
帧长 = 首部长度 + 数据段长度 + 尾部长度。
MTU(最大传输单元) —— 数据部分长度限制,看图:
帧定界符:就是表示一个帧的开始与结束的标志。=> 有个场景,如果发送端发送的时候,突然“掉线”了,那么接收端就永远不会收到帧结束符。等到下一个帧的帧开始符到达时,接收端就知道上一个帧不完整了,就会把它丢弃。
-
透明传输
这个问题与数据链路层的机制有关系。数据链路层奉行一种“来者不拒”的理念,“只要给我的,我都要”,对于帧的隔离,识别比特流中的定界符就好了。也就是说,数据链路层并不知道你传的内容是些什么玩意儿,它只负责去“截断”(找到帧开始符合帧结束符)。所以,什么样的比特组合都能通过该层。对于这些比特流而言,数据链路层就好像不存在一样。
但是这样会引发一个什么样的问题呢?对于文本数据还好说,里面的内容都是键盘上录入进去的,帧开始符和帧结束符找两个用户录入不进去的字符就好了。可是,如果是一些音视频或者其他的比特流,很难保证里面其中一个字节的比特组合不会与帧开始符和帧结束符不同(毕竟对于数据链路层来说,它唯一能做的就是扫描字节,找到帧定界符)。
如果数据段中出现了“帧开始”符,那么前面的数据就会被丢弃;如果数据段中出现了“帧结束符”,那么后面的数据就会被丢弃。
为了解决该问题,发送端在数据链路层封装成帧的时候,如果数据内容里面出现了帧定界符,那么就在对应的字节前面添加一个转义字符,如果转义字符也重复了,那么就再添加一个转移字符。=> 该过程称作字节填充或者字节填充。
-
差错检测
比特差错 => 世界上没有完美无暇的东西,总会出问题的。数据在传输的过程中,可能会出现0变成1,或者1变成0的情况。
泼出去的水无法改变,那就只能在收到的时候,利用各种手段去检测数据是否完整了。
在数据链路层,广泛采用循环冗余检验CRC检错技术 => 其实就是数据段后添加一个冗余码(帧检验序列FCS) => 发送端根据一定的算法生成,接收端根据一定的算法检测(别问,问就是了解就行了,难道我还要把算法的逻辑说出来嘛,呜呜呜)。
值得一提的是,FCS的生成和CRC的运用,都是在硬件层面进行的,非常之快。
数据链路层只能以一种无限接近1的概率向上抛出帧,保障帧无差错。
但是依然会出现这三个问题:帧丢失、帧失序、帧重复 => 不能提供可靠的传输服务
-
-
点对点协议PPP
-
概念
PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议。
-
PPP协议的帧格式
- 首部和尾部的那个“F”表示PPP帧的定界符 => 连续两帧之间只需要用一个标志字段 => 如果出现连续两个标志字段,就表示这是一个空帧,应当丢弃。
- “A”和“C”是保留字段,没有什么用
- 协议字段看得懂的嘛,2字节 ,基本上就是IP协议
- FCS也看得懂的嘛,2字节,可以进行CRC
**字节填充(异步传输):**PPP使用异步传输时,会进行字节填充(上文有说什么是字节填充)。
**零比特填充(同步传输):**只要发现有5个连续1,则立即填入一个0(填充的是IP数据报中的内容)。
感兴趣的小伙伴,可自行做更深入的了解。
-
-
CSMA/CD协议
其实这个协议在现代交换机的发展下,运用得越来越少了,不过这里还是简要的介绍一下吧。
我们假设多台计算机接入了同一条通信线路,我们将之称作总线。这些主机其中有一台要发送信息时,都会占用整条信道的资源,其他主机就无法发送信息。就像我们饭桌谈话一样,话筒只有一个,想要发言只能取争夺这个话筒,大家都懂的嘛,只要出现了资源的竞争,那就会引发一系列的问题。CSMA/CD协议的出现就是为了解决该问题的。
CSMA/CD(Carrier Sense Multiple Access with Collision Detection,载波监听多点接入/碰撞检测)是一种用于局域网中的介质访问控制协议,主要应用于有线以太网环境。
载波监听(CS):在发送数据之前,节点会先检测网络信道是否空闲,如果信道忙,则等待直到信道变为空闲 。
多点接入(MA):多个网络节点共享同一通信媒介,如以太网中的双绞线或同轴电缆。
碰撞检测(CD):在数据发送过程中,节点会持续监听信道,以便检测是否有其他节点同时发送数据导致的冲突。如果检测到冲突,节点会立即停止发送数据,并发送一个干扰信号(Jamming Signal)以通知其他节点冲突的发生。
冲突处理:一旦检测到冲突,节点会采用二进制指数退避算法,随机等待一段时间后再次尝试发送数据。如果连续多次重传失败,节点将放弃发送,并通知上层协议处理错误 。
最短帧长:以太网规定了最短帧长,以确保在发送过程中有足够的时间来检测可能发生的冲突。
了解一下就行了,随着交换机技术的发展,CSMA/CD协议在现代网络中的应用逐渐减少,因为交换机通过提供专用的通信路径来避免冲突,从而大大提高了网络的性能 。
-
MAC层
-
硬件地址
相信大家都听过一个词,叫做“MAC地址”,到底是一个什么东西呢?
它就是一个硬件地址,网卡(或者说网络适配器)厂商在生产的时候,写死在硬件里面的,全球唯一的。
网络适配器有过滤功能。每收到一个MAC帧,先用硬件检测一下MAC帧中的硬件地址,看一下是不是发往本站的。是,则收下;不是,则丢弃。
-
MAC帧的格式
-
目的地址:目标主机的MAC地址
-
源地址:发送主机的MAC地址
-
类型:标志上一层使用的什么协议(基本上都是IP协议)
-
数据:嗯呐,这个还需要怎么解释呢。。。至于说为什么至少是46字节,这个问题,感兴趣的可以自行去查询。 => 这个话题的谈论有点费笔者。。。哈哈。。。
-
FCS:还需要说嘛。。。
-
前同步码和帧开始定界符:前同步码是为了调整接收端的时钟频率,使其和发送端的时钟频率同步。帧开始定界符是为了告诉接收端,后面的MAC帧要来喽,注意查收。。。 => 用SONET/SDH进行同步传输时则不需要用前同步码,因为在同步传输时收发双方的位同步总是一直保持着的
-
-
-
网桥
在现代网络中,交换机已经基本取代了网桥的角色。 => 继承并进行了扩展
- 网桥是一种工作在数据链路层的网络设备,主要用于连接和分割局域网中的不同网络段。
- 它通过读取数据帧的目的地地址来决定是否将帧转发到其他网络段,从而实现流量的控制和冲突域的隔离。
- 网桥具有自学习能力,能够构建MAC地址表以优化帧的转发路径。
感兴趣自行深入研究啦!!!
**结语:**没事多看看,哈哈。。。一些不太清楚的,可以问AI和百度。。。有错的可以指出,呜呼!!!

