南京手机网站开发,公司在兰州要做网站怎样选择,全网高清素材下载,网站开发工具蜡笔小新计算机网络#xff1a;数据链路层 - 点对点协议PPP PPP协议的帧格式透明传输字节填充法零比特填充法 差错检测循环冗余校验 对于点对点链路#xff0c;PPP协议是目前使用最广泛的数据链路层协议。比如说#xff0c;当用户想要接入互联网#xff0c;就需要通过因特网服务提供… 计算机网络数据链路层 - 点对点协议PPP PPP协议的帧格式透明传输字节填充法零比特填充法 差错检测循环冗余校验 对于点对点链路PPP协议是目前使用最广泛的数据链路层协议。比如说当用户想要接入互联网就需要通过因特网服务提供者ISP 这些 ISP 已经从英特网管理机构申请到了一批 IP 地址用户计算机只有获取到 ISP 所分配的合法 IP 地址后才能成为因特网上的主机。而用户计算机与 ISP 之间进行通信时所使用的数据链路层协议就是 PPP 协议。另外点对点协议 PPP 也广泛应用于广域网路由器之间的专用线路。
PPP协议的帧格式
PPP协议的帧格式如下 以上帧格式中各区域功能如下 F出现于整个帧的首尾都是标志字段也就是PPP帧的定界符 帧定界符用于帮助接受方区分一个帧这个标志字段规定为十六进制的0x7E在ASCII码表中代表字符~。 A地址字段没有实际意义 C控制字段没有实际意义 在设计PPP协议之初考虑以后再对这两个字段的值进行其他定义但至今也没有给出因此这两个字段并不携带什么信息。其中A被规定为十六进制的0xFFC被规定为十六进制的0x03。 协议指明信息部分的类别 上图中网络层把数据段交给数据链路层封装成帧而协议这个字段的作用就是用于指明网络层传来的数据的种类。该字段占两个字节当协议字段为十六进制0x0021PPP中的信息字段就是IP数据报当协议字段为十六进制0xC021PPP中的信息字段就是LCP分组当协议字段为十六进制0x8021PPP中的信息字段就是NCP分组。 FCS用于差错检测 此处使用的时CRC循环冗余校验这个在博客后文会讲解。 信息部分即上层传递下来的被封装成帧的数据 这个信息字段的长度不是固定的但是如果信息字段太长就会导致分组的效率变低因此规定信息字段的长度不超过1500 byte。
数据链路层的三大问题在于封装成帧透明传输差错检测。
现在我们已经了解了PPP协议是如何封装成帧的接下来我们再来看看PPP协议是如何完成透明传输的。 透明传输
字节填充法
当PPP使用异步传输时以字节为单位传输数据采用字节填充法来实现透明传输字节填充法采用转义字符实现对数据段中的0x7E的转义。 比如上图中如果我们只考虑两个帧定界符不考虑地址字段控制字段和FCS。帧定界符的十六进制为0x7E但是如果数据段中也出现了0x7E这该怎么办
这就会导致一个问题那就是对帧的拆分错误比如上图中第一个粉色的0x7E是帧开始符最后一个粉色的0x7E是帧结束符。但是数据段中还有三个0x7E因此接收方就有可能把第一个粉色的符号当作帧的开始而第二个绿色的符号当作帧的结束。这就会造成错误的帧划分以及错误的数据接收。因此我们要对数据段中的0x7E数据段进行特殊处理让接收端可以区别数据段中的0x7E与帧定界符。
处理方式为字节填充规则如下 当在数据段中遇到0x7E先将0x7E的第五个比特位取反变成0x5E再在其前面插入0x7D 在数据段中遇到0x7E就把0x7E第五位取反为0x5E然后再在其前面插入一个0x7D。这样只要接收方在读取数据的时候只要遇到了0x7D这个转义字符就把这个转义字符丢弃再将其后一位字节的第五位取反就得到了原先的数据。
但是我们还有一个问题如下 如果原本的数据段中就有转义字符0x7D那么接收方又要如何识别这是一段数据而不是一个转义字符呢 当在数据段中遇到0x7D先将0x7D的第五个比特位取反变成0x5E再在其前面插入0x7D 用和之前相同规则当接收方遇到0x7D就把0x7D丢弃然后把后面的0x5E的第五位取反得到原始数据。
另外的PPP协议对数据段还有额外的处理在所有字符中还有一些控制字符即ASCII码表中的0 - 32号字符以及第127号字符。这些字符才数据段中也要处理 当在数据段中遇到控制字符将该字符的第五个比特位取反再在其前面插入0x7D 和之前一模一样的方法不再赘述了。
字节填充汇总如下 一旦遇到0x7E帧定界符0x7D转义符以及控制字符就将其第五位取反再在其前面插入一个0x7D转义 接收方受到数据后只要遇到0x7D转义符就把该符号丢弃然后将其后一个字节的数据第五位取反 零比特填充法
当PPP使用同步传输时以比特为单位传输数据采用零比特填充法来实现透明传输。
零比特填充法规则如下 当在数据段中遇到连续的五个1就在其后面插入一个0 PPP协议中帧定界符是0x7E转为2进制就是01111110其中出现了连续的六个1。为了保证数据部分中的数据不会被判断为定界符于是只要数据段中出现连续的五个1就插入一个0这样就只有帧定界符中会出现连续的六个1。
当接收方接收时只需要在遇到五个1时看其后面的一位如果第六位为1说明这是帧定界符。如果第六位为0说明这个0是插入的把它删除后还原出原始数据。 差错检测
再来看差错检测发送方将封装好的帧通过物理层发送到传输媒体。帧在传输过程中遭遇干扰后可能会出现误码也就是比特 0 可能变成了比特 1反之亦然。 在一段时间内传输错误的比特占所传输比特总数的比率称为误码率。 但是接收方主机如何判断帧在传输过程中是否出现了误码呢
这可以通过检错码来发现。发送方在发送帧之前基于待发送的数据和检错算法计算出检错码并将其封装在帧尾。接收方主机收到帧后通过检错码和检错算法就可以判断出帧在传输过程中是否出现了误码。
循环冗余校验
在PPP协议中使用了循环冗余校验 CRC 的检错技术。 假定发送端发送的原始数据为k个比特对原始数据进行CRC运算产生了n位冗余码FCS把n位冗余码FCS放入帧的末尾一起发送出去。
那么我们现在就来讲解一下这个冗余码FCS是如何计算的 在原始k位数据后面加n个 0用指定的n 1位除数p对这个k n位的数据段做模2除法最后得到的n位除数就是冗余码FCS用冗余码FCS替换最后的n位0 假设我们现在的原始数据为101001约定的除数p为1101 除数p为4位数那么n就是4 - 1 3位因此在101001后面添上3位0 现在就可以开始进行模2除法了 所谓模2除法就是每次进行相除操作时上下按位异或比如以上式子中1010和1101按位异或就是0111在后面补一位0就是1110。以此类推一直计算下去 由于我们的除数p是n 1位所以最后的余数一定是小于等于n位的如果不够n位就在前面补0补到n位。然后把这n位除数替换掉原数据中的n位0得到101001 001。
101001 001这一段数据中101001是原始的数据 001就是冗余码FCS。
一开始我们拿p除以101001 000余数为001。我们把001补上去后数据变成了101001 001那么p除以101001 001就应该是0。因此如果接收端用p除以k n位数据等于0就说明数据没有出问题是正常的。但是如果结构非0说明有比特位出现了差错那么接收端就可以知道传输出问题进行后续操作了。
要注意的是这个除数p是一开始双方就约定好的因此双方都是知道拿p去除以这个数据段。