【计算机网络】数据链路层-基本数据链路层协议
协议1:一个乌托邦式的单工协议
单工协议即数据只能单向传输。这个协议假设信道永远不会丢失或损坏帧,接收方的处理能力足够快,缓冲区足够大。
发送程序无限循环,接受程序响应事件,协议1中不包含流量控制和纠错功能。
协议2:无错信道上的单工停-等式协议
发送方的速度如果过快,接收方会被淹没,除了增强接收方的处理能力,可以让接收方给发送方发送反馈,发送方收到后才可以发送下一帧。
发送程序无限循环并等待接收方确认,接受程序响应事件后发送确认帧。
协议3:有错信道上的单工停-等式协议
有错信道上传输数据需要增加校验,接收方仅在数据正确时发送确认帧。但在确认帧丢失的情况下(超时),发送方将重发。接收方难以判断帧是重发还是新发,因此帧前加上序号以区分。
重复的帧也会收到确认帧,以便发送方决策。
停止等待协议(Stop-and-Wait Protocol)
停止等待协议是tcp保证传输可靠的重要途径,”停止等待”就是指发送完一个分组就停止发送,等待对方的确认,只有对方确认过,才发送下一个分组.
无差错情况
无差错情况:发送方发送分组,接收方在规定时间内收到,并且回复确认.发送方再次发送……
超时重传的情况
1.分组丢失:发送方发送分组,接收方没有收到分组,那么接收方不会发出确认,只要发送方过一段时间没有收到确认,就认为刚才的分组丢了,那么发送方就会再次发送.
2.确认丢失:发送方发送成功,接收方接收成功,确认分组也被发送,但是分组丢失,那么到了等待时间,发送方没有收到确认,又会发送分组过去,此时接收方前面已经收到了分组,那么此时接收方要做的事就是:丢弃分组,重新发送确认.
3.传送延迟:发送方发送成功,接收方接收成功,确认分组也被发送,没有丢失,但是由于传输太慢,等到了发送方设置的时间,发送方又会重新发送分组,此时接收方要做的事情:丢弃分组,重新发送确认. 发送方如果收到两个或者多个确认,就停止发送,丢弃其他确认.
优缺点
停止等待协议的优点是简单,但是缺点是信道的利用率太低,一次发送一条消息,使得信道的大部分时间内都是空闲的,为了提高效率,我们采用流水线传输,这就与下面两个协议有关系了.
错误的控制
ARQ(自动重复请求)实现错误控制
- 如果正确的接收,那么接受方会发送一个"ack"帧给发送方
- 如果发送方没有收到接受方回复的"ack"帧,那么发送方会设置计时器并重新发送传输帧
为了确保正确性,必须对框架和ack进行编号
- 接收机需要区分重传(由于丢失ack或提前定时器)和新帧,对于stop和wait,2个数字(使用1位)就足够了
滑动窗口协议
滑动窗口的概念
发送方拥有着一个窗口,这个窗口里面装着可以发送的帧
- 它需要暂时存储这些帧,因为这些帧可能被重传
- 当这个窗口接受到确认帧后,它就会向前移动
接受方拥有着一个可以接受帧的窗口
- 它要为将要到来的帧预留空间
- 这个窗口随着按顺序到来的帧而逐渐向前移动
一开始的时候,接受方可以接受一个帧,发送方之后发送了一个帧。接受方接受了这个帧之后,可以向后滑动一个单位,准备接受下一个帧,当发送方得到接受方回复给它的确认帧ack之后,继续向后滑动一个窗口,准备发送下一个帧。
滑动窗口协议的特点
- 只有接受窗口向前移动的时候,发送窗口才会向前移动
- 从滑动窗口的概念来看,停止等待协议、回退N协议和选择重传协议只不过是发送窗口和接受窗口的大小不同
- 停止等待协议:发送窗口和接受窗口大小都是1
- 后退N协议:发送窗口>1,接收窗口大小为1
- 选择重传协议:发送窗口>1,接受窗口大小>1
- 当接收窗口大小为1的时候可以保证有序的被接收
- 数据链路层中,传输过程中滑动窗口的大小是固定的
可靠的传输机制
- 捎带确认:接收方在会给发送方发送一个确认帧来告诉发送方收到了
- 超时重传:在发送某个数据帧之后,就开启一个计时器,开始计时,一旦超过某段时间还没有收到确认帧,就重新发送该数据帧
自动重传请求ARQ:接受方请求发送方重新发送出错的数据帧来恢复出错的帧,传统的自动重传分三种
- 停止等待ARQ
- 后退ARQ
- 选择性重传ARQ
窗口开的够大的时候,帧在线路上可以连续的流动,因此又称连续的ARQ协议
回退N协议
之前协议存在的问题?
过长的往返时间严重影响带宽的利用率
如何提高带宽的利用率?
发送端在收到确认之前,连续发送多帧
回退N协议的过程
- 发送窗口的大小>1,接收窗口的大小=1
- 接收端发现某一帧发生差错时,直接丢弃所有后续的帧,对丢弃帧不发送确认
- 数据链路层除了接收应该递交给网络层的下一帧之外,拒绝接收其它任何帧
- 发送方最终会超时,将按顺序重传所有未被确认的帧,即从最初受损或丢失的那一帧开始
- 接收端接收帧的顺序和发送端发出帧的顺序相同
回退N协议窗口大小的选择
- 用n表示序号字段长度;2^n表示发送端可发送帧的序号个数
- 发送窗口尺寸w应为2^(n-1)
回退n协议的适用情况
- 回退n帧协议,如果错误率较低时,工作的很好
- 但错误率较高时,就会浪费大量的带宽在重传上
选择重传协议
选择重传协议的特点
- 接收方的数据链路层存储坏帧之后的所有正确的帧,当发送方得知某个帧出错时,只是重传此坏帧,而不是所有的后继帧
- 在这个协议中,发送方和接收方都维持一个可接收序列号的窗口
- 接收窗口的大小>1,并为窗口中的每个序列号都提供一个缓冲区,每个缓冲区用一位判断其是否为空
- 当某一帧到达时,接收方检查其序列号,看其是否落在窗口内
- 如果落在窗口内且从未接收过,就接收并存储
- 接收到的此帧保存在数据链路层,而不交给网络层,直到比它序列号小的所有帧都按次序已交给了网络层,此帧才能提交给网络层
选择重传协议的窗口大小
窗口大小应为2n/2=(MAX_SEQ+1)/2
数据链路层协议实例
PPP(Point to Point)协议
点对点协议,提供了在点对点链路上传输多种协议数据包的一种标准方法。
PPP功能
- 处理错误检测链路的配置
- 支持多种协议
- 允许身份认证等
PPP提供了3个主要特征
- 成帧方法。它可以毫无歧义地分割出一帧的结束和下一帧的开始。并且帧格式支持错误检测
- 链路控制协议(LCP)。可用于启动线路、测试线路、协商参数,以及不需要线路时关闭线路
- 协商网络层选项的方法。协商方法与所使用的网络层协议独立。所选择的方法对于每种支持的网络层都有一个不同的网络控制协议(NCP)。支持的网络层协议有IPv4、IPv6、IPX和AppleTalk等
PPP帧格式
若Flag字节出现在Payload字段中,则需要用转义字节0x7D去填充,然后将紧跟在后面的那个字节与0x20进行XOR操作
PPP链路建立到释放的状态转换图
PPP建链路的具体过程
- LCP协商,协商内容包括除RFC1661中所定义的选项之外,还要考虑PPPOA和PPPOE协议中规定的内容
- LCP协商过后就到了Establish阶段,开始PAP或CHAP认证
- PAP为两次握手认证,口令为明文。PAP认证过程如下:发送用户名同口令到认证方,认证方查看是否有此用户,口令是否正确,然后发送相应的响应
- CHAP为三次握手认证,口令为密文(密钥)。CHAP认证由认证方发送一些随机产生的报文,交给被认证,被认证方用自己的口令字用MD5算法进行加密,传回密
文,认证方用自己保存的口令字及随机报文用MD5算法加密,比较二者的密文,根据比较结果返回响应的响应
- 认证成功即进行Network阶段协商(NCP),在IP接入中主要是IPCP协商(如IP地址和DNS地址的协商等)。任何阶段的协商失败都将导致链路的拆除。
- 协商成功,则链路建立成功,可以开始传输网络层数据报文
SONET上的数据包
SONET(同步光网络)
- 物理层协议
- 最常被用在广域网的光纤链路上
- 提供了一个以定义良好速度运行的比特流,如2.4Gbps的OC-48链路
IP包被承载在PPP帧中通过SONET线路传输
ADSL
ADSL使用的协议和设备的概貌
- 在PPPOE应用中,CPE将PC上的以太网帧(携带PPP帧)通过ATM网络桥接到集中路由器(Aggregation Router)上
- 当CPE为ADSL Modem时,PC为PPPOE Client,运行PPPOE模拟拨号软件先将用户数据封装为PPP,再将PPP封装到以太网帧中,PPP中相关的验证信息将会送给集
中路由器进行PAP或CHAP验证 - 通过验证之后,PC会以IPCP协商的形式从集中路由器获得IP地址