【计算机网络】数据链路层-基本数据链路层协议

article/2025/11/1 14:35:05

【计算机网络】数据链路层-基本数据链路层协议

协议1:一个乌托邦式的单工协议

单工协议即数据只能单向传输。这个协议假设信道永远不会丢失或损坏帧,接收方的处理能力足够快,缓冲区足够大。

发送程序无限循环,接受程序响应事件,协议1中不包含流量控制和纠错功能。

协议2:无错信道上的单工停-等式协议

发送方的速度如果过快,接收方会被淹没,除了增强接收方的处理能力,可以让接收方给发送方发送反馈,发送方收到后才可以发送下一帧。

发送程序无限循环并等待接收方确认,接受程序响应事件后发送确认帧。

协议3:有错信道上的单工停-等式协议

有错信道上传输数据需要增加校验,接收方仅在数据正确时发送确认帧。但在确认帧丢失的情况下(超时),发送方将重发。接收方难以判断帧是重发还是新发,因此帧前加上序号以区分。

重复的帧也会收到确认帧,以便发送方决策。

停止等待协议(Stop-and-Wait Protocol)

停止等待协议是tcp保证传输可靠的重要途径,”停止等待”就是指发送完一个分组就停止发送,等待对方的确认,只有对方确认过,才发送下一个分组.

无差错情况

无差错情况:发送方发送分组,接收方在规定时间内收到,并且回复确认.发送方再次发送……

1734701-20191112201952308-1248554421.png

超时重传的情况

1.分组丢失:发送方发送分组,接收方没有收到分组,那么接收方不会发出确认,只要发送方过一段时间没有收到确认,就认为刚才的分组丢了,那么发送方就会再次发送.
2.确认丢失:发送方发送成功,接收方接收成功,确认分组也被发送,但是分组丢失,那么到了等待时间,发送方没有收到确认,又会发送分组过去,此时接收方前面已经收到了分组,那么此时接收方要做的事就是:丢弃分组,重新发送确认.
3.传送延迟:发送方发送成功,接收方接收成功,确认分组也被发送,没有丢失,但是由于传输太慢,等到了发送方设置的时间,发送方又会重新发送分组,此时接收方要做的事情:丢弃分组,重新发送确认. 发送方如果收到两个或者多个确认,就停止发送,丢弃其他确认.

1734701-20191112202120626-1712022751.png

优缺点

停止等待协议的优点是简单,但是缺点是信道的利用率太低,一次发送一条消息,使得信道的大部分时间内都是空闲的,为了提高效率,我们采用流水线传输,这就与下面两个协议有关系了.

错误的控制

ARQ(自动重复请求)实现错误控制

  • 如果正确的接收,那么接受方会发送一个"ack"帧给发送方
  • 如果发送方没有收到接受方回复的"ack"帧,那么发送方会设置计时器并重新发送传输帧

为了确保正确性,必须对框架和ack进行编号

  • 接收机需要区分重传(由于丢失ack或提前定时器)和新帧,对于stop和wait,2个数字(使用1位)就足够了

滑动窗口协议

滑动窗口的概念

发送方拥有着一个窗口,这个窗口里面装着可以发送的帧

  • 它需要暂时存储这些帧,因为这些帧可能被重传
  • 当这个窗口接受到确认帧后,它就会向前移动

接受方拥有着一个可以接受帧的窗口

  • 它要为将要到来的帧预留空间
  • 这个窗口随着按顺序到来的帧而逐渐向前移动

1734701-20191112204344472-243096895.png

一开始的时候,接受方可以接受一个帧,发送方之后发送了一个帧。接受方接受了这个帧之后,可以向后滑动一个单位,准备接受下一个帧,当发送方得到接受方回复给它的确认帧ack之后,继续向后滑动一个窗口,准备发送下一个帧。

滑动窗口协议的特点

  • 只有接受窗口向前移动的时候,发送窗口才会向前移动
  • 从滑动窗口的概念来看,停止等待协议、回退N协议和选择重传协议只不过是发送窗口和接受窗口的大小不同
    • 停止等待协议:发送窗口和接受窗口大小都是1
    • 后退N协议:发送窗口>1,接收窗口大小为1
    • 选择重传协议:发送窗口>1,接受窗口大小>1
  • 当接收窗口大小为1的时候可以保证有序的被接收
  • 数据链路层中,传输过程中滑动窗口的大小是固定的

可靠的传输机制

  • 捎带确认:接收方在会给发送方发送一个确认帧来告诉发送方收到了
  • 超时重传:在发送某个数据帧之后,就开启一个计时器,开始计时,一旦超过某段时间还没有收到确认帧,就重新发送该数据帧

自动重传请求ARQ:接受方请求发送方重新发送出错的数据帧来恢复出错的帧,传统的自动重传分三种

  • 停止等待ARQ
  • 后退ARQ
  • 选择性重传ARQ
    窗口开的够大的时候,帧在线路上可以连续的流动,因此又称连续的ARQ协议

回退N协议

之前协议存在的问题?

过长的往返时间严重影响带宽的利用率

如何提高带宽的利用率?

发送端在收到确认之前,连续发送多帧

回退N协议的过程

  • 发送窗口的大小>1,接收窗口的大小=1
  • 接收端发现某一帧发生差错时,直接丢弃所有后续的帧,对丢弃帧不发送确认
  • 数据链路层除了接收应该递交给网络层的下一帧之外,拒绝接收其它任何帧
  • 发送方最终会超时,将按顺序重传所有未被确认的帧,即从最初受损或丢失的那一帧开始
  • 接收端接收帧的顺序和发送端发出帧的顺序相同

1734701-20191113143205596-1020968708.png

回退N协议窗口大小的选择

  • 用n表示序号字段长度;2^n表示发送端可发送帧的序号个数
  • 发送窗口尺寸w应为2^(n-1)

回退n协议的适用情况

  • 回退n帧协议,如果错误率较低时,工作的很好
  • 但错误率较高时,就会浪费大量的带宽在重传上

选择重传协议

选择重传协议的特点

  • 接收方的数据链路层存储坏帧之后的所有正确的帧,当发送方得知某个帧出错时,只是重传此坏帧,而不是所有的后继帧
  • 在这个协议中,发送方和接收方都维持一个可接收序列号的窗口
  • 接收窗口的大小>1,并为窗口中的每个序列号都提供一个缓冲区,每个缓冲区用一位判断其是否为空
  • 当某一帧到达时,接收方检查其序列号,看其是否落在窗口内
  • 如果落在窗口内且从未接收过,就接收并存储
  • 接收到的此帧保存在数据链路层,而不交给网络层,直到比它序列号小的所有帧都按次序已交给了网络层,此帧才能提交给网络层
    1734701-20191113173906867-2062364742.png

选择重传协议的窗口大小

窗口大小应为2n/2=(MAX_SEQ+1)/2

数据链路层协议实例

PPP(Point to Point)协议

点对点协议,提供了在点对点链路上传输多种协议数据包的一种标准方法。

PPP功能

  • 处理错误检测链路的配置
  • 支持多种协议
  • 允许身份认证等

PPP提供了3个主要特征

  • 成帧方法。它可以毫无歧义地分割出一帧的结束和下一帧的开始。并且帧格式支持错误检测
  • 链路控制协议(LCP)。可用于启动线路、测试线路、协商参数,以及不需要线路时关闭线路
  • 协商网络层选项的方法。协商方法与所使用的网络层协议独立。所选择的方法对于每种支持的网络层都有一个不同的网络控制协议(NCP)。支持的网络层协议有IPv4、IPv6、IPX和AppleTalk等

PPP帧格式

1734701-20191113174747020-421077405.png

若Flag字节出现在Payload字段中,则需要用转义字节0x7D去填充,然后将紧跟在后面的那个字节与0x20进行XOR操作

PPP链路建立到释放的状态转换图

1734701-20191113174835754-1721681428.png

PPP建链路的具体过程

  • LCP协商,协商内容包括除RFC1661中所定义的选项之外,还要考虑PPPOA和PPPOE协议中规定的内容
  • LCP协商过后就到了Establish阶段,开始PAP或CHAP认证
    • PAP为两次握手认证,口令为明文。PAP认证过程如下:发送用户名同口令到认证方,认证方查看是否有此用户,口令是否正确,然后发送相应的响应
    • CHAP为三次握手认证,口令为密文(密钥)。CHAP认证由认证方发送一些随机产生的报文,交给被认证,被认证方用自己的口令字用MD5算法进行加密,传回密
      文,认证方用自己保存的口令字及随机报文用MD5算法加密,比较二者的密文,根据比较结果返回响应的响应
  • 认证成功即进行Network阶段协商(NCP),在IP接入中主要是IPCP协商(如IP地址和DNS地址的协商等)。任何阶段的协商失败都将导致链路的拆除。
  • 协商成功,则链路建立成功,可以开始传输网络层数据报文

SONET上的数据包

SONET(同步光网络)

  • 物理层协议
  • 最常被用在广域网的光纤链路上
  • 提供了一个以定义良好速度运行的比特流,如2.4Gbps的OC-48链路

1734701-20191113175209919-1308349275.png
IP包被承载在PPP帧中通过SONET线路传输

ADSL

ADSL使用的协议和设备的概貌

1734701-20191113175321085-463202874.png

  • 在PPPOE应用中,CPE将PC上的以太网帧(携带PPP帧)通过ATM网络桥接到集中路由器(Aggregation Router)上
  • 当CPE为ADSL Modem时,PC为PPPOE Client,运行PPPOE模拟拨号软件先将用户数据封装为PPP,再将PPP封装到以太网帧中,PPP中相关的验证信息将会送给集
    中路由器进行PAP或CHAP验证
  • 通过验证之后,PC会以IPCP协商的形式从集中路由器获得IP地址

http://chatgpt.dhexx.cn/article/dqgnNrek.shtml

相关文章

数据链路层协议(Ethernet、IEEE802.3、PPP、HDLC)

​​​​​数据链路层协议 首先Ethernet、IEEE802.3、PPP和HDLC都是数据链路层的协议,只不过后面三个不常用而已,数据链路层最常用的协议是Ethernet以太网协议。 Ethernet和IEEE802.3属于以太链路层协议 广域网中经常会使用串行链路来提供远距离的数据…

计算机网络之数据链路层协议总结

数据链路层 1.数据链路层介绍2.ARP协议2.1 ARP的工作流程2.2 ARP数据报格式 3.NAT技术3.1 NAT转换过程3.2 NAPT技术(动态NAT重载) 4.DNS技术4.1 域名层级关系4.2 域名解析流程 5. ICMP协议5.1 ICMP功能5.2 ICMP类型 1.数据链路层介绍 数据链路层主要负责…

(SQL)修改表结构[字段类型]、表字段长度,

①:更改字段类型长度 ALTER TABLE 表名 ALTER COLUMN 字段名 类型的长度–varchar(50) 例:把城市表的城市字段原来长度为20改为30 ALTER TABLE city ALTER COLUMN cname varchar(30) ALTER TABLE #temp ALTER COLUMN bmmc NVARCHAR(30)②&#xff1…

表字段长度的修改

设置后,即可完成sqlserver数据库表字段长度的修改 超时修改:

用命令语句修改mysql某字段长度

在MySQL中修改某个字段的长度,需要使用ALTER TABLE语句,具体操作如下: 假设要修改表A中的字段col1的长度为50。 ALTER TABLE A MODIFY col1 VARCHAR(50); 以上语句中,MODIFY关键字用于修改表结构,VARCHAR(50)用于指定…

开发人员各种鄙视链

最近几年经常在网络上看到各种程序员鄙视链,其实真实情况是我们都很忙,每天 Bug 都调不玩,哪里有空鄙视这,鄙视那。所以很多的的鄙视链大家自己看看,笑一笑就过了,不要太过认真。 1、穿衣服也是有讲究的 2、…

趣图《程序员鄙视链》

小编推荐:Fundebug提供JS错误监控、微信小程序错误监控、微信小游戏错误监控,Node.j错误监控和Java错误监控。真的是一个很好用的错误监控费服务,众多大佬公司都在使用。 最近几年经常在网络上看到各种程序员鄙视链,其实真实情况是…

程序员鄙视链至今还存在,你咋想不通呢?看完给你理清思绪

前天本来想去githup上交流一下技术问题,顺便薅点源码玩玩。结果不小心打开了一个阿里朋友的博客。在他的文档下有特别多奇葩的留言: 什么PHP是世界上最好的语言~ Python是能上天的语言~ java最无敌~ C藐视一切 Gonang牛皮~ 这样的观点至今在互联网上…

从程序员鄙视链看IT圈职场晋升密码,你修炼到了第几层?

作为一名IT程序员工程师,在2020年疫情后严峻的就业环境下,对于求职择业和职场晋升可谓体会颇深了。 亲眼目睹身边的好友因企业业务收缩而被辞退的痛楚,汇智妹猛然发现:“优胜劣汰”的生存法则,不光存在于自然界的食物链…

无代码开发,站到了程序员鄙视链顶端

文章目录 无代码开发,站到了程序员鄙视链顶端1.只花 72 小时完成一个危机管理软件项目2.巨头们已经开始激战3.无代码给 IT 技术人带来的挑战后记 无代码开发,站到了程序员鄙视链顶端 “无代码”不是在"淘汰”开发者,而是给予开发者更大挑…

程序员鄙视链python_程序员的鄙视链,请勿对号入座

原标题:程序员的鄙视链,请勿对号入座 在软件工程师(中国叫做「程序员」或「码农」)的圈子里,文人相轻的现象可是非常严重的,在程序设计的各个领域里都有着错综复杂的「鄙视链」。 最近这几年在世界各地突然吹起了一股全民写程序的…

图解程序员鄙视链(这回称得上是真的链表了吧)

简评:自古文人相轻,程序员的世界也存在着错综复杂的「鄙视链」。从程序语言、编辑器、平台到{ 是写在 if 的同一行还是下一行,不同阵营的人都习惯鄙视来鄙视去。而「你用什么程序语言?」更是大家最热衷的一条鄙视链。本文就为大家…

程序员鄙视链至今还存在,你为什么还想不通?

前天本来想去github上交流一下技术问题,顺便薅点源码玩玩。结果不小心打开了一个阿里朋友的博客。在他的文档下有特别多奇葩的留言: 什么PHP是世界上最好的语言~ Python是能上天的语言~ java最无敌~ C藐视一切 Gonang牛皮~ 这样的观点至今在互联网上还能…

站在程序员鄙视链的最顶端,真香!!

作为程序员你被鄙视过吗? 程序员群体中有一条无形的鄙视链。在现实中最直观的表现就是薪资差异。 据最新调查报告显示,全国范围内,程序员年薪达到50万以上的,仅占1.9%。 △数据来源: 《2018年中国程序员薪资生活调查报告》 如果你…

关于程序员鄙视链,哽咽~

点击上方“芋道源码”,选择“设为星标” 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2019 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数…

程序员之间的各种鄙视链

听说 有品位的程序员 都关注了 程序员的幽默(ID:humor1024)整编 素材参考自:网络 朋友圈有鄙视链, 相亲有鄙视链, 程序员圈也有鄙视链 看完下面的鄙视链, 你是那一层? ↓↓↓↓ 【0】…

程序员鄙视链, 所有工程师都鄙视php工程师, 为什么

有人的地方就有江湖。 有江湖的地方就有厮杀。 程序员之间的厮杀,从未停止过! 最近程序员鄙视链,刷屏了~ 我相信程序员的内心是这样的: 不是说好了的吗?PHP是世界上最好的语言! 翻翻知乎上的讨论&#xff1…

程序员鄙视链最全图解,好有道理

最近几年经常在网络上看到各种程序员鄙视链,其实真实情况是我们都很忙,每天 Bug 都调不完,哪里有空鄙视这,鄙视那。所以很多的的鄙视链大家自己看看,笑一笑就过了,不要太过认真。 这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫…

程序员鄙视链

前言 本文首发公众号【一名打字员】 程序员鄙视链相信大家都有所耳闻,今天我们就来好好说一说程序猿间的鄙视链,文中配图均来自互联网。 鄙视链 最近程序员间的鄙视链特别火,因在某节目《xxx大会》上,某段子手程序员讲了一个咱打字…

关于程序员鄙视链

大家一定听说,程序员之间存在着极其丧心病狂的鄙视链。写汇编语言的工程师都鄙视写C语言的工程师 写C语言的工程师都鄙视C工程师 Java工程师和C#工程师则相互鄙视 然而,所有的工程师都鄙视PHP工程师。 为什么几乎所有程序员都会鄙视PHP为什么几乎所有程序…