vb.netserialport数据接收不完整_计算机网络之数据链路层基础详解

注:本文是以makdown形式直接复制的,文章较长,知乎有些文字形式不太支持。为了方便也可以看这篇,目录比较清晰便于观看:

计算机网络之数据链路层基础概念详解_weixin_44282063的博客-CSDN博客​blog.csdn.net
9ae515047c8023c15de28bfd084749be.png

概览

8aecaec46efacb287e8cd1ffb653f7fe.png

数据链路层思想相关概念术语数据链路层在网络中的地位
我们知道,两个主机之间的数据 传输,总是在一段一段的链路上传送的,也就是说,在两个相邻结点之间(主机和路由器之 间或两个路由器之间)传送数据是直接传送的(点对点)。这时就需要使用专门的链路层的 协议。在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧 (framing),在两个相邻结点间的链路上“透明”地传送帧(frame)中的数据。每一帧包括数据 和必要的控制信息(如同步信息、地址信息、差错控制等)。

05be1ca5df88e64edb8e248a47b3d88e.png


H2发送数据时,从协议的层次上看,数据的流动如图3-1(b)所示。主机H1和H2都有完整的 五层协议栈,但路由器在转发分组时使用的协议栈只有下面的三层冬数据进入路由器后要 先从物理层上到网络层,在转发表中找到下一跳的地址后,再下到物理层转发出去。因此, 数据从主机Hi传送到主机H2需要在路径中的各结点的协议栈向上和向下流动多次,如图中 的浅灰色箭头所示。(自上而下对数据封装过程,自下而上对数据解封过程)。
当我们研究数据链路层时可以进一步简化,形成一条简化链路

509631e135ec5d6bb3e7db7099925432.png


H1的链路层一R1的链路层一R2的链路层一R3的链路层一H2的链路层

  • 相关概念及术语
    结点:主机,路由器
    链路:将把沿着通信路径连接相邻节点的通信信道称为链路(Hnk)(物理通通道,双绞线、光纤等)。
    数据链路:两个结点间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上构成数据链路。
    帧:链路层的协议数据单元(PDU),封装网络层数据报。

数据链路层提供的服务
举个例子,假设网络层是公司老板,然后数据链路层是秘书,物理层是员工,老板想要将一份文件传给公司的另一个老板,那么老板先将文件传给秘书,秘书将文件传给员工,员工将这份文件传给对方公司的秘书,然而这个员工(物理层)是个大迷糊,传送过程中将文件丢失,对方秘书就不上交文件让员工返回寻找丢失的文件。所以,链路层起到的作用就是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改成为逻辑上无差错的数据链路。成帧及透明传输

  • 几乎所有的链路层协议都在经链路传送之前,将每个网络层数据报用 链路层帧封装起来。一个帧由一个数据字段和若干首部字段组成,其中网络层数据报就 插在数据字段中。(一个帧也可能包括尾部字段,然而我们把首部字段和尾部字段合称 为首部字段。)
  • 在一段时数据的前后分别添加首部和尾部,这样就构成以一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别 帧的开始和结束。
    帧的结构如图:

a3c193dff0e1826fa7b4679ee2450948.png
  • 为了提高帧的传输效率, 应当使帧的数据部分长度尽可能地大于首部和尾部的长度。但是,每一种链路层协议都规定 了帧的数据部分的长度上限——最大传送单元MTU (Maximum Transfer Unit)。
  • 首部和尾部都提供很多重要的控制信息,他们的一个重要作用就是帧定界(确定帧的界限)。
  • 透明传输
    透传的设备是个黑箱子,进来是什么出去也是什么透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使接收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。透传的设备是个黑箱子,进来是什么出去也是什么。
  • 实现透明传输的成帧方法
    1.字符或字节填充的定界方法

549205e5fafaf09fa6242f135598ec09.png


控制字符 SOH (Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT (End Of Transmission)表示帧的结束。请注意,SOH和EOT都是控制字符的名称。它们的十六进制 编码分别是01 (二进制是00000001)和04 (二进制是00000100)。SOH (或EOT)并不是 S, O, H (或E, 0, T)三个字符。
当数据在传输中出现差错时,帧定界符的作用更加明显。假定发送端在尚未发送完一 个帧时突然出故障,中断了发送。但随后很快又恢复正常,于是重新从头开始发送刚才未发 送完的帧。由于使用了帧定界符,在接收端就知道前面收到的数据是个不完整的帧(只有首 部开始符SOH而没有传输结束符EOT),必须丢弃。而后面收到的数据有明确的帧定界符 (SOH和EOT),因此这是一个完整的帧,应当收下。
如果数据部分出现EOF就会产生问题:

4d7b28e608fec906d4a12d1734867f9c.png


如图所示,部分数据就被视为无效进而丢弃,接收的数据就会有损失,一个很好的解决方法就是数据中如果出现“soh”“eot”,就在其前面插入一个转义字符“ESC”(其十六进制编码是 1B)。

a45d863fed27d15684a55f4d32cf8dfe.png


接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。如果转义字符也出现数据当中,那么应在转义字符前面插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
转义字符你可以理解为程序中的'//',也就是注释,编译器编译程序时,//字符后面的内容就不执行。
2.比特填充的标志法
以01111110作为一帧的开始和结束标志F字段在发送端,只要发现有 5 个连续 1,则立即填入一个 0。
接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
假如数据中出现和标志字段01111110一样的内容,则在第5个1后加入0。

5f947a38ed65e8b4703003da6d72a70a.png


3.字符计数法(较容易出错)

3a0095e0dea266a2e5091d422905dd63.png


为什么说易错,假如第一个帧的第一个字节本来应是5但是出错变成了4,那么第一个帧就变为第4个字符,那么第二个帧原来第一个字节应是5,但却因为第一个帧的第一个字节出错所以变为4,,,,那么整个数据就出错。所以这种法不经常使用。

可靠交付(reliable delivery)
当链路层协议提供可靠交付服务时,它保证无差错地经 链路层移动每个网络层数据报。链路层的可靠交付服务通常是通过确认和重传取得的。链路层可靠交付服务通常用于易产生高差错率的链路,例如无线链路,其目的是本地(也就是在差错发生的链路上)纠正一个差错,而不是通过运输层或应用层协议迫使进行端到端的数据重传。然而,对于低比特差错的链路,包括光纤、铜 轴电缆和许多双绞铜线链路,链路层可靠交付可能会被认为是一种不必要的开销。由于这个原因,许多有线的链路层协议不提供可靠交付服务。流量控制

  • 流量控制(flow control)。链路每一端的节点都具有有限容量的帧缓存能力。当接收节点以比它能够处理的速率更快的速率接收分组时,这是一个潜在的问题。没有流量控制, 接收方的缓存区就会溢出,并使帧丢失。与运输层相似,链路层协议能够提供流量控制, 以防止链路一端的发送节点淹没链路另一端的接收节点。举个例子,接受方相当于一个门,而数据相当于人,而门只有那么大,如果然太多一下子都想从门中进入,那么门容不下就只能溢出。也就是缓冲区溢出,发生丢包现象。
  • 传输层与链路层传输机制比较
    数据链路层流量控制机制 : 如果接收方发现接收不了 , 就不再回复 确认帧 ; 确认帧 是 不包含数据的 控制帧。
    传输层流量控制机制 : 接收方给发送方发送窗口公告 ; 窗口公告就是接收方的接收缓冲区大小 , 让发送方不要发送太多数据 。
  • 流量控制方法
    1.停止等待协议
    停止等待协议 : 发送端 每发送 完一帧 , 就停止发送 , 等待 接收方 确认 , 收到 接收方 的确认信息后 , 再发送下一帧 。
    过程如图所示:

0ae9fbb0661551ad1ae0f7c234e0d965.png <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值