当前位置: 首页 > news >正文

计算机网络---数据链路层上

文章目录

  • 1. 数据链路层的功能
  • 2. 组帧
    • 2.1 字符填充法
    • 2.2 字节填充法
    • 2.3 零比特填充法
    • 2.4 违规编码
    • 2.5 总结
  • 3. 差错控制
    • 3.1 检错编码
      • 3.1.1 奇偶校验
      • 3.1.2 循环冗余校验码(CRC)
      • 3.1.3 总结
    • 3.2 纠错编码(海明校验码)
    • 3.3 总结
  • 4. 流量控制 & 可靠传输
    • 4.1 停止 - 等待协议(S-W)
    • 4.2 后退N帧协议(GBN)
    • 4.3 选择重传协议(SR)
    • 4.4 总结
  • 5. 三种协议的信道利用率分析
    • 5.1 S-W
    • 5.2 GBN & SR
    • 5.3 总结

1. 数据链路层的功能

在这里插入图片描述

    1. 数据链路层使用物理层提供的**“比特传输”**服务
    1. 数据链路层为网络层提供服务,将网络层的 IP数据报(分组) 封装成帧,传输给下一个相邻结点

物理链路:**传输介质(0层)+ 物理层(1层)**实现了相邻结点之间的“物理链路”

逻辑链路:数据链路层需要基于“物理链路”,实现相邻结点之间逻辑上无差错的“数据链路(逻辑链路)”

在这里插入图片描述

2. 组帧

在这里插入图片描述

2.1 字符填充法

在这里插入图片描述
再次强调:首部计数字段所记录的帧长 = 计数字段长度 + 帧的数据部分长度

2.2 字节填充法

在这里插入图片描述
总结:

  • 发送方发送:只要遇到特殊字符,如:SOH、EOT、ESC等,就在这个特殊字符前面加上一个ESC(转义字符)
  • 接收方接收:只要遇到ESC(转义字符),就丢掉这个ESC,然后跳过一个字符,去接着看跳过字符后面的内容

2.3 零比特填充法

在这里插入图片描述
总结:

  • 发送:每当遇到连续5个1,就填充一个0
  • 接收:每当遇到连续5个1,就删掉后面的0

2.4 违规编码

在这里插入图片描述

2.5 总结

在这里插入图片描述

3. 差错控制

在这里插入图片描述

3.1 检错编码

3.1.1 奇偶校验

在这里插入图片描述

  • 奇校验码:有效信息位和校验位(整个校验码)中“1”的个数为奇数
  • 偶校验位:有效信息位和校验位(整个校验码)中“1”的个数为偶数

在这里插入图片描述

异或运算,符号:⊕\oplus。运算规则:

    1. 相同为0,相异为1
    1. 无进制加法,进制指二进制,即:0 ⊕\oplus 0 = 0、0 ⊕\oplus 1 = 1、1 ⊕\oplus 0 = 1、1 ⊕\oplus 1 = 0。中间符号就可以理解为+,只不过是无进制的,在组成原理里用异或运算实现CPU加法器

个人觉得用第二种理解能更快得出异或结果

  • 奇偶校验常用偶校验,因为偶校验的硬件实现更简单:各信息进行异或(模2加)运算,得到的结果即为偶校验位:

在这里插入图片描述

再次强调,奇偶校验只能检测奇数位错误,不能检测偶数位错误

3.1.2 循环冗余校验码(CRC)

在这里插入图片描述

在这里插入图片描述
例:

在这里插入图片描述
说明:

在这里插入图片描述
强调:CRC不是百分百检错,但其检错率很高,其也有1位的纠错能力,但实际应用中只用它的检错。

3.1.3 总结

在这里插入图片描述
在这里插入图片描述

3.2 纠错编码(海明校验码)

在这里插入图片描述

  • 偶校验:能发现奇数位错误,但无法确定是哪一位出错。即1个校验位只能携带2种状态信息
  • 基于偶校验,海明码的设计思路:将信息位分组进行偶校验 -> 设计多个校验位 -> 多个校验位标注出错位置。即多个校验位能携带多种状态信息

在这里插入图片描述

求解步骤:

在这里插入图片描述
例:给定信息位 —— 1010

    1. 确定海明码的位数:2k >= n + k + 1 -> n = 4 -> k = 3
      在这里插入图片描述
    1. 确定校验位的分布:校验位 Pi 放在海明位号为 2i-1 的位置上,信息位按顺序放到其余位置

在这里插入图片描述

    1. 求校验位的值:
      ①先分组形成校验关系,即每个数据位用多个校验位进行校验,满足条件:被校验数据位的海明位号等于校验该数据位的各校验位海明位号之和
      在这里插入图片描述
      ②异或取值:三个分组各自分别进行偶校验

在这里插入图片描述
填表如下:

在这里插入图片描述

    1. 检错纠错
      在这里插入图片描述
      同理:S3S2S1 = 110,表示第6位出错,S3S2S1 = 111,表示第7位出错

上述为从大到小的格式,当然也有从小到大的格式:

在这里插入图片描述
补充:
在这里插入图片描述

推论:

    1. S3S2S1 = 000 且全体偶校验成功 -> 无错误
    1. S3S2S1 != 000 且全体偶校验失败 -> 有1位错,纠正即可。但实际上这个推论只能说明是有奇数个位错误,如D1D2D4同时出错时,也满足这个条件,但实际生活中这是个小概率事件,因为有线链路的出错率本来就低
    1. S3S2S1 != 000 且全体偶校验成功 -> 有偶数个位错,需重传
    1. S3S2S1 = 000 且全体偶校验失败 -> 海明校验码失效,需重传,对应D1D2D3同时出错

3.3 总结

在这里插入图片描述

4. 流量控制 & 可靠传输

在这里插入图片描述
数据链路层的流量控制与可靠传输都是基于滑动窗口机制实现的

滑动窗口机制:

在这里插入图片描述

4.1 停止 - 等待协议(S-W)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 后退N帧协议(GBN)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 选择重传协议(SR)

在这里插入图片描述
在这里插入图片描述
特殊的,当发送窗口的大小大于1,接收窗口的大小等于1,且发送窗口的大小+接收窗口的大小 <= 2n,此时又变为了GBN协议

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4 总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
强调:

    1. 三种协议都有超时重传机制、确认帧以及帧的正确编号限制,这是滑动窗口保证可靠传输与流量控制的奥妙所在
    1. 都要满足WT + WR <= 2n。其中SR还规定WT <= WR,一般取WT = WR
    1. GBN采用累积确认的方式,若中间出错,仅需重传最后一次收到的确认帧位置之后的所有帧(不包含确认帧位置帧的重传)
    1. S-W和SR则采用逐帧确认的方式,哪个帧有问题就重传哪个帧,不同的是,SR检测收到的帧有差错,需传否认帧NAK给发送方,而S-W只需丢弃该帧,等待发送方超时重传即可,可以看出SR的时间效率高于S-W

5. 三种协议的信道利用率分析

在这里插入图片描述

5.1 S-W

在这里插入图片描述

5.2 GBN & SR

在这里插入图片描述
在这里插入图片描述

5.3 总结

在这里插入图片描述


文章转载自:

http://NxzWsNdi.jLthz.cn
http://59Pjyy98.jLthz.cn
http://IH5v3RoH.jLthz.cn
http://yS4tZWFY.jLthz.cn
http://dyJBTQVo.jLthz.cn
http://GL0I3SHv.jLthz.cn
http://3CG6KrPi.jLthz.cn
http://mtxR78yK.jLthz.cn
http://dG4ASR8Y.jLthz.cn
http://Liao7X14.jLthz.cn
http://BxyUXUFU.jLthz.cn
http://DOku2knF.jLthz.cn
http://DglHBAW1.jLthz.cn
http://pYte1ewa.jLthz.cn
http://t2lQjIzC.jLthz.cn
http://2urocLlj.jLthz.cn
http://xUzIk0ch.jLthz.cn
http://nCfyBoGh.jLthz.cn
http://ahAXP6cC.jLthz.cn
http://c1o3cetI.jLthz.cn
http://ktrn9V0r.jLthz.cn
http://ow5U2Na5.jLthz.cn
http://yELzvtvG.jLthz.cn
http://SD3gIBIW.jLthz.cn
http://tTCdJJB5.jLthz.cn
http://QQpBBMFw.jLthz.cn
http://UoQozGtJ.jLthz.cn
http://x216Mlog.jLthz.cn
http://5LmPJSHJ.jLthz.cn
http://VoMCv75s.jLthz.cn
http://www.dtcms.com/a/384629.html

相关文章:

  • 《FastAPI零基础入门与进阶实战》第18篇:Token验证改善--CRUD中应用
  • QT(4)
  • DevOps历程--Drone安装使用详细教程
  • 微信小程序选择图片、视频、音频
  • 【C++上岸】C++常见面试题目--网络篇(第二十三期)
  • mapbox进阶,使用jsts实现平角缓冲区
  • A股大盘数据-20250915分析
  • MySQL服务启动全平台指南:从Windows服务、Linux systemctl到macOS的完整攻略
  • 八、vue3后台项目系列——封装layout页面下切换组件Appmain
  • 学习React-12-useEffect
  • MFC_Button
  • [K8S学习笔记]YAML相关
  • 贪心算法在物联网能耗优化中的应用
  • 使用paddlepaddle-Gpu库时的一个小bug!
  • 从 Linux 到 Kubernetes:操作系统的演变与云原生未来
  • Java网络编程:(socket API编程:TCP协议的 socket API -- 服务器端处理请求的三个步骤)
  • 新能源汽车总装车间案例:四台S7-1200通过无线网桥同步控制16组ET 200SP的秘诀
  • k8s事件驱动运维利器 shell operator
  • GitHub Actions 部署配置
  • java后端工程师进修ing(研一版‖day45)
  • k8s核心资料基本操作
  • Redis 在电商系统中的应用:高并发场景下的架构艺术
  • RK3588:MIPI底层驱动学习——芯外拾遗第一篇:从四个模块到整个“江湖”
  • K8S里的“豌豆荚”:Pod
  • OpenStack 管理与基础操作学习笔记(一):角色、用户及项目管理实践
  • 大数据毕业设计选题推荐-基于大数据的金融数据分析与可视化系统-Spark-Hadoop-Bigdata
  • Python爬虫实战:研究Pandas,构建期货数据采集和分析系统
  • 软考中级习题与解答——第六章_计算机硬件基础(3)
  • Nvidia显卡架构解析与cuda应用生态浅析
  • AppStore 如何上架?iOS 应用发布全流程、uni-app 打包上传 ipa、App Store 审核与多工具组合实战指南