链路层基本问题 : 封装成帧、差错检测、流量控制

一、封装成帧

1、MAC帧

MAC

类型字段 (2个字节):
用来标志上一层使用的是什么协议,以便把收到的MAC帧的数据上交给上一层的这个协议。

数据字段 (46-1500):
正式名称是MAC客户数据字段最小长度64 字节-18字节的首部和尾部 = 数据字段的最小长度。

FCS字段 (4 字节):
当数据字段的长度小于 46 字节时,应在数据字段的后面加入整数字节的填充字段,以保证以太网的MAC帧长不小于64 字节。
在帧的前面插入的 8 字节中的第一个字段共 7 个字节,是前同步码,用来迅速实现 MAC帧的比特同步。第二个字段是帧开始定界符,表示后面的信息就是MAC帧

2、封装成帧

1)、封装成帧(framing):就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。

2)、接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。

3)、分组交换的一个重要概念:就是所有在因特网上传送的数据都是以分组(即IP数据报)为传送单位。

4)、网络层的IP数据报传送到数据链路层就成为帧的数据部分。在帧的数据部分的前面和后面分别添加上首部和尾部,就构成了一个完整的帧。
帧长等于数据部分长度加上帧首部和帧尾部的长度,而首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限)。

5)、首部和尾部还包含许多必要的控制信息,在发送帧时,是从帧首部开始发送。各种数据链路层协议都要对帧首部和帧尾部的格式有明确的规定。为了提高帧的传输效率,应当使帧的数据部分长度尽可能大于首部和尾部的长度。但是,每一种链路层协议都规定了帧的数据部分的长度上限——最大传送单元MTU(Maximum Transfer Unit)。

封装成帧
注:
 当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符。
 控制字符SOH(Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT(End Of Transmission)表示帧的结束。他们的十六进制编码分别是01(二进制是00000001)和04(二进制是00000100)。
 
帧界定
发送错误:
 当数据在传输中出现差错时,帧定界符的作用更加明显。假定发送端在尚未发完一个帧时突然出现故障,中断了发送。但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧。由于使用了帧定界符,在接收端就知道前面收到的数据时个不完整的帧(只有首部SOH,没有传输结束符EOT),必须丢弃。而后面收到的数据有明显的帧定界符(SOH和EOT),因此这是一个完整的帧,应当收下。

二、透明传输

透明:某一个实际存在的事物看起来却好像不存在一样。对于数据链路层传输数据,表示无论什么样的比特组合都能通过这个数据链路层,因此数据链路层相对于这些数据来说就是透明的。

1、界定差错

  由于帧的开始和结束的标记是专门指明的控制字符,因此,所传输的数据中的任何8比特的组合一定不允许和用作帧界定符的控制字符的比特编码一样,否则就会出现帧界定错误。
  当传送的帧是用文本文件组成的帧时,其数据部分显然不会出现像SOH和EOT这样的帧界定符,可见不管从键盘上输入什么字符都可以放在这样的帧中传输,这样的传输就叫做透明传输。
  但当数据部分是非ASCII码的文本文件时,情况就不同了。如果某个数据的某个字节的二进制代码出现和SOH、EOT这种控制字符,数据链路层就会误认为“找到帧的边界”,收下部分帧,丢弃剩下的部分数据。
  
透明传输

2、解决办法

  为了解决透明传输问题,就必须使数据中的SOH和EOT不被解释为界定符。
  发送端的数据链路层在数据中出现控制符”SOH”和”EOT”的前面插入一个转义字符”ESC”(其十六进制编码是1B)。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。这种方法称为字节填充(byte stuffing)或字符填充(character stuffing)。如果转义字符也出现在数据当中,那么解决方法仍然是在转义字符的前面插入一个转义字符。因此,当接收端收到连续的两个转义字符时,就删除其中前面的一个。
  
填充

三、差错检测

  现实的通信链路不会是理想的。这就是说,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1.这就是比特差错。
  在一段时间内,传输错误的比特占所传输比特总数的比率为误码率BER。为了保证传输的可靠性,目前在数据链路层广泛使用了循环冗余检验CRC,详情见我的另一篇博客。

CRC循环冗余检验

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

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

相关文章

mysql 5.7 super_MySQL 5.7 下的对super用户只读

在MySQL的主从复制场景下,遇上slave被意外写入数据是一件比较严重的问题,毕竟在一般情况下我们都希望slave仅用只读数据库,如果被意外写入数据可能会造成数据的不一致,从而导致主从的报错。因此在MySQL中可以通过设置变量参数read…

CSS 链接

2019独角兽企业重金招聘Python工程师标准>>> 不同的链接可以有不同的样式。 链接样式 链接的样式,可以用任何CSS属性(如颜色,字体,背景等)。 特别的链接,可以有不同的样式,这取决于他…

iOS项目开发优秀文章汇总

UI界面 iOS和Android 界面设计尺寸规范 http://www.alibuybuy.com/posts/85486.html iPhone app界面设计尺寸规范 http://www.wufangbo.com/ios-iphone-app/ iOS界面设计切图小结 http://www.apkbus.com/android-140341-1-1.html 2x图片等适应不同分辨率手机 http://blog.…

数据链路层:ARP协议详解(绝对经典)

1、ARP协议定义: 地址解析协议,工作在数据链路层,在本层和硬件接口联系,同时向上层提供服务。IP数据包常通过以太网发送,以太网设备不识别32位IP地址,他们是以48位以太网地址传输以太网数据包的…

php pdo操作mysql_PHP操作数据库详细(PDO)

PHP 5.1 发布时将附带一个全新的数据库连接层,即 PHP Data Objects (PDO)。虽然 PHP 一直都拥有很好的数据库连接,但 PDO 让 PHP的数据库操作 达到一个新的高度。PDO可支持基本的MySQL、Microsoft SQL Server、Oracle等数据库,并且提供了统一…

HTTP POST请求报文格式分析与Java实现文件上传

时间 2014-12-11 12:41:43 CSDN博客原文 http://blog.csdn.net/bboyfeiyu/article/details/41863951主题 HTTP HttpComponents在开发中,我们使用的比较多的HTTP请求方式基本上就是GET、POST。其中GET用于从服务器获取数据,POST主要用于向服务器提交一些…

网络层:IP协议详解(IP协议真的得看这篇)

1、IP协议概念 IP(Internet Protocol , 互联网协议)主要用于互联网通信。IP协议用于将多个包交换网络连接起来,他在原地址和目的地址之间传输数据报,还提供对数据大小的重新组装功能,以适应不同网络的要求。 IP协议是…

mysql my.cnf_如何知道mysql的my.cnf位置

你实际上可以让MySQL显示搜索my.cnf(或Windows上的my.ini)的所有位置的列表。 它不是一个SQL命令。 是终端命令,执行:$ mysqld –help –verbose在第一行,你会发现一个消息,列出所有my.cnf位置。 在我的机器上是:Defau…

传输层两大协议:TCP与UDP详解(两者的联系与区别)

一、TCP协议 1、TCP协议报文格式 TCP协议报文格式详解 2、TCP“三次握手”建立连接 位码即tcp标志位,有6种标示: SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Ac…

2016-01-17

1.《将来的你,一定会感谢现在拼命地自己》 感觉是一本总结的书,有方向、胸怀、习惯、幸运、内心、浮躁等等,现在有时候还拿出来温故一番。可以拥有。 2.《华为研发》 一本介绍华为的发展史,包括华为的一些故事,最令人印…

方法调方法(委托方式)

具有功能的实现方法&#xff0c;这个方法是一个吧数据插入到数据库然后再插入到listview的方法&#xff0c;使用for循环不断的调用这个方法进行插入&#xff1a; /// <summary>/// 获得Excel的名称和代号/// </summary>private void GetData(string name, string p…

docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...

一、MySQL读写分离主从模式1. 下载镜像docker pull mysql当前最新版本&#xff1a;mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)2. 启动主节点并修改配置文件docker run -it --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql bash修改/…

C++11标准库 - array

std::array是原生数组的封装&#xff0c;它存放于栈上且大小固定&#xff0c;性能也与之相同。在原生数组的基础上&#xff0c;它添加了范围检查&#xff0c;以及其它的STL的相应特性&#xff0c;比如复制、交换、迭代器、查询大小。 按照C11的规范&#xff0c;应该抛弃原生数组…

设计模式之单例模式(C++代码实现)

1、单例模式&#xff1a; 单例模式&#xff1a;用来创建独一无二的&#xff0c;只能够有一个实例的对象。 单例模式的结构是设计模式中最简单的&#xff0c;但是想要完全实现一个线程安全的单例模式还是有很多陷阱的。 2、应用场景&#xff1a; 共享数据或者共享访问点&…

在Controller中使用AOP

转&#xff1a;http://usherlight.iteye.com/blog/1306111 在Controller中使用AOP的问题主要在于如何让Controller能够被检测到。 Controller和其他Spring bean的区别在于:Controller是由mvc定义并在web.xml中的dispatcher中定义的。 解决方法&#xff1a; 1、正确定义Controll…

mysql 6.17_2020 6/17 mysql数据的增删改查

一、增删改数据1、增加数据&#xff1a;-- 插入所有字段。一定依次按顺序插入INSERT INTO student VALUES(1,张三,男,20);-- 插入部分字段INSERT INTO student(id,NAME) VALUES(2,李四);2、修改数据&#xff1a;-- 带条件的修改(推荐使用)UPDATE student SET gender男 WHERE id…

五种I/O模型详解

1. 概念理解 在进行网络编程时&#xff0c;我们常常见到同步(Sync)/异步(Async)&#xff0c;阻塞(Block)/非阻塞(Unblock)四种调用方式&#xff1a; 同步&#xff1a; 所谓同步&#xff0c;就是在发出一个功能调用时&#xff0c;在没有得到结果之前&#xff0c;该调用就不…

回答自己的提问

第一章&#xff1a;概论 问题&#xff1a;看完这章后&#xff0c;了解了一些程序员都知道的名言、推论等&#xff1b;像"程序数据结构算法”、"软件程序软件工程"这些。在1.2.3这节内容上知道软件工程与计算机科学是息息相关的&#xff0c;那么在那么多的计算机…

Tomcat自定义部署

首先&#xff0c;需要把apachetomcat安装目录里面的 bin/ conf/ logs/ webapps/ work/ 都拷贝到自定义WEB应用目录下&#xff0c;比如 /home/app/test.aliyun.com/&#xff0c;这个目录以后就是部署该项目的操作目录&#xff0c;下面用yourdomain来代替。 文件夹部署方式&#…

存储过程 while is null_4.2 串的存储实现(2)

返回目录&#xff1a;Chilan Yu&#xff1a;《数据结构》目录链接​zhuanlan.zhihu.com4.2.2 堆串字符串包括串名与串值两部分&#xff0c;而串值采用堆串存储方式存储&#xff0c;串名用符号表存储。堆串存储方式&#xff1a;这种存储方法以一组地址连续的存储单元存放串的字符…