计算机网络-----数据链路层
《数据链路层的几个共同问题》
《差错检测》
《点对点协议PPP》
《解决!ppp中的透明传输问题》
在PPP协议中帧的标志字段(表示一个帧的开始或结束)为0x7E(01111110)
转义字符为0x7D(01111101)
方法一:字节填充 ,适合于异步传输时
(1)数据字段遇到标志字段的编码则将0x7E -> 0x7D 0x5E
(2)数据字段遇到转义字符的编码则将0x7D -> 0x7D 0x5D
(3) 数据字段遇到 ASCII码的控制字符(数值小于0x20)则
以 0x03为例:将0x03 -> 0x7D 0x23
方法二:零比特填充 (适用于同步传输)
只要发现连续的5个1,则在后面添加一个0
《静态划分信道》
《复用》
波分复用其实就是光的频分复用
《码分复用》
解释:
各个站之间知道其他站所特有的码片序列
当某个站接收来自其他站的信息,因为各个站之间码片序列可以叠加
那么可能会收到如(-4,-3,2,1,-5,....)这样的序列
我们如何知道各个站到底发送的比特是什么呢?
用接受到的码片与其中的站的特有码片序列内积
得到1表示这个站发送1
得到-1表示发送0
得到0表示没有发送
其余同理
《CSMA/CD协议》
好博客<----
<由来与背景>
在广播信道的数据链路层中,需要共享信道
而共享信道面临的问题就是如何解决信道上 共享资源 的问题
我们有静态划分信道和动态接入控制的方案
其中动态接入控制中的随机接入是常用的方案
特点是所以用户可以随机地发送信息
这个特点避免不了的就是共享媒体上的“碰撞”问题
而这需要协议来解决:
<协议大致过程>
说明:
假设现在是B主机要发送帧
1、首先B要检测信道是否空闲,检测时间 等于 96bit发送出去的时间
如果检测到信道空闲,则发送帧
如果信道不空闲,则反复检测,直到检测到空闲
2,在B主机发送帧的过程时,是边发送边检测是否有碰撞发生
如果没有检测到碰撞,则继续将剩余的帧发送出去
如果检测到碰撞,则立即停止发生,并执行 截断二级制指数退避算法
3.若执行完退避算法后回到 1过程 反复执行
《更多细节》
《为何检测信道是否空闲的时间等于 96bit发送出去的时间?》
这个96bit时间被称为 帧最小间隔时间
其实以太网规定,其作用很多
其中一个是:为了使刚刚收到数据帧的站的接受缓存来得及清理
《碰撞是如何检测到的?》
B主机通过检测周边信道电压来判断有无碰撞,
一般主机在发送数据时,总线上的信号电压一般都是维持在一个正常的范围
但是当多个主机同时发送信息,导致信号波相互叠加(想象一下物理中波的叠加)
当信号电压变化幅度超过一定的门限值,说明发生了碰撞
《注意点》
首先检测到碰撞是要在主机他家门口才能检测到
说明检测到的时候(假设是B主机与C主机发送信息时发生了碰撞)
一定是B主机的信息和C主机的信息在 B主机 “家门口”相遇了
这间接说明了一个问题:
如果B主机(B站)发送了一个很短的帧,短到B站将这个帧全部发送完成后
都没有检测到碰撞,那么以后如果这个帧在总线上传播的过程中再与其他站发送的信息发生碰撞
那么B站是检测不出来的
因为B站的帧已经发送完成了,现在只有其他站的信息单方面过来到B站
这个时候B站也不会再重发这个帧(因为B站认为这个帧是没有问题地发送出去了)
我们不希望这样!
《改变!规定最短帧长》
以太网中规定了一个最短帧长64字节,即512比特
如果发送的数据非常少也要填充一些字节进去
《改变!强化碰撞》
《截断二级制指数退避算法 是什么?》
《补充基本概念----争用期》
解释:
如果总线太长,那么数据在中线中的时延也越长
这会导致主机在检测总线是否空闲时,越容易认为总线空闲
<争用期与最短帧长的关系>
我们知道最短帧长是为了防止信息还在总线上传输没有到目的主机时
发送站就已经将信息发送完了,从而有检测不到碰撞的现象
而一旦度过了争用期就说明这次传输是成功的,是绝对没有碰撞产生的
所以根据这两者之间微妙的关系我们可以得出
最短帧长= 争用期 * 数据传输速率
<信道利用率>
什么是信道利用率?
有效地 发送数据所需要的时间 占整个发送周期 的比率
解释一下下面这段时间是怎么回事:
首先T0是将整个帧全部发送出去的时间:为总帧长/传输速率
t 是因为整个帧不可能发送出去后就完了,数据还要在信道上传播
最长的传播时间就是端到端,这个时间是t
理想情况即假设不会发生碰撞
这个说明:
如果想要信道利用率尽量大,那么
1.以太网的连线长度不应该太长(太长t就很大)
2.帧不能太短(太短T0就很小)
《CSMA/CA》
<为什么要CSMA/CA?>
<细说隐蔽站问题>
首先我们要明确一下:碰撞能够检测到是因为碰撞发生在站的"家门口",否则检测不到碰撞
对于无线电波来说,其有自己的范围:
为何说A和C无法检测到碰撞?
因为A与C的电波都不能到双方的站上,即碰撞到不了他们的家门口
《细说CSMA/CA》
《MAC,IP,ARP协议》
《为何需要MAC地址?》
关于这个问题不如来看看这篇优秀的博客<----
总的来说,在IP地址出现之前,为了标识局域网(或者说小网络)上的各个主机
我们引入了MAC地址,其属于数据链路层
上述的局域网用的是总线型将各个主机连接起来,这也是局域网(以太网)最初的形态
到了后面各种网络结构出现,需要加入进网络的主机也逐渐变多
于是我们有了中介
集线器
于是我们有了进化版的 交换机
这张MAC地址表是如何建立起来的呢?
注意这里查不到就所有端口都发出去,这样通过广播的形式可以得到回复后
就记录以下,这个回复是的MAC地址以及从哪个端口来的,然后记录在MAC地址表中
《MAC地址的格式》
MAC地址有48位
前24位为: organizationally unique identifier 组织唯一标识符 OUI
后24位为:extended identifier 扩展标识符EUI
全称Extended unique idetifier 扩展唯一标识符
在MAC中可以进行 单播 广播 多播
单播
即是以广播的形式,让指定目的MAC地址的主机接收
广播
注意这里目的MAC填入的是FF-FF-FF-FF-FF-FF 即48位全部是1
让全部的主机都接收
多播(组播)
这里多播地址的
第一字节中b0是1,注意不要忽视这个细节
《IP地址》
《为什么需要IP地址?》
MAC地址是出现最早的地址,当时的局域网较小,使用MAC地址足够
但是随着网络的发展,越来越多的主机需要接入
如果还是按照原来MAC地址中MAC地址表来找要转发的主机
如:
那么交换机中的MAC地址表就会如下:
红色表示的是跨交换机进行查找
可以看到红色这样重复的太多了,一旦主机数量再多一点,
交换机的内存就爆了
为了解决上面MAC地址不灵活(太唯一了),交换机的局限性
我们有了IP地址和路由器
有了IP我们可以对不同局域网进行子网划分,当查表时更加灵活
同时有了路由器以及路由算法,路由中建立路由表,自动知道当要到目的IP
下一步要到哪个IP去
结合ARP协议,将IP->MAC(注意使用MAC地址,只能在局域网中使用,即只能在同一个网络中使用)
然后根据MAR帧在总线型局域网中的单播,就传给了下一个路由器/交换机
所以在各个不同网络中IP和MAC都是必要的
没有IP,那么不同网络之间的通信将会变的很艰难
没有MAC,那么相同网络之间的交流会变的不可能
(因为MAC地址是更早出现,已经是十分底层的东西了)
《IP地址和MAC地址在传播中的变化》
《ARP协议》
《为何需要ARP协议?》
因为需要将IP地址转换为MAC地址,好在局域网中(相同的网络中)通信
《ARP协议原理》
在这里首先需要提醒的是:
ARP高速缓存表在各个主机/路由器上
还有就是因为有了IP这个逻辑地址的出现,当我们谈论地址时
都是先拿IP地址说话
当主机B给主机C发送数据包,首先肯定是知道了源IP与目的IP
然后查看主机上ARP表,发现没有目的IP(有的话直接将源MAC地址和目的MAC地址加入首部帧中,单播发送出去)
然后
需要注意的是ARP请求报文是在MAC帧中发送出去的
还需要注意的是当目的MAC地址的主机受到后会讲源MAC地址的主机MAC地址首先
保存到自己的ARP表中
注意回复时是单播
总结来说就是:
ARP在主机
找得到目的IP对应的MAC,单播发送数据
找不到目的IP对应的MAC,广播请求
广播请求后,目的IP对应的主机更新自身ARP表,并单播回复
受到回复后源主机更新自身APR表,单播发送数据
《帧》
在数据链路层交互的数据单位为帧
帧由 帧首部 数据 帧尾部组成
数据链路层中协议的功能都体现在帧中
数据链路层的三个主要问题:
1.封装成帧
2.透明传输
3.差错检测
帧首部和尾部一般都是实现一些控制和功能的字段
首先来看看点对点PPP帧格式:
可以看到用于差错检测的FCS放在帧尾部
同时标志字段在帧首部的一个字段和帧尾部的最后一个字段都有
使用来判断一个帧的开始和结束
到后面会发现MAC帧没有这个标志字段,为何PPP帧有?
我们再来看看广播信道数据链路层
以太网MAC帧:
我们发现帧尾部只有FCS
帧首部为目的地址,源地址,类型
《集线器和交换机》
集线器工作在物理层
交换机工作在数据链路层
《交换机》
交换机的帧交换表的震荡(飘逸)要结合着以太网交换机自学习来理解
我们知道交换机其MAC表是自学习过来的
其自学习的过程就是看源地址从哪个端口过来
如图当A->B这个帧的信息到了以太网交换机2后
会登记 ( A ,2 ),因为这个帧的源地址为MAC (A)
其是从2号端口过来的
现在来详细说明一下广播风暴:
起初只是由一个主机H1发了个广播开始
因为是广播,则B 交换机在MAC表中记录下(H1,1)后便会向所有端口转发
即到了A,C交换机
同理A,C交换机在记录下MAC表后也开始了转发
很不巧的是这里有个环
这导致B->A->C->B 与 B->C->A->B 这样交换机之间不断循环转发的过程
同时以 B->A->C->B为例
B向A转发后,A向C转发,C再向B转发
因为帧中 的源地址都是H1的MAC,所以
当C->B时,这个帧是从2端口进入的
则B交换机MAC表会记录 (H1,2)
将我们上面(H1,1)的记录给替换掉了
重复上述步骤
这样的现象被称为交换机的帧交换表震荡
显然解决上述全部的问题的关系是让交换机之间的连接不能产生环
则就有了以太网交换机的生成数协议STP
《虚拟局域网VLAN》
《为何需要VLAN?》
不管是使用集线器还是交换机,有一个无法逃脱的点是:
扩大广播域
过大的广播域当某主机要发送广播时将是一个消耗资源巨大的行为
然而在网络中进行广播是常有的事情
为了避免过大的广播域,使得网络更加安全可维护
我们使用路由器来分割广播域
由于路由器现在还很贵,我们有一个根据经济且有效的方法:VLAN
相同VLAN之间可以相互通信,不同VLAN之间不能相互通信
可以看出VLAN的关键就是在于如何区分不同的VLAN
《虚拟局域网的实现》
首先为了区分不同的VLAN,我们对MAC帧动了手脚
到后面我们将MAC帧插入VLAN标签称为:“打标签”
去除VLAN标签称为“去标签”
需要注意到的是:
如果主机接受到的不是普通的MAC帧,而是像打了标签的MAC帧
那么主机将会认为这是个错误的帧,从而将其丢弃
交换机上的端口处理
这个交换机上端口的缺省VLAN ID是初始默认 VLAN ID的意思
VLAN ID 是区别不同VLAN ,给MAC帧打上标签的ID号
交换机开始时都应该有个初始值
同时交换机的端口类型一般初始是Access
<Access端口的处理方式>
<Trunk端口的处理>
本文作者:次林梦叶
本文链接:https://www.cnblogs.com/cilinmengye/p/17458938.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具