计网笔记 数据链路层 (1-2) 封装成帧、差错控制、流量控制与可靠传输、停止等待协议、后退N帧协议(GBN)、选择重传协议(SR)

news/2024/11/15 2:52:07/

文章目录

  • 前言
    • 在这里插入图片描述
  • 零、数据链路层基本概念
  • 一、功能
    • 0、数据链路层功能概述
    • 1、封装成帧和透明传输
      • 1.1封装成帧
      • 1.2 透明传输
      • 1.3组帧方法
    • 2、数据链路层的差错控制
      • 2.0差错从何而来
      • 2.1位错(比特错,1变成0,0变成1)
      • 2.2帧错(丢失,重复,失序)定时器、编号机制
    • 3、流量控制 ★★★
      • 3.1 基本概念
      • 3.2 流量控制的方法
      • 1、停止等待协议(效率低一些)
      • 2、滑动窗口协议(效率高一些)
      • 2.1 后退N帧协议(GBN)
      • 2.2 选择重传协议(SR)(目前最好的)
    • 4、可靠传输★★★


前言

在这里插入图片描述

零、数据链路层基本概念

1、结点:主机、路由器

2、链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。

3、数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。

4、帧:链路层的协议数据单元,封装网络层数据报

数据链路层负责通过一条链路从一个结点向另一个物理链路直接相连的相邻结点传送网络层给的数据报。
<注意>
在分析数据链路层时,看成水平方向的数据链路层数据传输。

一、功能

0、数据链路层功能概述

概述:
数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。

<举例>
boosA (网络层)让 秘书A(数据链路层)送一份文件给boosB,秘书A将文件拆分并编号让傻子A(物理层)送到秘书B手上,这个过程物理层可能会丢失数据,根据编号可以把数据重新找回来

功能:

功能一:为网络层提供服务。
无确认无连接服务:通常用于实时通信,误码率较低的信道
有确认无连接服务:步提前建立连接,对方收到会返回一个确认帧。等不到的话就重新发
有确认面向连接服务:最可靠

功能二:链路管理。即连接的建立、维持、释放
功能三:组帧
功能四:流量控制
功能五:差错控制(帧错/位错)

1、封装成帧和透明传输

1.1封装成帧

封装成帧:就是在一段数据的前后部分添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
首部和尾部包含许多的控制信息,其中有一样叫:帧定界(确定帧的界限)。
帧同步:接收方应当能从接收到的二进制比特流中区分出帧的起始和终止。
在这里插入图片描述

1.2 透明传输

透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。
当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。(就不用管内容是什么,直接传就完事儿了)

1.3组帧方法

1、字符计数法
就是在帧的首部做计数,这个字符记录了当前帧有多少个字符。
缺点:如果在某一个帧内,标记位后面的某个字节的数据丢失,那么会影响后面的帧比如311和4222,如果前面的帧丢失变成31,那么后面的4就会被补到前面变成314导致错误
在这里插入图片描述

2、字符填充法
就是加头加尾分别标记开始结束,和零比特填充法(见下)对比,开始和结束的对应的字符不一样
在这里插入图片描述解决方法:添加转义字符。即对于那些与标记字符重复的数据流。在它们的前面添加一段转义字符,这祥接收方在解析帧时。看到这些转义字符就不会认为那些特殊的数据当成帧的开始/结束了。
在这里插入图片描述
3、零比特填充法(普遍)
和字符填充法不一样的点在于:开始和结束的对应的标志字符是一样的。
在这里插入图片描述<无论五个1后面是1还是0,都加一个0。这样接收端和发送端处理数据都便捷>
开始和结束时六个1

4、违规编码法(普遍)
曼彻斯特在编码的时候,前高后低记为1(高低),前低后高记为0(低高)。所以数据中不会出现高高和低低。
在这里插入图片描述

2、数据链路层的差错控制

2.0差错从何而来

在这里插入图片描述

2.1位错(比特错,1变成0,0变成1)

在这里插入图片描述

1、检错编码(奇偶校验码、循环冗余码CRC,在数据最低位加上一位或几位数据)

1.1 奇偶校验码
奇偶校验:只需包含1个附加比特。
对于偶校验,选择一个值,使得所有比特中1出现偶数次。
对于奇校验,选择一个值,使得所有比特中1出现奇数次。接收方通过检测1出现的次数判断是否出现差错。如果出现偶数个比特差错,则检验不出

缺点:只能检测出奇数个比特错误,检测成功率位50%。
偶数个比特错误:比如111这串数字,冗余码给1,那么规则就是偶检验。但如果变成1001,1的个数也是偶数,但是数据已经错了

在这里插入图片描述

2、循环冗余码CRC
在这里插入图片描述在这里插入图片描述>CRC:循环冗余法 FCS:冗余码
在这里插入图片描述

可靠传输:数据链路层发送端发送什么,接收端就收到什么。
链路层使用CRC检验,能够实现无比特差错的传输,是指帧中不会出现位错,但是有的出现位错的帧会被丢弃,所以还不能叫做可靠传输

2、纠错编码(海明码)(发现错误、找到位置、纠正错误)(校验码位置不一定在最低位)

在这里插入图片描述

1、确认校验码位数r:设数据k位,校验码r位,k+r个数据,每个数据各错一次的情况就是 k+r 种情况,还有个情况是不出错,所以+1。r位校验码每一个无非是0或者1,所以可以表现2r种情况。所以海明不等式是:2r >= k+r+1。计算的时候把r带入,暴力计算就行。
在这里插入图片描述

2、确认校验码和数据位置
刚刚求出校验码是三位,从低位到高位分别填在20、21、22 的位置。原本的数据从高到低补入
在这里插入图片描述

3、求出校验码的值
比如x4,所在的位置是100,那么它就管理位置是1**类型的数。如果是偶校验,那么它所管理的4、5、6、7号数(110x)就要有偶数个1,所以推出x4 = 0
在这里插入图片描述
4、检错并纠错
在这里插入图片描述
在这里插入图片描述

2.2帧错(丢失,重复,失序)定时器、编号机制

3、流量控制 ★★★

3.1 基本概念

较高的发送速度和较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。

数据链路层与传输层流量控制的区别
数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的。
数据链路层流量控制手段:接收方收不下就不回复确认。(接收到且还有余力再接收,才会回复确认信息)
传输层流量控制手段:接收端给发送端一个窗口公告。(告诉发送端接收了多少,还能接收多少)

3.2 流量控制的方法

1、停止等待协议(效率低一些)

在这里插入图片描述在这里插入图片描述1.1 无差错情况
发送方发送一个帧,接收一个确认信号即可。
在这里插入图片描述
1.2 有差错情况

停止等待协议的有差错情况:
使用一个超时计时器,每发一帧就开始计时,设置时间略长于一个RTT (往返时延)

发送端发送数据开始,到发送端收到来自接收端的确认 (接收端收到数据后便立即发送确认),总共经历的时延
RTT=传播时延x2+处理时间(有时可能直接忽略)

1.2.1 数据帧丢失或者检测到帧出错的情况
数据帧丢失 : 压根没有接收到
检测到帧出错的情况 : 接收到了但是检测到帧出错
这两种都不能算正确接收,所以接收方不会返回一个接收信号。

数据帧和确认帧都需要进行编号
如果连续出现相同的发送序号的数据帧,说明发送端出现超时重传。(帧丢失)
连续出现序号相同的确认帧,说明接收方收到了相同的重复的帧(帧重复)

在这里插入图片描述1.2.1 ACK丢失
在这里插入图片描述

1.2.1 ACK迟到

当发送完数据帧1以后,应该收到确认帧1,此时收到确认帧0就知道是来迟了,直接丢掉。

在这里插入图片描述

如果是在发送第二个数据帧0之后收到第一个确认帧0,那么就会理解发送数据帧1,此时第二个确认帧0回来了,会被丢弃,因为此时在等待的是确认帧1。

1.3 停止等待协议的特点
优点:简单
缺点:信道利用率太低
在这里插入图片描述
在这里插入图片描述

2、滑动窗口协议(效率高一些)

在这里插入图片描述发送方可以连续发送:发送窗口里面的多个帧,而不是接收到一个帧才能发下一个。接收方接收到第一个信号就会移动一个接收窗口,然后给发送发一个确认信号。接收方接收到一个确认信号才能移动一格发送窗口。

2.1 后退N帧协议(GBN)

因为停止等待协议太浪费时间了,所以尝试采用GBN,发送连续多个数据帧,以增大信道利用率
在这里插入图片描述

累计确认
就是收到一个确认,那么它和它之前的所有帧都默认已收到

超时事件
举个例子
发送方:发送0,1,2,3,4。在这个过程中,接收方先接收到0,返回ack0,于是它开始等1,但是它收到2、3以后都没有收到1,那么他就清楚1丢失了,于是默认1后面收到的数据都是丢失的。于此同时,发送方在一个计时器以后没能等到ack1,就会从1开始重新传(1,以及1以后的都重新传)

在这里插入图片描述

举个例子
发送方发送:0、1、2、3、4、5
但是接收方接到0、1、3、4、5
于是expectedseqnum = 3 接到的4、5会被丢弃。接收方重新发送ack2(为最近按序接收的帧重新发送ACK)

下图是一个实例
注释:此图发送2顿时丢失,所以接收方几首收到后面的帧也是直接丢弃并且发送最晚收到的有效帧1的ACK,直至2顿的超时重传机制被触发进行重传并得到ACK之后接收方才会接受2顿以及后面的顿如果所示,GBN的形式就像排队,接收端为所有帧“预定”了接收位置,如果接收端发送的数据因为某些原因没有接收到,即使收到了这一帧后面所有的帧,这些“排在后面的”帧也要被丢弃
在这里插入图片描述

发送窗口不能无限大,与使用的编号的比特数有关
二进制表示。很简单,就是1比特编号0和1,
同理2比特编号0-3,二进制表示就是00,01,10,11。
在这里插入图片描述

GBN优缺点
优点:相对于上面的停止等待协议,明显提高了信道利用率,
缺点:因为重传机制的原因,导致已经收到数据却需要强行丢弃,进而造成浪费

在这里插入图片描述Q:为什么最后一个公式是100010008,而不是1000,100.8ms不是传输一帧的速率吗

2.2 选择重传协议(SR)(目前最好的)

在这里插入图片描述1、GBN协议的弊端

GBN中的累计重传机制会导致批量重传,一个帧传错了,它后面所有的帧都要重传一次。

优化思路是:那么可不可以只重传出错的帧?

——可以,设置单个帧的确认,同时加大接收窗口,设置接收缓存,缓存乱序到达的帧。

2、选择重传协议中的滑动窗口
在这里插入图片描述3、SR发送方必须相应的三件事

  1. 上层的调用

从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回给上层之后再传输。

  1. 收到了一个ACK

如果收到ACK,加入该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接收。如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前(右)移动到具有最小序号(窗口内)的未确认帧处。(别管什么最小,其实就是移动到第一个还没确认帧的窗口那)如果窗口移动了并且有序号在窗口内的未发送帧,则发送者些帧。

  1. 超时事件

每个帧都有自己的计时器,一个超时事件发生后只重传一个帧。

4、SR接收方要做的事

对接收窗口内应收到的帧来者不拒。SR接收方将确认一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回给发送方一个帧的确认帧**(收谁确认谁)**,直到所有帧(即序号更小的帧)皆被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。
在这里插入图片描述

以下是一个运行中的SR例子

运行中的SR(假设发送窗口和接收窗口尺寸都为4)
在这里插入图片描述

5、滑动窗口长度

Q:窗口长度可以无限吗?以下两种情况出现不同的错误,但是接收端都接到一个0号帧(不知道是第几个0号帧)
在这里插入图片描述第一种情况:ack0、ack1、ack2全部丢失,计时器超时以后发送端重新发送,接收端收到的是第一个0号帧;

第二种情况:ack2丢失,接收端将会收到第二个0号帧;

问题在于 发送窗口 相对于 帧的编号 比过大。

发送窗口最好等于接收窗口(大了会溢出,小了没意义)

WTmax=TRmax=2n−1

T为Send Window发送窗口
R为Receive Window接收窗口
n为用多少比特来编帧的序号。

本题中0、1、2、3共4位可以用2bit来编,所以本题中的n为2,窗口小于等于2时就不会出现问题。

6、SR协议重点总结

  1. 对数据帧逐一确认,收一个确认一个;

  2. 只重传出错帧

  3. 接收方有缓存

  4. 滑动窗口大小应小于等于WTmax=TRmax=2n−1

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

4、可靠传输★★★

可靠传输是发送端发送什么,接收端就要受到什么


http://www.ppmy.cn/news/69995.html

相关文章

记一次靶场搭建与渗透测试

渗透目标 通过Windows7打入工作组环境&#xff0c;穿透两层内网拿到DC&#xff08;域控制器&#xff09;权限 环境搭建 环境搭建 网络拓扑 虚拟机网络配置 渗透测试 永恒之蓝外网打点 nmap -sS 192.168.2.0/24扫描外网存活主机&#xff0c;发现两台主机192.168.2.128和192…

7.机器学习诊断法

怎样评估机器学习算法的性能&#xff1f; 利用机器学习诊断法来评估机器学习算法的性能。诊断法是一种测试法&#xff0c;通过这种测试能够了解算法在哪里出了问题&#xff0c;这也能够告诉我们要想改进一种算法的效果、什么样的尝试才是有意义的。 7.1 评估假设 评价算法学…

0702可分类变量的微分方程-微分方程

文章目录 1 一阶微分方程变形2 可分离变量的微分方程2.1 定义2.2 解法 3 例题结语 1 一阶微分方程变形 本节至第四节我们学习的都是一阶微分方程 ​ y ′ f ( x , y ) y^{}f(x,y) y′f(x,y) &#xff08;2-1&#xff09; 一阶微分方程对称形式 p ( x , y ) d x Q ( x , …

每日算法(第三期)

2023年5月17日 先回顾一下昨天的算法题&#xff0c;及答案 题目&#xff1a;寻找两个有序数组的中位数 给定两个大小分别为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数&#xff0c;并且要求算法的时间复杂度为 O(log(m n))。 你可以假设 nums1 和 num…

SpringBoot整合MyBatis-Plus实现增删改查

简介 MyBatis-Plus (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 特性 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xff0c;如丝般顺滑损耗小&#xff1a;启…

【英】考虑多能负荷不确定性的区域综合能源系统鲁棒规划(MatlabPython代码)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

DC-9通关详解

信息收集 漏洞发现 result.php处存在sql注入 sqlmap跑信息 python sqlmap.py -u http://192.168.45.146/results.php --data search1 -D users -T UserDetails --dump 拿了几个尝试登录都无效 ssh尝试登录直接拒绝了 再看Staff表 查哈希 进后台 多了一个添加记录的功能 没啥…

分享一个图片展示特效

先上效果图&#xff1a; 备注&#xff1a;这个效果图太大了&#xff0c;压缩了一下效果有点不咋好看。感兴趣同学们可以自己运行代码看一下&#xff0c;保证不会失望~ 再上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta cha…