标签:接受 ips 一段 基于 硬件 字符 检验 插入 char
PS:我们已经说过了物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。这样能使物理层上面的数据链路层感觉不到这些差异。物理层传输的是比特,那么数据链路层传输的又是什么呢?又该如何传输呢?
数据链路层也是属于计算机网络的底层,也是基于信道传输的。数据链路层的使用的信道主要有点对点信道和广播信道。
这种信道使用的是一对一的点对点的通信方式。我们先来看一下什么是链路、数据链路,二者的区别?
所谓链路(link)其实就是指从一个结点到相邻结点的一段物理线路(有线或无线),中间没有任何其他的交换结点。可知,一条链路只是一条通路的一个组成部分。
而数据链路(data link)则是另一个概念,我们应该知道在一条线路上传输数据,仅有物理线路还不够,还需要一些必要的通信协议来控制这些数据的传输。若把实现这些协议的硬件加软件加到链路上,就构成了数据链路。
PS:现在最常用的是使用网络适配器即网卡(硬件+软件)来实现这些协议,所以一般的网络适配器都包括了数据链路层和物理层这两层的功能。
在数据链路层的协议数据单元PDU是帧,现在再来说一下数据链路层的任务(作用):数据链路层把网络层交下来的数据(网络层的PDU是IP数据报或叫分组,包)构成帧发送到链路上,以及把接受到的帧中的数据取出来并上交给网络层。
我们已经说过了在数据链路层中应该有一些协议来控制帧的传输,数据链路层的协议有许多种,但都需要解决三个基本的 问题:封装成帧、透明传输、差错检测。下面分别讨论这三个问题。
1、封装成帧:封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。为什么要封装成帧?这一点我们从分组交换的概念中应该能够知道一些,因为在互联网上传送的数据都以分组(IP数据报)为传送单位,而网络层的下一层就是数据链路层,将分组加上首部和尾部就变成了帧。首部和尾部的一个重要作用就是帧定界(确定帧的界限),当然也包括一些重要的控制信息。
显然,为了提高帧的传输效率,应当使帧的数据部分(IP数据报)尽可能地大于首部和尾部的长度。当是每一种链路层的协议都规定了帧的数据部分的最大长度--MTU,下面的图给出了帧的首部和尾部的位置,以及帧的数据部分和MTU的关系。
当数据是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符。 控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始。另一个控制字符 EOT (End Of Transmission) 表示帧的结束。假定发送端在发送时出现故障,某个帧没有发送完,接收端可以通过是否有EOT来确定这个帧是否完整。
2、透明传输:所谓的透明传输是指在数据链路层传送的数据,都能够按照原样没有差错的通过这个数据链路层。也就是相当于数据链路层对于这些数据是透明的。上面,已经说过可以通过控制字符来确定一个帧的开始与结尾,但是如果一个字节的二进制编码恰好和控制字符SOH或EOT一样,那么就会出现帧定界的错误。
所以怎么解决这个问题呢?解决方法:字节填充 (byte stuffing) 或字符填充 (character stuffing)。 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC” (其十六进制编码是 1B)。接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
3、差错检测:这里所说的“差错”是“比特差错”,1 可能会变成 0 而 0 也可能变成 1。在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。 误码率与信噪比有很大的关系。 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。
Tips:仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受 (accept)。“无比特差错”与“无传输差错”是不同的概念。在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输(还需加入确认和重传的机制以防止帧丢失、帧重复和帧失序)。
标签:接受 ips 一段 基于 硬件 字符 检验 插入 char
原文地址:https://www.cnblogs.com/yunche/p/8977955.html