计算机网络——数据链路层-封装成帧(帧定界、透明传输-字节填充,比特填充、MTU)

目录

介绍

帧定界

PPP帧

以太网帧

透明传输

字节填充(字符填充)

比特填充

比特填充习题

MTU


介绍

所谓封装成帧,就是指数据链路层给上层交付下来的协议数据单元添加帧头和帧尾,使之成为帧。

例如下图所示:

在帧头和帧尾中,包含有重要的控制信息,例如以太网版本2的MAC帧格式:

以及点对点协议PPP的帧格式 :

发送方的数据链路层将上层交付下来的协议数据单元封装成帧后,还要通过物理层将构成帧的各比特转换成电信号,发送到传输媒体 。

帧定界

PPP帧

那么接收方的数据链路层,如何从物理层交付的比特流中提取出一个个的帧呢?

实际上,帧头和帧尾的作用之一就是帧定界。例如这是PPP帧的格式:

在其帧头和帧尾中,各包含有一个长度为1字节的标志字段,其作用就是帧定界 。

假设发送方发送的是PPP帧,那么接收方的数据链路层就可以依据帧定界标志,从物理层交付的比特流中提取出一个个的帧。

需要说明的是,并不是每一种数据链路层协议的帧都包含有帧定界标志,例如在以太网版本2的MAC帧格式中,其帧头和帧尾中,并没有包含帧定界标志。

以太网帧

那么接收方又是如何从物理层交付的比特流中,提取出一个个的以太网帧呢?

实际上,以太网的数据链路层封装好MAC帧后,将其交付给物理层,物理层会在MAC帧前面添加8字节的前导码,然后再将比特流转换成电信号发送。

前导码中的前7个字节为前同步码,作用是使接收方的时钟同步,之后的1字节为帧开始定界符,表明其后面紧跟着的就是MAC帧。 

另外以太网还规定了帧间间隔时间为96比特的发送时间,因此MAC帧并不需要帧结束定界符

需要说明的是,帧间间隔还有其他作用,在后续文章中再进行介绍 。

透明传输

字节填充(字符填充)

接下来介绍透明传输的问题,

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

我们来举例说明:

这是发送方数据链路层收到其上层交付的协议数据单元,给其添加帧头和帧尾,使其成为帧,为了简单起见,只画出了帧头和帧尾中的帧定界标志。

帧定界标志也就是一个特定数值,如果在上层交付的协议数据单元中恰好也包含了这个特定数值,接收方就不能正确接收该帧了。

如下图所示,接收方在收到第一个帧定界标志时,认为这是帧的开始,这并没有错误;当接收方再次接收到帧定界标志时,会误认为帧结束了,如果数据链路层不采取其他措施来避免接收方对帧是否结束的误判,就不能成为透明传输。

也就是说,数据链路层对上层交付的协议数据单元有限制,其内容不能包含帧定界符。很显然,这样的数据链路层没有什么使用价值。

实际上各种数据链路层协议一定会想办法来解决这个问题。例如在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符,就在其前面插入一个转义字符

具体如下:

接收方数据链路层在物理层交付的比特流中提取帧遇到第一个帧定界符时,认为这是帧的开始,当遇到转义字符时,就知道其后面的1字节内容虽然与帧定界符相同,但它是数据而不是定界符。

请大家再来思考一下这种情况:在上层交付给数据链路层的协议数据单元中,既包含了帧定界符,又包含了转义字符,应该怎么处理呢?

方法仍然是在发送帧之前,对帧的数据部分进行扫描,每出现一个帧定界符或转义字符,就在其前面插入一个转义字符。

需要说明的是,转义字符是一种特殊的控制字符,其长度为1个字节,十进制值为27,而并不是E、S以及C这三个字符。

比特填充

我们刚刚介绍的是,面向字节的物理链路使用字节填充(或称字符填充)的方法来实现透明传输。

对于面向比特的电路,应该使用比特填充的方法来实现透明传输。

例如这是某个点对点协议的帧:

为了简单起见,在帧首部和尾部中仅给出了帧定界标志,而未给出其他控制字段。

而帧的数据部分出现了两个帧定界标志,但它们实际上是数据而不是帧定界:

在发送前可以采用0比特填充法对数据部分进行扫描,每五个连续的比特1后面就插入一个比特0。这样就确保了帧定界在整个帧中的唯一性,也就可以实现透明传输 。

接触方的数据链路层从物理层交付的比特流中提取帧时,将帧的数据部分中的每五个连续的比特1后面的那个比特0剔除即可。

比特填充习题

接下来我们来做一个有关0比特填充的练习题,这是计算机专业考研全国统考计算机网络部分2013年的题37:

题目中所给的高级数据链路控制协议HDLC,采用帧头和帧尾中的标志字段作为帧定界,其值为01111110,HDLC为了实现透明传输,采用0比特填充法。

也就是每5个连续一后面插入一个比特0,因此选项A正确。

MTU

最后还要注意一点,为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大一些

如图所示:

帧的数据部分的长度应远大于帧头和帧尾的长度,这样才能提高帧的传输效率。

因为仅从数据链路层来看,帧的数据部分才是真正要传输的数据,帧头和帧尾是为了实现数据链路层功能而额外添加的。 

当然,考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,称为最大传送单元MTUMaximum Transfer Unit)。


END


学习自:湖科大——计算机网络微课堂

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

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

相关文章

Unity Image - 镜像

1、为什么要使用镜像 在游戏开发过程中,我们经常会为了节省 美术图片资源大小,美术会将两边相同的图片进行切一半来处理。如下所示一个按钮 需要 400 * 236,然而美术只需要切一张 74*236的大小就可以了。这样一来图集就可以容纳更多的图片。…

[WP] ISCTF2023 Web 部分题解

圣杯战争!!! 反序列化伪协议读取 where_is_the_flag 环境变量根目录当前目录 绕进你的心里 利用正则最大回溯绕过 easy_website or select 用双写绕过 空格用/**/绕,报错注入 wafr codesystem(ca\t /f*) webinclude 扫描得到index.bak备份文件打开为加密的代码 写…

java游戏攻略资讯网站的设计与实现springboot+vue

游戏攻略网站分为管理员与用户两种角色。 管理员的功能包括登录,用户管理,游戏分类管理,游戏攻略管理,游戏资讯管理等。 登录功能:管理员需要登录进入系统后台。 用户管理:实现用户信息的查询,修…

NodeJS(二):npm包管理工具、yarn、npx、pnpm工具等

目录 (一)npm包管理工具 1.了解npm 2.npm的配置文件 常见的配置属性 scripts属性*** 依赖的版本管理 3.npm安装包的细节 4.package-lock文件 5.npm install原理** 6.npm的其他命令 (二) 其他包管理工具 1.yarn工具 基本指令 2.cnpm工具 3.npx工具 (1)执行本地…

Seaborn图形可视化基础_Python数据分析与可视化

Seaborn图形可视化基础 Seaborn可视化Seaborn与Matplotlib Seaborn可视化 即使matplotlib已经如此强大了,但是不得不承认它不支持的功能还有很多。 例如: 2.0之前的版本的默认配置样式绝对不是用户的最佳选择; matplotlib的API比较底层。虽…

1.2 Ubauntu 使用

一、完成VMware Tools安装 双击 VMwareTool 打开 Ubuntu 终端快捷键 AltControlT 切换汉语的快捷键是Alt空格 ls 打印出当前所在目录中所有文件和文件夹 cd 桌面 进入桌面文件夹 sudo ./vmware-install.pl 安装tool,输入之前设置的密码。 地址默认,按…

蓝桥杯day03——Bigram 分词

1.题目 给出第一个词 first 和第二个词 second,考虑在某些文本 text 中可能以 "first second third" 形式出现的情况,其中 second 紧随 first 出现,third 紧随 second 出现。 对于每种这样的情况,将第三个词 "th…

海外IP罗拉rola正版去哪里找?

免费海外IP代理能用吗?和收费的有哪些差异? 如今在这个大数据时代,无论你从事哪个行业,都离不开数据,尤其是做跨境电商的,更一步都离不开海外IP代理,无论是网站引擎优化还是营销推广、数据抓取…

二叉树展开为链表的三种写法

二叉树展开为链表 链表头节点法 新建一个树形链表,前序遍历这个树,遍历到一个节点就往里插 class Solution {TreeNode dummyNode new TreeNode(0,null,null);TreeNode p dummyNode;public void flatten(TreeNode root) {if(root null) return;//线序…

15.oracle的 listagg() WITHIN GROUP () 行转列函数使用

1.使用条件查询 查询部门为20的员工列表 -- 查询部门为20的员工列表 SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO 20 ; 效果: 2.使用 listagg() WITHIN GROUP () 将多行合并成一行(比较常用) SELECT T .DEPTNO, listagg (T .ENAME, ,) WIT…

知虾如何选品丨如何使用知虾进行选品和优化策略

在Shopee平台上作为卖家,如何进行选品和优化策略是一个至关重要的问题。而知虾作为一个为Shopee卖家提供数据分析的工具,可以帮助您更好地进行选品和优化策略。在本文中,我们将介绍如何使用知虾进行选品,并提供一些建议和步骤。 知…

python可视化之——seaborn简单图绘制指南

0. 主要内容 该笔记主要包括常见的:散点,折线,box,violin,等图的绘制,可以帮助我们了解数据存在的变量之间的某种关系或者数据趋势。在日常工作中,我们可以进行简单的数据分析和可视化&#xff…