数据链路层简介_数据链路层的介绍-程序员宅基地

技术标签: 信息安全  理论  网络安全  

1.数据链路层的基本概念

数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。

2.数据链路层使用的信道

点对点信道:这种信道使用一对一的点对点通信方式
广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多,因此必须使用专用的共享信道协议来协调这些主机的数据发送。

3.数据链路层的链路状态

点对点链路:连接两个且只连接两个结点的链路。一端只有一个发送方,另一端有一个接收方。如一个PC连接一个服务器;两个地方的电话连接。
多点链路:同一链路上,连接多个结点。从主机到A,从A到B,从C到D,都是链路;从主机到D是电路(circuit)。
在这里插入图片描述

4.链路层协议提供的服务

链路层协议的功能是在一个路径(path)中,经过一个单一链路,进行结点 到 结点的网络层数据报的移动。

5.使用点对点信道的数据链路层
5.1数据链路和帧

链路(link)/物理链路:从一个结点到相邻结点的一段物理线路(有线或无线),而中间没有任何其他的交换特点。在进行数据通信时,两台计算机之间的通信路径往往要经过许多段这样的链路。

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

帧:数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包,等等。

通常在两个对等的数据链路层之间画出一个数字管道,而在这条数字管道上传输的数据单位是帧。
在这里插入图片描述
早期的数据通信协议曾叫做通信规程(procedure)。因此在数据链路层,规程和协议是同义语。

点对点信道的数据链路层在进行通信时的主要步骤如下:
在这里插入图片描述
1)结点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧;
2)结点A把封装好的帧发送给结点B的数据链路层;
3)若结点B的数据链路层收到的帧无差错,则从收到的帧中提取出IP数据报交给上面的网络层;否则丢弃这个帧。
数据链路层不必考虑物理层如何实现比特传输的细节。我们甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方,如上图(b)所示。

5.2三个基本问题

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

首部和尾部的一个重要的作用就是帧定界,当数据是由可打印的ASCII码组成的文本文件时,帧定界可以使用特殊的帧定界符(首部(SOH),尾部(EOT)分别表示帧的开始和结束),当数据在传输中出现差错时,帧定界符的作用更加明显(只收到SOH没收到EOT则判断此数据是不完整的帧,丢弃;收到了SOH和EOT则判断此数据是一个完整的帧,收下)。
在这里插入图片描述
为了提高帧的传输速率应当使帧的数据部分长度尽可能地大于首部和尾部的长度,但是,每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传输单元MTU

在这里插入图片描述

透明传输:当传送的帧是用文本文件组成的帧时,其数据部分显然不会出现像SOH或EOT这样的帧定界控制字符。可见不管从键盘上输入什么字符都可以放进这样的帧中传输过去,因此这样的传输就是透明传输。

但当数据部分是非ASCII码的文本文件时,如果数据中的某个字节的二进制码恰好和SOH或EOT控制字符一样,则数据链路层会错误地找到帧的边界,只把部分帧收下(误认为是完整的帧),剩余部分丢弃(这部分找不到帧定界控制字符SOH)。
在这里插入图片描述
以上的传输就不是透明传输,需要解决
解决办法:
1)发送端的数据链路层在数据中出现控制字符"SOH"或"EOT"的前面插入一个转义字符"ESC"(其十六进制编码是1B)。
2)字节填充(byte stuffing)或字符填充(character stuffing)——接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
在这里插入图片描述
3)如果转义字符也出现数据当中,那么应在转义字符前面插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个。

差错检测:现实的通信链路都不会是理想的。这就是说,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变为1,这就叫做比特差错,它是传输差错中的一种。

在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。误码率与信噪比有很大的关系,如果设法提高信噪比,就可以使误码率减小。

在实际的通信链路中&#

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zjdda/article/details/107084519

智能推荐

【学习笔记】RT-Thread中flash管理 — [SFUD组件 和 FAL驱动组件介绍]_fal_mtd_nor_device_create-程序员宅基地

文章浏览阅读4.9k次,点赞8次,收藏34次。简介在RT-Thread中,对flash的操作采用了sfud和fal组件来封装底层,从而兼容不同厂商的flash的差异,避免项目因 Flash 缺货、Flash 停产或产品扩容而带来的风险**,统一的接口来操作flash**。SFUD 和 FAL 组件是github上的开源组件,均是可以独立出来的组件,无论是在裸机系统或者操作系统中都可以轻松移植。By the way ,这两款组件的主要作者都是armink,这位作者自己还有一些对于flash操作的特殊项目。在RT-Thread中,flash操作的_fal_mtd_nor_device_create

页面打印-程序员宅基地

文章浏览阅读92次。最佳答案对JS的打印方法总结一下,方便日后查阅。一.用JS自带函数打印直接调用Java代码 复制代码 1. <a href="javascript:window.print();">打印</a> <a href="javascript:window.print();">打印</a>..._toolbar: true可以打印页面吗

中国操作系统变迁史,鸿蒙之前的尸骨_国产操作系统的崛起之路的相关介绍-程序员宅基地

文章浏览阅读1.3w次,点赞156次,收藏236次。本文转载自程序员极客实验室把时钟调回到16年前,地处北京市东部远郊的平谷区做了一个大胆的决定:在全区行政公务系统全部大范围地使用国产Linux桌面操作系统,并纳入考核。此行的目的,是展开全面取代微软Windows的尝试。然而,国产操作系统并不受欢迎。在一年多的推广过程中,大家像小孩子过家家一样,在检查时用国产,检查完换盗版微软。许多问题暴露出来。比如,本来在使用微软浏览器上网很正常实现的功能,Linux下的浏览器却不能正常使用。16年过去了,6月2日晚间,华为在直播中,向观..._国产操作系统的崛起之路的相关介绍

char格式化linux和windows区别_linux和windows char区别-程序员宅基地

文章浏览阅读980次。在windows下可以使用 ''%C",将char字符格式化输入成大写字母而linux只能使用 "%c"进行格式化输入_linux和windows char区别

PAT-A-1006 Sign In and Sign Out【简单模拟】-程序员宅基地

文章浏览阅读3.8w次。At the beginning of every day, the first person who signs in the computer room will unlock the door, and the last one who signs out will lock the door. Given the records of signing in's and out's, you...

TFTP传输---wireshark抓包工具,听诊器_tftp抓包-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏6次。1.广播受限广播2.每两个16位进制组成一个字节,再翻译成ASCII码_tftp抓包

随便推点

修改Cisco交换机ntp服务器,在无线局域网控制器配置示例的NTP-程序员宅基地

文章浏览阅读859次。Introduction本文解释如何配置无线局域网控制器(WLCs)同步的日期和时间与网络时间协议(NTP)服务器。PrerequisitesRequirements尝试进行此配置之前,请确保满足以下要求:Cisco WLCs的配置的基础知识。NTP基础知识。Components Used本文档中的信息基于以下软件和硬件版本:CiscoWLC运行软件版本8.8.110.0的3504。运行Cisc..._cisco 3560 ntp

pandas合并多个DataFrame_pd.merge多个dataframe-程序员宅基地

文章浏览阅读7.1k次,点赞5次,收藏16次。pandas合并多个DataFrame合并两个DataFrame合并多个DataFrame合并两个DataFrame合并两个DataFrame用pd.mergeimport pandas as pdimport numpy as npdf1 = pd.DataFrame(np.array([ ['a', 1, 2], ['b', 3, 4], ['c', 5, 6]]), columns=['name', 'num11', 'num12'])df2 = pd._pd.merge多个dataframe

ArrayList核心代码注释汉化-程序员宅基地

文章浏览阅读244次。public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { private sta..._arraylist代码注释汉化

软件测试面试题:怎么设计接口测试用例?_面试题如何设计接口-程序员宅基地

文章浏览阅读2.3k次,点赞5次,收藏27次。怎么设计接口测试用例?通常,设计接口测试用例需要考虑以下几个方面:(1)是否满足前提条件有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token逆向用例:针对是否满足前置条件(假设为n个条件),设计0~n条用例(2)是否携带默认值参数正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其他不填写,设计1条用例(3)业务规则、功能需求这里根据时间情况,结合接口参数说明,可能需要设计N条正向用例和逆向用例..._面试题如何设计接口

jQuery实现遮蔽层的弹出层,根据后台循环取出的数据弹出所要的DIV层_jquery 弹出层后端获取-程序员宅基地

文章浏览阅读340次。<style type="text/css"> .bgDiv{ background-color:#e3e3e3; position:absolute; z-index:1; left:0; top:0; display:none; width:100%; ..._jquery 弹出层后端获取

关于sublime3的使用-程序员宅基地

文章浏览阅读40次。一、安装Package Control使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码:importurllib.request,os; pf ='Package Control.sublime-package'; ipp =sublime.installed_packages_path(); urllib.request.inst...