【计算机网络】计算机网络复习总结 ----- 链路层

news2024/11/16 8:18:05

计算机网络

内容管理

  • 数据链路层 Data Link Layer
    • 相关概念术语
      • link 链路
      • data link 数据链路
      • 帧 frame
      • MTU maximum transfer Unit 最大传送单元
      • PPP point to point Protcol 点对点协议
      • MAC 地址 media access control
      • 网桥 bridge
      • 交换机 switch
    • 成帧 规则
      • 成帧定界
        • 字符计数法
        • 字符填充分界符法
        • 零比特填充分界符法
        • 物理层编码违例法
    • 差错控制
      • 差错检查
      • 纠错机制
    • 流量控制
      • 停止-等待协议 WT = 1 W R = 1
      • 后退N帧协议 WT > 1 WR = 1 连续ARQ
      • 选择重发协议 WT > 1 WR > 1
    • HDLC 协议
      • 数据链路的类型:
      • 数据传送操作方式
      • 语法: 数据和命令格式
      • 语义: 数据帧类型
      • 同步: 事件顺序


本文为计算机网络相关考试的书本内容详细总结


之前专栏分享过自顶向下的分析方法,本文采用常规的自底向上的方法从物理层到应用层对计算机网络相关的内容、概念进行系统复习,总结;而计算类型题目本文暂不涉及

本文内容来自cfeng自我理解,可能有误,欢迎指正~

数据链路层 Data Link Layer

物理层的物理链路Link是一条点到点的物理线路,中间没有交换结点, 一条物理链路只是一条物理路径的组成部分

数据链路 data Link: 除了物理的链路之外,还需要有通信协议控制物理链路的数据传输,如果把实现这些协议的硬件和软件加到俩路上,就构成数据链路

数据链路层的主要功能: 将不可靠的物理链路转为可靠的数据链路,数据链路(逻辑链路) = 物理链路 + 数据链路层的通信协议

一般的适配器都是包含了数据链路层和物理层的功能

链路层的主要设备就是二层交换机、网桥, 链路层的数据PDU为帧Frame

链路层的三个基本问题: 成帧规则、 差错控制(检错纠错)、流量控制

相关概念术语

link 链路

一个结点到相邻结点的物理链路

data link 数据链路

把实现控制数据传输的协议的硬件和软件加到链路上构成数据链路; link + 通信协议

帧 frame

一个数据链路层的传输单元, 由一个数据链路层的首部和携带的数据加上尾部构成的协议数据单元

MTU maximum transfer Unit 最大传送单元

帧的数据部分的长度上限 【移动通信中针对MAC层数据分布占比不到一半,有相关帧聚合和块确认技术】

PPP point to point Protcol 点对点协议

用户计算机和ISP进行通信时,使用的数据链路层协议,PPP规定的数据帧结构:首部、数据部分、尾部

只是检错,不纠错,不进行流量控制,可以支持多种网络层协议,PPPoE为宽带上网的主机使用的链路层协议

PPP

MAC 地址 media access control

媒体访问控制,设备的物理地址,硬件地址, 定义网络设备的位置,网络层负责管理IP地址,链路层管理的就是MAC地址,一个主机只会有一个MAC地址, 每个网络位置有一个专属IP地址 【所以主从架构时,clone虚拟机后,需要修改网卡,其中除了IP,最主要就是MAC地址需要重新NAT分配】

网桥 bridge

物理层应对信号衰减使用中继器,网桥就是在链路层实现中继的设备,连接两个及以上的局域网的网络互联设备

交换机 switch

广义上的交换机指的是通信系统中完成信息交换的设备,在这里二层交换机时工作在数据链路层的集线器, 实质就是一个多接口的网桥 【 物理层的设备为集线器】; 三层交换机可以工作在网络层

成帧 规则

成帧规则是数据链路层需要研究的问题,封装成帧framing: 在IP分组前后分别添加首部后尾部,构成一个帧,例如PPP协议定义的

成帧定界

构成帧之后需要考虑帧如何定界,也就是帧开始和帧结束,常用的定界方法:

字符计数法

发送放利用首部的一个字段作为帧长字段,按字符计数, 帧长字段 = 帧包含的字符数 + 1

接收方利用帧长字段接收,计算得知结束位置

在这里插入图片描述

如果帧长字段出现错误,造成后面所有的数据都接收错误,无法检错,无法纠错; 只是适合高可靠链路

字符填充分界符法

面向字符同步传输, 一次发送一个数据块帧, 每一帧**使用两个不同的特殊字符作为开始和结束的标志

如果数据帧丢失了标志字符,下一个帧还是可以正确接收, PPP协议的简化

在这里插入图片描述

数据部分不会出现SOH和EOH等定界控制字符, 但是如果出现了非文本文件数据,可能会出现SOH和EOH的字符,造成定界错误

解决办法就是数据部分的SOH和EOH字符前面都统一加上ESC转义字符【和java中处理一样】

零比特填充分界符法

面向bit流的同步传阿叔,数据库包含任意长度和组合的bit流, 和上面的字符填充分界法类似,只需要在开始和结束填充特殊的位模式(01111110), 通过该模式识别边界

两个数据帧只需要一个位模式, 如果丢失,只需要在数据流中扫描下一个位模式

物理层编码违例法

数据为不可能出现bit编码作为帧起始或者结束定界符

比如曼彻斯特编码,一个码元中间电平跳变表示0,正向跳变; 1 负向跳变; 差分曼彻斯特编码: 中间比跳变, 0表示开始有跳变,1表示开始无跳变

比如 4B/5B 编码方案: 4bit映射为5bit, 剩余的一半16bit可以作为帧定界符

差错控制

通信的任务是高效无差错传送数据,但是任何通信线路都不可避免出现噪声

信道中的比特差错: 随机差错(随机热噪声)、 突发差错(冲击噪声)

突发差错的长度: 差错发生的第一个码元到有错的最后一个码元间所有码元个数;

误码率P = 错误bit数/ 总bit数 【码元数】

差错检查

差错控制编码: 数据位k + 校验位r, 数据帧中有校验字段

校验码分为检错码和纠错码

  • 检错码会自动发现差错,主要用在高可用、误码率低的场景【光纤链路】, 偶尔发生错误就重传
  • 纠错码 不仅能够发现差错而且能就诊,主要用在错误发生比较频繁的信道【无线链路】

编码效率R = k / k + r; 也就是编码中数据位所占的比例

漏检率: 某bit位出错但接收者无法检测到的概率

常见的检错码:

  • 奇偶校验: 1位奇偶校验

    增加1位 校验位, 使数据 + 校验位的1的个数为奇数或者偶数

在这里插入图片描述

  • 简单校验和: 主要用于TCP/IP的网络层和传输层

    发送方进行16位二进制补码求和运算,计算结果取反, 随数据一同发送,接收方也会16位二进制补码求和运算(包含校验和), 结果不是全1,那么错误【正负得0】

在这里插入图片描述

  • 循环冗余校验 CRC: 数据链路层广泛使用

    发送方将要方式弄个得数据位被除数(左移m位),选择一个预定的二进制数(m + 1位)作为除数, 利用二进制模2除法运算得到一个余数,作为CRC校验码,一起发送给接收方, 接收方以发送的数据 - CRC校验码位被除数,选同样的二进制码作为除数,余数为0,表明无错,注意CRC运算 模2除法3规则就可以快速计算

预定的二进制码(除数),国际编码,不是任意的,最高位和最低位为1,以多项式表示,G(x), 发送数据长度大于生成多项式表示的二进制码长度

CRC-8 : G(x) = X^8 + X^2  + x + 1  -----  100000111

除数的位数等于最高次幂 + 1; 比如这里就是9位, 然后x^8  x^2 x^0(1),表示从右边0位开始第几位为1, 这里就是0,1,2,8位
被除数移动 最高次 幂位,这里移动8位

CRC计算: D = 1010001101 , M = 5, G = X^5 + X^4 + X^2 + 1, R = ?, 实际传输数据是?
这里除数G = 110101

数据D 左移M位,就是5位, 101000110100000

CRC 模2 除法: 

首先需要注意:

> 模2减法: 异或操作, 被除数 和 商 * 除数 的减法 是 异或操作 【相同得0,相异得1】

> 所得余数都需要舍弃首位

> 若被除数 以及 之后舍去首位的余数R 的首位为1 , 商1; 首位为0,商0
1 1 0 1 0 1 0 1 1 0

————————————————————————————————

1 0 1 0 0 0 1 1 0 1 0 0 0 0 0
1 1 0 1 0 1
——————————————————————————————————————  这里被除数首位为1,商1,之后异或
  1 1 1 0 1 1 1 0 1 0 0 0 0 0   舍去首位,现在的R首位1,商1
  1 1 0 1 0 1
 ————————————————————————————————————
    0 1 1 1 0 1 0 1 0 0 0 0 0   异或之后舍去首位,现在R首位0,商0
    0 0 0 0 0 0
 ——————————————————————————————————————
      1 1 1 0 1 0 1 0 0 0 0 0  商0之后异或就是被除数舍去首位即可, 商1
      1 1 0 1 0 1
 ————————————————————————————————————————————
        0 1 1 1 1 1 0 0 0 0 0    首位0,商0, 直接去掉首位
            👇
          1 1 1 1 1 0 0 0 0 0     首位1,商1
          1 1 0 1 0 1
   ——————————————————————————————————————
   		    0 1 0 1 1 0 0 0 0  首位0,商0
   		     ↓
   		      1 0 1 1 0 0 0 0  首位1,商1
   		      1 1 0 1 0 1
   ————————————————————————————————————————
                 1 1 0 0 1 0 0  首位1,商1
                 1 1 0 1 0 1
        ————————————————————————————————————
        		  0 0 1 1 1 0  首位0,商0
                    ↓
                     0 1 1 1 0  【5位,和M一样,不需要再除】
                     
 所以余数就是 0 1 1 1 0, 放在D的后面5位替代之前的全0

在这里插入图片描述

被除数首位为1时,商为1;被除数首位为0时,商为0;

每一步得到的余数都要抛弃首位;

若新的被除数首位(即已抛弃首位的余数)为0,除数为0;

余数位最高次幂位,M位,不够前面补0

可以检测出全部单一位出现差错, r为生成G(X最高幂次,CRC可以检测出突发差错长度小于等于R的所有突发性错误

纠错机制

  • 反馈重发纠错法ARQ: 接收方检测出错误, 丢弃帧,发送方重传 【发送方对帧进行编号,接收方反馈出错帧的序号,发送发重发】, 同时发送方需要缓存已发送的数据帧
  • 前向纠错法FEC: 接收方利用纠错码(汉明码)检错并且纠错, 不需要重发数据帧,同时因为编码效率低,算法复杂,很少使用,无线链路适合使用

流量控制

为了解决发送方的发送速率和接收方交付速率的匹配问题,一般采用: 利用接收方交付速率控制发送方的发送速率,链路层采用 固定大小的滑动窗口

连续ARQ协议: 后退N帧协议和选择重发协议,实现流量控制 + 差错控制

固定大小滑动窗口奇数包括: 停止-等待协议、后退N帧协议、选择重发协议

停止-等待协议 WT = 1 W R = 1

不进行流量控制,发送方将所有数据全部发送给接收方,需要接收队列足够大, 进行流量控制之后【队列有限】, 发送一个Data后需要返回ACK,再发送下一个帧

在这里插入图片描述

重发定时器不能设定时间过短,不然还没有ACK帧还没有受到久发送下一帧数据, 停止-等待协议引入1bit 的序号字段解决; 数据帧的每一个序号 都是0,1交替出现在数据帧中

在这里插入图片描述

但是这里的缺点就是效率低, 连续ARQ协议: 发送方在等待接收方返回第一个ACK应答前,再连续发送7个帧

后退N帧协议 WT > 1 WR = 1 连续ARQ

发送方可以一次性发送多个帧,同时等待ACK应答,

发送方发送一个帧后,不会停下来等待ACK,而是可以连续再发送若干数据,同时启动重发定时器;

如果重发定时器超时前,受到ACK,继续发送后面的数据帧, 如果没有受到,那么从该帧到后面继续发送的所有帧都重发

在这里插入图片描述

就是发送方和接收方都有一个窗口,发送方只能发送窗口内的数据帧,对发送端进行速率控制

窗口大小: 在没有受到ACK之前发送方最多可以发送的帧的个数

接收窗口控制接收方接收哪个数据帧, 只有数据帧号和接收窗口序号一致才会接收,否则丢弃, 正确处理,交付上层,窗口向前移动,发送ACK

接收方累计确认: ACKn表示确认n-1号帧,希望下次受到n号帧

在这里插入图片描述

接收窗口,就是一个Index从0号帧开始向后移动, 准备接收Index位置的帧

后退N帧协议中,序号字段为Kbit位, 则帧序号空间为[0, 2^K -1]; 从0开始

  • 如果序号字段K bit, 发送窗口最大值为2^k -1, 可以保证该协议任何情况不出错
比如3bit, 那么窗口序号空间0 ----- 7, 最大发送7个帧保证不出错

选择重发协议 WT > 1 WR > 1

选择重发协议的发送窗口和后退N帧协议一样,但是接收窗口长度大于1,一次可以接收多个帧

在这里插入图片描述

如果接收的4号帧出错,只是对4号帧重传, ==选择重发协议,发送窗口最大值 <= ^k - 1,和上面的要求一样,这样才能保证正确

可以看到上面三种协议:

停止-等待协议,序号比特位1, 序号空间[0,1], 发送窗口和接收窗口大小都是1

而后退N帧协议,接收

而选择重发协议 K, 2^k -1 ,发送窗口和接收窗口大小都是2^K -1

HDLC 协议

数据链路层的协议需求: 发送方和接收方的标识,支持可靠性通信,支持点到点,支持半双工和全双工操作

停止-等待协议效率低, 面向bit 型协议 数据帧通用,效率高

HDLC协议: 高效率、高可靠性,传输任意bit

  • 三种类型的站: 主站【全面管理数据链路】、次站【受控主站】、复合站【具有主站和次站的双重功能】
  • 两种链路结构
  • 三种数据传送操作方式

数据链路的类型:

  • 非平衡式链路结构: 由一个主站和多个次站连接而成,实现点到点或者多点通信,双工通信 【主站控制,发送命令帧,将次站置于某种状态,次站响应主站状态,交换数据和控制信息】

在这里插入图片描述

  • 平衡式链路结构: 两个复合站点点对点连接而成,通信方式为双工, 都具有数据传输和链路控制能力

数据传送操作方式

  • 正常响应方式NRM: 非平衡式链路结构,只有得到主站允许,才能传送数据,传送完成之后停止

  • 异步响应方式ARM: 适用于非平衡链路结构,次站不一定在接收到主站允许即可进行数据传输,次站可以一次发送多帧,将自己的信息发送给主站

  • 异步平衡方式ABM: 适用于平衡链路结构,复合站自主决定数据传输,不需要得到另外一个复合站的允许,可以发送状态信息和数据

语法: 数据和命令格式

HDLC的单位为Frame

在这里插入图片描述

  • 标志字段F, 6个1加2个0,一共8bit, 找到标志字段就可以确定帧的位置, 使用的应该是bit填充分界规则
  • 控制字段实现对于数据链路的检测和控制(流量)
  • FCS 校验字段: 采用16位的CRC冗余校验码,标志字段不校验
  • 地址字段就是接收方或者发送方地址

组地址(点到多点): 一个地址可以分配给多个站点

广播地址(点到多点): 全1 , 链路所有站点都可以受到

地址全0, 不分配给任何站点,测试使用

语义: 数据帧类型

HDLC利用控制字段前两个bit位定义三种类型帧:

I 帧 (信息帧): 可靠通信时数据帧,面向连接

S 帧 ( 监控帧) : 实现流量控制和差错控制

U帧 ( 无编号U帧): 设置链路操作方式

同步: 事件顺序

链路的建立和拆除

确认可靠通信服务

选择重发

					数据帧的封装/拆封

LAN1 ----> 路由器【 以太口 ETH IP  HDLC 串口】 ----> WAN ---> 路由器【...】  ----> LAN2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61256.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT:文件介绍

UI&#xff1a;QT程序中使用的ui界面就保存在该文件中 组件 设置当前组件的属性 点谁显示谁的属性 调整最终页面的布局&#xff0c;使组件控件在水平或对齐 调整因页面放大缩小时&#xff0c;控件与控件之间的水平和垂直间距 各种各样的按钮 图像显示有关的视图 列表框 各…

Gradle学习笔记之Groovy简单使用

简介 groovy可以当成java的脚本化改良版&#xff0c;同样运行于JVM之上&#xff0c;可以很好地和java代码及相关库进行交互&#xff0c;既可以面向对象编程&#xff0c;也可以用作纯粹的脚本语言。Groovy支持动态类型转换、闭包、元编程、函数式编程、默认作用域为public&…

ArcGIS基础:使用线段分割面数据操作

本操作主要是实现线要素对面要素的分割。 先看一下原始数据&#xff0c;如下所示&#xff0c;2个面&#xff0c;1条线&#xff0c;面被线贯穿过去。 首先进行【面转线】操作&#xff0c;以提取面要素的边界线&#xff0c;如下所示 提取结果如下所示&#xff1a; 然后进行【…

java认证与证书

本文内容主要来自《Java加密与解密的艺术》 目前主要有JKS和PEM两种编码格式文件。 JKS&#xff08;Java Key Store&#xff09;&#xff0c;Java原生的密钥库/信任库文件。**PEM&#xff08;Privacy Enbanced Mail&#xff0c;隐私增强邮件&#xff09;**是使用多种加密方法提…

2022-12-04一周学习

这周基本上还是在对前端学习的更多一点&#xff0c;主要是之前没有重视vue3的学习,现在在补上来&#xff0c;学习了vue3的一些知识&#xff0c;前端的权限管理&#xff0c;设置路由守卫&#xff0c;pinia&#xff0c;还学习了redis的一些基本操作&#xff0c;之前只是照搬了别人…

Linux的线程创建

对于任何一个进程来讲&#xff0c;即便我们没有主动去创建线程&#xff0c;进程也是默认有一个主线程的。线程是负责执行二进制指令的&#xff0c;它会根据项目执行计划书&#xff0c;一行一行执行下去。进程要比线程管的宽多了&#xff0c;除了执行指令之外&#xff0c;内存、…

二、演练领域驱动的设计过程

一、业务分析&#xff1a;统一语言与事件风暴 1、统一语言&#xff1a; 客户明白自己的领域知识也就是业务&#xff0c;以及自己需要解决的问题&#xff0c;也叫做痛点&#xff0c;但是不知道技术。技术人员知道技术&#xff0c;但是不了解客户的业务。所以两者交流起来往往会…

[附源码]计算机毕业设计物品捎带系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

finereport公式帮助

1 if(inarray($$$,ds1.select(销售员))<$TOPN,$$$,"其他")&#xff0c;将第 N 个销售员之后的所有销售员合并为其他&#xff0c; 2 "["((roundup($$$/$num)-1)*$num1)"~"(roundup($$$/$num)*$num)"]" 3 SQL语句用if语句&#xff0c…

HTML网页设计作业:文化网站设计——基于HTML古典中国风工艺美术网页设计(9页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

SpringBoot @InitBinder注解绑定请求参数

参考资料 springMVC之InitBinder 和 ValidatorspringMVC之InitBinder的用法1springMVC之InitBinder的用法2 目录一. 作用二. 前期准备三. Get请求 URL传值处理3.1 前台-test16.html3.2 Controller层3.3 效果四. Post请求 表单传值 自定义日期属性绑定器4.1 前台-test16.htm…

华为机试 - 任务最优调度

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 给定一个正整数数组表示待系统执行的任务列表&#xff0c;数组的每一个元素代表一个任务&#xff0c;元素的值表示该任务的类型。 请计算执行完所有任务所需的最短时间。 任务执行规则如下: 任务可…

Springboot RabbitMq源码解析之RabbitListener注解 (四)

文章目录1.RabbitListener注解介绍2.EnableRabbit和RabbitBootstrapConfiguration3.RabbitListenerAnnotationBeanPostProcessor4.对RabbitListener注解的解析5.RabbitListenerEndpointRegistrar1.RabbitListener注解介绍 RabbitListener是Springboot RabbitMq中经常用到的一个…

D-023 DVI硬件电路设计

DVI硬件电路设计1 简介1.1 连接器1.2 接口信号定义1.3 DVI的分类1.4 DVI规格2 硬件设计实战3 硬件设计要点3.1 注意事项3.2 补充说明3.3 VGA 和 DVI 优缺点1 简介 DVI(Digital Visual Interface)是一种数字视频接口&#xff0c;它是基于TMDS (Transition Minimized Differenti…

MFC列表控件的用法(基于对话框的编程)

目录 一、List Control列表控件属性 1.List Control 2.View属性 二、OnInitDialog初始化列表 1.创建List Control的变量 2.找OnInitDialog ​3. InsertColumn插入表头 4. InsertColumn设置对齐方式和列宽 5. 设置List的正文内容 ​6.循环结构创建列表 7.设置列表整行…

Windows内核--子系统(3.5)

到底什么是子系统? 子系统是用户层概念。在Windows内核之上&#xff0c;如果想要执行类UNIX应用程序&#xff0c;就是POSIX子系统&#xff0c;如果要类似OS/2环境&#xff0c;就是OS/2子系统。 如何能模拟出不同子系统呢? 一般需要子系统用户态应用程序和相关DLL支援。 对于W…

腾讯云服务器mysql安装

1.选择mysql版本 2.安装mysql源 sudo wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm 3.下载mysql.rpm源 wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm 4.安装下载好的rpm包 sudo rpm -ivh mysql80-community-rele…

PCB入门介绍与电阻电容电感类元件的创建

摘自凡亿教育 目录 一、PCB入门介绍 二、电阻电容电感类元件的创建 1.绘制电阻的原理图库 2.绘制电容的原理图库 3.绘制电感的原理图 一、PCB入门介绍 1.EDA工具 Cadence Allegro :IC-芯片设计 Mentor PADS:做消费类电子产品、手机、机顶盒、平板电脑 Altium Designer…

多线程初阶(二)

目录 前言&#xff1a; synchronized 解析 可重入和不可重入问题 解析 Java中线程安全类 死锁问题 解析 解决死锁问题 解析 内存可见性 解析 volatile关键字 解析 wait&#xff0c;notify 解析 小结&#xff1a; 前言&#xff1a; 针对上篇文章讲到的线程安全…

VSCode\\VS2017下CPP环境的配置

VSCode下C环境配置一些问题VSCode下配置C环境&#xff1a;VSCode与boost总结&#xff1a;坑位待填&#xff1a;VSCode中3个json文件的作用&#xff1a;环境配置出现的问题以及解决VS2017 配置 C环境VS配置boost库包含项目中的自定义的.hpp文件&#xff0c;.h文件VSCode下配置C环…