一篇带你串联计算机网络---数据链路层(计算机网络之数据链路层)

数据链路层:

学习数据链层,重点就要搞懂1、数据链路层解决什么问题2、数据链路层有什么功能(提供的服务);下面就这两个问题,具体讲讲其中的细节,请耐心看完,相信会有一个提升,建议根据目录学习,基本框架都在目录中有体现:

一:数据链路层解决什么问题:

从物理层讲到,物理层其实就是简单无脑的将上面比特流传递出去(即透明传输:无论哪种比特组合,都可以被传递。)所以,数据链路层的作用是加强物理层的传输比特流的功能 ,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对上一层(网络层)表现出一条无差错的链路。

二:数据链路层的功能:

1、成帧:将物理层传上来的比特流封装成帧;(什么是帧,为什么要成帧后面会讲)

2、差错控制:帧进行差错检测;

3、流量控制 、可靠传输:对发送端的发送速率进行限制;

4、信道划分介质访问控制:什么是信道划分介质访问控制后面会讲。

下面我们就从这4个功能讲一讲其中的细节:

补充一:

这里讲一下无差错传输,透明传输,可靠传输是什么:

1、无差错传输 :传输的比特不会发生错误(收到的数据没有错

2、透明传输:什么比特组合都可以在链路上传递

3、可靠传输 :发送端发什么,接收端就收到什么(收到的数据没有错,并且完整

数据链路层要干的活是保证无差错并且可靠:即保证收到的数据没有错,且是完整的。

功能一:成帧:

1、什么是帧:

多个比特组合起来就是帧。

2、为什么要成帧:

以帧为单位传输,是为了在出错时可以只重发出错的帧,而不必重发全部数据,提高效率。

3、怎么成帧:

常见的组帧的方式有4种:

1)字符计数法(脆弱,易受破坏):

在一串比特流中,每个帧的首部都用一个数字(计数字段)来表明接下来有几个比特是属于该帧的数据。

2)字符填充法(复杂):

帧开始用SOH标志,帧结束时用EOT标志。中间如果有SOH或EOT用ESC转义;

3)零比特填充法(常用):

帧的开始和结束都用01111110表示,中间如果出现连续的5个1就在最后一个1之后填充一个0;(5110)

4)违规编码法(常用):

用可能出现在比特组合的字符或比特来充当帧头帧尾,如曼彻斯编码中电平一定是有高有低的,可用"高高","低低"来填充;

功能二:差错控制:

1、为什么要差错控制:

由于在实际的传输过程不是理想的,期间可能会受外界的干扰,也可能受本身传输介质的干扰,会改变原来的数据。所以差错控制就是要保证不出错,出错了重传,或者可以直接修改(海明码)。

2、差错控制的方式有什么?

差错控制包括检错纠错

1)检错:
  • 接收检查到错误,然后告知发送端重传,不会改动其数据,如:奇偶校验,CRC循环冗余校验;
2)纠错:
  • 接收端检查到错误时,如果自己有能力恢复就自己恢复,不行就告知发送端重传。如海明检验 关于什么是奇偶检验,CRC循环冗余检验,海明校验,面试一般不会问,只需要知道有这些方式就行了,或者参考另外书籍。

功能三:流量控制:

1、什么是流量控制:

当接收方没有足够的能力来接收发送端发送过来的数据时,接收方就会通过一定的协议 告知发送端慢点发,或者别发了。显然,这里控制的是对发送端的发送速率的限制

2、怎么进行流量控制:

当然是接收方和发送方都遵守相同的协议!!!!

3、流量控制的方式:

1)停止-等待协议:

发送端发送一个帧后,必须等到收到来自接收端的确认(ACK)之后才能发送第二个帧,如果在一定的时间内收不到确认,那么发送端就会认为该帧丢失了,然后重传该帧。(也就是发送窗口为1,接收窗口也为1)

优点:简单易实现;

缺点:显然这种一个一个慢慢发方式的效率很低(信道利用率低)

停止-等待协议的优化:

使用流水线技术 :一次同时发送多个帧,但也必须等收到这些帧的确认帧之后才会发送第二组。

2)后退N帧协议(GBN):

发送端的窗口为有多个,接收窗口为1;

GBN的过程如下:

1)发送端可以发送其发送窗口内的数据,接收端接收一个帧就返回一个确认帧(ACK),只有当收到发送窗口的左边界对应的ACK时,发送窗口才会往右移动。(滑动窗口)。

2)接收端 采用稍待确认的方式返回ACK,即如果返回5号的ACK,说明5号及5号之前的所有帧都以正确接收。

3)超时重传: 如果发送端在一定时间内未收到已发送帧对应的ACK,认为有错,重传只重传第一个未确认即以后的所有帧之前确认过的帧不会重传。

注意事项:

1、发送窗口有一定的限制:如果用n个比特来标记帧的序号,那么发送窗口的大小为1~2^n-1

3)选择重传协议(SR):

选择重传协议是前面GBN协议的进一步改进,发送窗口有多个,接收窗口也有多个;

过程如下:

1)发送端可以发送其发送窗口内的数据,接收端接收一个帧就返回一个确认帧(ACK),只有当收到发送窗口的左边界对应的ACK时,发送窗口才会往右移动。(滑动窗口)。

2)接收端 采用稍待确认的方式返回ACK,即如果返回5号的ACK,说明5号及5号之前的所有帧都以正确接收,同时,也是当收到左边界对应是帧时接收端口才滑动。

3)超时重传: 如果发送端在一定时间内未收到已发送帧对应的ACK,认为有错,重传只重传哪些没有确认的帧。

这里利用王道讲解视频里的图片帮助大家理解记忆:

注意事项:

1、窗口也有一定的限制:如果用n个比特来标记帧的序号,发送窗口的大小为1~2^(n-1),,并且发送窗口大小等于接收窗口大小。

总结停止等待协议,GBN协议,SR协议:

无论哪种协议,都必须满足发送窗口大小➕接收窗口大小<=帧的编号个数

协议 发送窗口 接收窗口
停止等待协议 1 1
GBN协议 n 1
SR协议 n n

功能四:信道划分介质访问控制:

1、什么是介质访问控制以及解决了什么问题:

当很多个节点同时在广播信道上通信时,就很容易产生冲突,介质访问控制所要完成的就是把各个节点之间的通信逻辑上分隔开,使其不产生冲突

那么问题来了,什么是广播信道:可以理解为所有通信设备要通信都必须通过的那个物理信道。

2、怎么进行介质访问控制的?

当然还是通过各个节点要发数据时遵守相应的协议。

3、介质访问控制的类型:

介质访问控制(MAC,medium acess control):包括静态划分信道 (信道划分介质访问控制)和动态划分信道(随机访问介质访问控制、轮询访问介质访问控制);

静态划分信道的方式包括:

1)频分多路复用FDM(并行,共享时间):

不同用户分配不同的频带,在通信过程中始终占用这个频带;显然,所有用户在同一时间占有不同的带宽资源;

优点:

1、充分利用传输介质的带宽,效率高

2、技术成熟,容易实现

2)时分多路复用TDM(并发,共享空间):

将时间划分为一段一段的等长的复用帧(TDM帧),在一个TDM时间内,所有用户轮流占用该信道。

显然这种方式的缺点就是如果用户通信间隔大,会造成宽带资源的浪费。

改进的TDM:统计时分复用STDM:

用一个集中器收集数据,所有用户先到先收集且先发送;不会说要等到另一个周期用户才能发送数据

3)波分多路复用WDM:

利用光来传播,使用合播器将光糅合在一起发送,到接收端使用分波器分离这些光。

4)码分多路复用CDM:

使用码片的概念,通过一定的计算(使用CDMA方式),讲发送的比特序列糅合成一个,最后在接收端再分开。(这些静态划分信道的方式不是很重要,稍微过一遍就好了)

动态划分信道:

1、随机访问介质访问协议:

包括ALOHA、CSMA、CSMA/CD、CSMA/CA协议,下面具体说说这4种协议的过程。

1)ALOHA协议:

ALOHA协议包括纯ALOHA协议和时隙ALOHA协议-

  • 纯ALOHA协议:用户想法就发,冲突就在下一个随机时间重传。

  • 时隙ALOHA协议:用户只能在一个时间片的开始发送数据,冲突就在下一个随机时间重传。

2)CSMA协议:

解决的是ALOHA冲突太多的问题;

又称:载波监听多点接入;

具体分为以下三种:

  • 1-坚持CSMA:用户先监听信道,信道空闲就发送,信道忙时一直监听

    • 优点:媒体利用率高;
    • 缺点:冲突太多;
  • 非坚持CSMA:用户先监听信道,信道空闲就发送,信道忙时一直等待下一个随机时间再监听,重复操作

    • 优点:一定程度上减少了冲突;
    • 缺点:媒体利用率低;
  • p-坚持CSMA:用户先监听信道,信道空闲以p的概率直接发送,以1-p的概率等待下一个时间槽在发送,信道忙时一直监听;

    结合了以上两者的优点,既保证了少冲突,也保证了高媒体利用率。当然也综合了以上两者的缺点,但是利大于弊,这点上经过证明的,不然怎么会有这个方式!!!!!!

以上三种CSMA协议在传输过程中即使有冲突,也会坚持把数据发送完,很浪费资源。

3)CSMA/CD协议:

又称:载波监听多地接入/碰撞检测;

解决CSMA协议在传输过程中即使有冲突,也会坚持把数据发送完的问题;也是总线型以太网使用的介质访问控制的方式。

  • CSMA/CD协议过程: 用户先监听信道,空闲时就发送,而且在发送的过程一直监听,一但有碰撞,就立即停止发送。-

  • "检测到碰撞"的标准

    这里 "检测到碰撞"的标准:当某点在传输数据时,有别的信号传入该点;

  • 最小帧长:

    由于检测到碰撞的标准,发送端的传输时延必须 >=2倍的往返时延RTT, 这样才能保证在发送数据的过程中能全方位的检测到碰撞。(传输时延=帧长/传输速率,当设备确定了传输速率也就确定了,所以帧的最小长度(最小帧长)被限制了);

  • 截断二进制指数规避算法:

    当然,如果检测到碰撞,会触发重传,重传时机也是有一定的算法的,也就是截断二进制指数规避算法。具体算法细节不用记住,不是面试的重点,不过有兴趣也可以学习,相对简单。

    需要注意的事项:

1、CSMA/CD协议:不应用于无线局域网,原因:

  • 1)无线局域网的网络拓扑复杂,CSMA/CD无法做到全方位的碰撞检测;
  • 2)CSMA/CD协议存在"隐蔽站"问题。

2、什么是隐蔽站问题:

当A节点和C节点检测不到信号的输入时,A和C都认为信道上空闲的,如果此时A和C同时向B发送数据,就会发生碰撞,但是在最开始就检测却检测不出,这就导致没法准确判定此时能不能发送数据了。

4)CSMA/CA协议:

又称:载波监听多地接入/碰撞避免;

解决了CSMA/CD中隐蔽站的问题,所以,CSMA/CA在无线局域网中应用;

CSMA/CA过程:

1、用户先监听信道:

  • 信道空闲时:

    1)发送端发出RTS(Request To Send):请求发送数据;

    2)接收端收到RTS后响应CTS(Clear To Send):表示清楚其他节点的发送权;

    3)发送端收到CTS后开始发送数据,并预约信道,告知其他站点自己要发送多久数据;

    4)接收端接收到数据后,采用CRC检错,若正确,响应ACK确认帧,若错误则重传;

  • 信道忙时:一直等待;

2、轮询访问介质访问协议:

轮询访问介质访问协议包括轮询协议、令牌传递协议,下面说说这两种协议的过程:

1)轮询协议:

很简单,就是主节点"邀请"从节点发送数据;

2)令牌传递协议:

令牌是一个特殊格式的MAC控制帧,不含任何信息,每个节点都可以在一定时间内(令牌持有时间)获得发送数据的权利,但也并不是无限制地持有令牌;

应用于令牌环网;就是一个拓扑结构为环型的网络!!

过程:

1)拿到令牌的主机修改令牌的标志位,表示令牌被占用了;

2)数据帧沿环路传输,如果转发到的站点是目的站点,则目的站点就复制该数据帧;

此时完成了数据的传输!!!!

3)当令牌再次回到源站点时进行检错,如果无差错,则认为此处的数据传输成功,否则重传。

最后

数据链路层的就已经讲解完成。但是,想要更好的了解、学习,我们还需要对数据链路层的设备(网桥、交换机 )有一个了解,而网桥、交换机通常都是工作在局域网,广域网 中的,所以,我们还需要对局域网、广域网进行学习。如果想继续学习,关注关注me,下一篇就讲解局域网,广域网!!!!!

相关推荐
小飞猪Jay1 小时前
面试速通宝典——10
linux·服务器·c++·面试
数据分析螺丝钉2 小时前
力扣第240题“搜索二维矩阵 II”
经验分享·python·算法·leetcode·面试
无理 Java2 小时前
【技术详解】SpringMVC框架全面解析:从入门到精通(SpringMVC)
java·后端·spring·面试·mvc·框架·springmvc
鱼跃鹰飞3 小时前
Leecode热题100-295.数据流中的中位数
java·服务器·开发语言·前端·算法·leetcode·面试
TANGLONG2223 小时前
【C语言】数据在内存中的存储(万字解析)
java·c语言·c++·python·考研·面试·蓝桥杯
狐小粟同学4 小时前
链表面试编程题
数据结构·链表·面试
码农超哥同学6 小时前
Python知识点:如何使用EdgeX Foundry与Python进行边缘计算
开发语言·python·面试·编程·边缘计算
码农超哥同学6 小时前
Python知识点:如何使用OpenFaaS与Python进行无服务器边缘计算
python·面试·serverless·编程·边缘计算
杰哥在此6 小时前
Python知识点:如何使用Hadoop与Python进行大数据处理
开发语言·hadoop·python·面试·编程
TANGLONG2227 小时前
【C语言】字符和字符串函数(2)
java·c语言·c++·python·考研·面试·蓝桥杯