IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 数据链路层要解决的三个问题 -> 正文阅读

[网络协议]数据链路层要解决的三个问题

链路 (link) 是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。 一条链路只是一条通路的一个组成部分。

数据链路 (data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

  1. 现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。(网卡工作在数据链路层)
  2. 一般的适配器都包括了数据链路层和物理层这两层的功能。(路由器的接口也是工作在数据链路层)

也有人采用另外的术语。这就是把链路分为物理链路和逻辑链路。

物理链路就是上面所说的链路。

逻辑链路就是上面的数据链路,是物理链路加上必要的通信协议。

早期的数据通信协议曾叫做通信规程 (procedure)。因此在数据链路层,规程和协议是同义语。?

在数据链路层,探讨的是如何将一段数据传递给另外一个节点的接口。在传递的时候变成电信号,光信号,还是无线信号,我们并不关心这个,因为这是物理层需要做的事情。

数据链路层像个数字管道?


常常在两个对等的数据链路层之间画出一个数字管道,而在这条数字管道上传输的数据单位是帧。

?数据链路层不必考虑物理层如何实现比特传输的细节。甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方。

?三个基本问题


数据链路层协议有许多种,不管是哪种数据链路协议,但有三个基本问题则是共同的。这三个基本问题是:

  • 封装成帧
  • 透明传输
  • 差错控制

封装成帧


  • 封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。(网络层给你了数据包,网卡就要将其封装一下,加上头和尾部,从网络层给到数据链路层的ip数据报大小是有限制的,叫做最大传输单元,以太网是1500个字节,如果超过了这个大小,那么网络层的IP数据包就要分片)(封装成帧的意思就是给网络层的数据包加上头和尾,有头有尾代表一个完整的数据)
  • 首部和尾部的一个重要作用就是进行帧定界。

?举例:用控制字符进行帧定界的方法举例


当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符。

控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT (End Of Transmission) 表示帧的结束。

ASCII表里面有非打印的字符,这些字符不是键盘输入的,都是一些控制字符。?

?2. 透明传输


如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地“找到帧的边界”。

当作无效帧丢弃就产生错误了。?

解决透明传输问题

解决方法:字节填充 (byte stuffing) 或字符填充 (character stuffing)。

发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)。

接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。

如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。

封装成帧加上头和尾,传输的时候加上转义字符,接收的时候去掉转义字符,加头和尾的过程叫做封装成帧,插入转义字符和去掉转义字符的过程叫透明传输。

不同链路协议解决的透明传输的方法不一样,这个转义字符到底是啥,完全由数据链路层搞定,但是,所有的数据链路层都要解决这个问题。

透明

指某一个实际存在的事物看起来却好像不存在一样。

“在数据链路层透明传送数据”表示无论发送什么样的比特组合的数据,这些数据都能够按照原样没有差错地通过这个数据链路层。

?

?3. 差错检测


  • 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。
  • 误码率与信噪比有很大的关系。
  • 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。
  • 在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。?

?

?帧的数据部分+数据链路层首部来计算帧校验序列,计算完之后将帧校验序列写到FCS一块发出去。接收端收到之后使用帧校验序列来验证里面有没有差错。如果有差错就丢掉了。

在数据链路层是不可靠传输,如果有差错就直接丢弃,不会重传。

数据链路层有没有重传功能,完全看数据链路层协议有没有这个功能。ppp hdlc以太网协议都不具有可靠传输,有错误就直接丢弃,由传输层来实现。

需要注意的是校验的部分是帧的数据部分和数据链路层首部,检擦这些部分在传输过程当作有没有差错。用于校验的部分写到帧的FCS位置。在真实的帧校验序列里面可能占用4个字节,也就是32为字节做帧校验序列。

循环冗余检验的原理

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章           查看所有文章
加:2021-10-14 08:15:28  更:2021-10-14 08:15:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:32:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码