| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 计算机网络之数据链路层(一) -> 正文阅读 |
|
[网络协议]计算机网络之数据链路层(一) |
一.数据链路层简介? ? ? ? 数据链路层属于计算机网络的低层。数据链路层使用的信道主要有以下两种类型。 ? ? ? ? ? ? ? ? (1)点对点信道。这种信道使用一对一的点对点通信方式。 ? ? ? ? ? ? ? ? ? (2)? ?广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上可以连接多个计算机,因此必须使用专用的共享信道协议来协调这些计算机的数据发送。 二.数据链路与帧? ? ? ? 数据链路≠帧 ? ? ? ? 链路(Link)就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。在进行数据通信时,两台计算机之间的通信路径往往要经过许多这样的链路。可见链路只是一条路径的组成部分。 ? ? ? ? 数据链路(Date Link)则是另一个概念。这是因为当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。 ? ? ? ? 帧(Frame)——数据链路层的协议数据单元 ? ? ? ? 数据链路层把网络层交下来的数据构成帧发送到链路上,以及把接收到的帧中的数据取出并上交给网络层。 三.封装成帧????????数据链路层以帧为单位传输和处理数据。网络层的?IP?数据报必须向下传送到数据链路层,成为帧的数据部分,同时它的前面和后面分别添加上首部和尾部,封装成一个完整的帧。帧的长度等于帧的数据部分长度加上帧首部和帧尾部的长度。数据链路层必须使用物理层提供的服务来传输一个一个的帧。物理层將数据链路层交給的数据以比特流的形式在物理链路上传输。因此,数据链路层的接收方为了能以帧为单位处理接收的数据,必须正确识别每个帧的开始和结束,即进行帧定界。 此处我们假定flag为帧开始与结束标志。 例:flag123456789abcdefgflag ? ? ? ? 可是如果在所需要传输的数据中存在flag关键字,则会发生判断错误。 例:flag123456flagabcdefgflag ? ? ? ? 可以看到,除了本身头和尾部有‘flag’外中间的数据部分中也出现了一个‘flag’,定界就会发生错误。 ? ? ? ? 为了解决上述发生的定界错误问题,实现‘透明传输’可以使用一种称为字节填充或字符填充的方法。该方法就是添加‘转义字符’的概念,在接收端的数据链路层对转义字符后面出现的标记字符不再解释为帧定界符,并且在将数据送往网络层之前删除这个插入的转义字符。此处以esc代表转义字符 例1:要发送的字符:flag123456flagabcdefgflag 添加转义字符后发送的字符:flag123456escflagabcdefgflag 接收端收到上述字符后删除转义字符:flag123456flagabcdefgflag? ? ? ?此时原来中间的flag就会被正确的识别,而不是被当成关键字。 ? ? ? ? 当物理链路提供的是面向比特的传输服务时,帧定界标志可以使用某个特殊的比特组合。 ? ? ? ? 比特填充来实现透明传输: PPP协议采用零比特填充法来说明比特填充。在发送端,先扫描整个信息字段(通常是用硬件实现,但也可用软件实现,只是速度会变慢。)该方法简单来说就是发现有5个连续的1,就在第五个1后面填入0。 例:原比特组合:0100111111001010 ? ? ? ? 发送方在5个1之后填入一个0比特再发送:01001111101001010 ? ? ? ? 接收方删去5个连续1之后的一个0得到原比特组合:0100111111001010 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 2:04:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |