目录
由于可靠传输的实现机制2、3——回退N帧协议GBN和选择重传协议SR实在是难以用一篇博客讲清楚,所以我把视频链接发在下面,感兴趣的同学可以去学习一下:
【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb?p=27&share_source=copy_web&vd_source=97b6ca34a029129aad2f5e8177ba05f1
以下图片均来自UP主:湖科大教书匠
我们来回到正题,讲解一下点对点协议PPP(目前使用最广泛的点对点数据链路层协议)
PPP协议具体的使用场景
- 一般用户想要接入到因特网,需要通过ISP,也就是因特网服务供应商。我国有著名的三大ISP,也就是中国电信,中国联通和中国电信。这些ISP已经在因特网管理机构申请到了一批IP地址,用户在与ISP通信获取IP地址时,所使用的数据链路层协议一般就是PPP协议(以太网所使用的是PPPoE协议)(Point-to-Point over Ethernet )
- PPP协议也广泛应用于广域网路由器之间的专用线路
PPP协议的组成部分
PPP协议由以下三部分组成:
- 封装成帧
- 链路控制协议LCP 用于建立,配置以及测试数据链路的连接
- 一套网络控制协议NCPs 用于支持不同的网络层协议
PPP协议帧的格式
大家想想,封装成一个帧,需要哪些要素呢?
帧其实就是由一些数据封装而成,数据的传输其实就是一个个比特进行传输,在比特流中,接收端如何知道哪些比特是一个帧呢?
就好像你打字时输入xi an ,可能打出来”西安“,也可能打出来“先”,如果不做声明的话,输入法也搞不懂你是要打一个字还是两个字
这里就需要定界符,定界符存放在帧头的最前端和帧尾的最末端
在PPP协议的组成部分中我们讲了,PPP协议中是有一套网络控制协议NCPs来支持不同的网络层协议,所以要有一部分比特用来标识该PPP协议帧究竟是支持哪种网络层协议
另外就是要有差错检测(FCS)的字段
明白了这些我们再来看下面这个图片,这样就会清晰直观许多
PPP协议解决透明传输问题的两种办法
有些细心的同学会发现,标志字段取值为0x7E,如果帧的数据部分中也出现了值为0x7E的字节的话,那这个7E不就会被识别成帧尾的标志字段,认为该帧已经结束,这样不就出错了嘛?这也就是我们要解决的透明传输问题
确实如此,接下来我们就来了解如何解决该问题
有两种解决办法,采用哪种解决办法取决于所使用的链路类型
链路类型一共有两种:面向字节的异步链路,面向比特的同步链路
字节填充法(插入转义字符)——面向字节的异步链路
发送方的处理方法如下:
1、将数据部分中出现的每一个7E(PPP帧的定界符)字节转变为2字节序列(7D,5E),7D是转义字符,这里的5E是7E减去十六进制的20所得到的
为什么是20,是因为十进制的32等于十六进制的20,而在ASCII编码中,第 0~31 个字符(开头的 32 个字符)都具有一些特殊功能,被称为控制字符( Control Character)或者功能码(Function Code)
2、将数据部分中出现的每一个7D(转义字符)字节转变成二字节序列(7D,5D)
3、将数据部分中出现的每一个ASCII码控制字符(小于0x20的字符),在该字符前插入一个7D字节,同时加上0x20
而接收方只需要进行反变换就能够恢复出原来的帧的数据部分
比特填充法(插入比特0)——面向比特的同步链路
发送方只要发现5个连续的比特1(一般通过硬件扫描发现),就立即填充一个比特0,如下图所示
同样,接收方只需要将每个填充的比特0去掉就可以恢复出原来的帧的数据部分了
今天的学习记录到此结束啦,咱们下篇文章见,ByeBye!