计算机网络——数据链路层(一)

文章目录

一、数据链路层概述

二、数据链路层的三个重要问题

三、点对点协议PPP

四、结语


一、数据链路层概述

1.1 链路、数据链路和帧

  • 链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。
  • 数据链路(Data Link)是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
  • 计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能。
  • 帧(Frame)是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU

二、数据链路层的三个重要问题

2.1 封装成帧和透明传输

2.1.1 封装成帧

封装成帧是指数据链路层给上层交付下来的协议数据单元PDU添加一个首部和一个尾部,使之成为帧。

  • 帧的首部和尾部中包含有一些重要的控制信息
  • 帧首部和尾部的作用之一就是帧定界。
  • 为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度
  • 考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(Maximum Transfer Unit,MTU)。例如,以太网的MTU为1500个字节。

2.1.2 透明传输

透明传输是指数据链路层对上层交付下来的协议数据单元PDU没有任何限制,就好像数据链路层不存在一样。

  • 面向字节的物理链路使用字节填充的方法实现透明传输

在可能发生错误的地方前加上转义字符(ESC),从而达到透明传输

  • 面向比特的物理链路使用比特填充的方法实现透明传输

帧的收尾部的flag对应的bit序列为:01111110,如果在数据载荷里遇到连续的五个1,就在第五个1后面加上一个0

2.2 差错检测

2.2.1 误码的相关概念

  • 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错(称为比特差错),如,比特1可能变为比特0,比特0可能变成比特1
  • 在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率(Bit For Rate,BER)
  • 提高链路的信噪比,可以降低误码率。但在实际的通信链路上,不可能使误码率下降为零
  • 使用差错检测技术来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一

2.2.2 奇偶校验

偶校验结果和奇校验结果是一样的。

  • 在所传输的数据中,如果有奇数个位发生误码,则所包含比特1的数量的奇偶性会发生改变,可以检测出误码
  • 在所传输的数据中,如果有偶数个位发生误码,则所包含比特1的数量的奇偶性不会发生改变,无法检测出误码(漏检)
  • 在实际使用中,奇偶校验又可以分为垂直奇偶校验、水平奇偶校验以及水平垂直奇偶校验

2.2.3 循环冗余校验

数据链路层广泛使用漏检率极低的循环冗余校验(Cyclic Redundancy Check,CRC)检错技术。

循环冗余校验的基本思想:

  • 收发双方约定好一个生成多项式G(X)
  • 发送方基于待发送的数据和生成多项式G(X),计算出差错检测码(冗余码),将冗余码添加到待发送数据的后面一起传输
  • 接收方收到数据和冗余码后,通过生成多项式G(X)来计算收到的数据和冗余码是否产生了误码

注意:

2.3 可靠传输

2.3.1 可靠传输的相关基本概念

传输差错包含四大类:

  • 误码(比特差错):参考2.2.1
  • 分组丢失:比如,在分组传输的过程中,路由器的输入队列满了,主动丢弃了多余的分组,导致分组丢失
  • 分组失序:分组到达顺序与发送顺序不同
  • 分组重复:分组发送的数据没有及时到达目的地(超时),导致该分组被重新发送,最重造成分组重复

2.3.2 可靠传输的实现机制

可靠传输主要有三大实现机制:

  • 停止-等待(Stop-and-Wait,SW)协议
  • 回退N帧(Go-back-N,GBN)协议
  • 选择重传(Selective Repeat,SR)协议

停止-等待协议:

停止-等待协议的信道利用率:

回退N帧协议:

选择重传协议:

三者对比:

三、点对点协议PPP

3.1 点对点协议PPP概述

3.2 PPP的帧格式

3.3 PPP帧的透明传输

3.4 PPP帧的差错检测

3.5 PPP的工作状态

四、结语

本篇文章主要讲解了数据链路层的主要概念,重要问题以及点对点协议PPP,通过本篇文章,你应该对数据链路层有了一个简单的了解。

相关推荐
苍煜6 小时前
Docker容器网络详解+端口映射原理(系列第二篇:实战核心)
网络·docker·容器
初願致夕霞7 小时前
基于系统调用的Linux网络编程——UDP与TCP
linux·网络·c++·tcp/ip·udp
数智化精益手记局8 小时前
什么是设备维护管理?设备维护管理包含哪些内容?
大数据·网络·人工智能·安全·信息可视化
salipopl11 小时前
FPGA中AXI-FIFO主机接口的自定义实现与versal读写工程分析
网络·fpga开发
会周易的程序员12 小时前
aiDgeScanner 工业设备网络扫描与管理工具
网络·c++·物联网·架构·electron·node.js·iot
CableTech_SQH13 小时前
F5G 全光网,赋能智慧校园数字化建设
大数据·网络·5g·运维开发·信息与通信
hellojackjiang201113 小时前
socket长连接在手游场景下的技术实践
网络·网络协议·tcp/ip·架构·网络编程
精益数智小屋13 小时前
设备维护方案核心功能拆解:一套好的设备维护方案如何解决设备突发故障
大数据·运维·网络·数据库·人工智能·面试·自动化
其实防守也摸鱼13 小时前
VS code怎么使用 Conda 安装预编译包
开发语言·网络·c++·vscode·安全·web安全·conda