目录
1 流量控制和链路管理
1.1 流量控制介绍
1、什么是流量控制
发送发给接受方发送数据,如果发送方每1秒发送200个包,接收方只能1秒处理100个包。
会出现什么现象呢? 接收方会在缓存中大量缓存接受的包,直到缓存区满了。
满了之后会怎么样? 满了之后就会出现最不能容忍的情况,缓冲区溢出,也就是丢包的现象。
所以接收方一定要在缓冲区快满的时候通知发送方让他降低发送速度,这就是链路层的流量控制。
2、流量控制的功能和方法
流量控制的功能:协调发送端和接收端的数据流量,确保发送的数据不会覆盖接受实体已接收的数据。
常用的流量控制的方法有两种:
- 停止等待(stop-and-wait)
- 滑动窗口(Sliding Window)
1.2 停止等待
停止等待的流量控制机制如下:
- 发送方每发送一个数据帧,就会等待接收方返给一个确认帧(ack),只有当发送方接收到ack之后才会继续发送下一帧,否则继续等待。
- 这种发送和等待交替的过程不断重复,直到发送方发送了一个传输结束(EOF)帧,完成一次数据传输。
停止等待的流量控制的
- 优点:控制简单
- 缺点:效率较低。如果发送方和接收方设备之间的距离较长,则每传输一帧需等待ACK帧所花费的时间将大大增加总传输时间,因此传输速度会很慢
1.3 滑动窗口
滑动窗口机制,发送方可以发送多个帧等待接收方确认,接收方只对其中一些帧进行确认,使用一个ACK帧来对多个数据帧的接收进行确认。
1、滑动窗口
滑动窗口:是发送方和接收方创建的一个额外缓冲区(包括发送方的发送窗口和接收方的接收窗口),窗口可以存储若干数据帧,窗口在数据传输过程中根据控制向前滑动,从而控制数据传输过程,并且发送方在收到接收方的确认之前能够传输的帧数目也进行了限制。
帧以模n方式标识,即帧编号从0 到n-1,如:n=8
滑动窗口大小为n-1,即该窗口大小为 7。滑动窗口大小不能覆盖整个窗口。
发送方:最多发送 n-1 个帧。只要接收方不满就可以继续发送数据
接收方:最多存储 n-1 个帧。可以不等窗口填满对任一数据进行确认。
2、发送方滑动窗口
发送窗口用来对发方进行流量控制,窗口大小指明了在收到对方ACK之前最多可以发送数据帧数,窗口内的帧是可以连续发送的。
发送方滑动窗口机制:发送方传输开始前,发送方窗口有 n-1 个帧。随着数据帧的发送,窗口的左边界向内移动,窗口不断被缩小。例如在接收到最近一次确认帧来已经发送了3 帧,那么窗口中剩余的帧数是n-1-3。一旦收到一个确认帧。窗口右边界根据确认帧确认的数据帧个数对窗口自动进行相同数目的扩展。
注意:发送方将数据帧发送出去时,滑动窗口左边界向左收缩窗口。而当收到确认帧时,发送方滑动窗口右边界向右扩展
3、接收方滑动窗口
接收窗口:可以控制哪些数据帧可以接收,只有到达的数据帧的序号在接收窗口之内的才可以被接收,接收过的数据帧将被丢弃。正常情况下,接收方收到一个有序且无差错的帧后,接收窗口向前滑动,并准备接收下一帧,这时会向发送方发出一个确认。确认已经接收的帧以及下一次要接收的帧。
发送确认的方式有两种:
- 累计确认
- 捎带确认(捎带确认是在双向数据传输情况下,将确认信息放在自己也要发送的数据帧的首字段中捎带过去。)
接收方滑动窗口机制:接收方在传输开始的时候,接收方窗口有n-1个帧空间但不一定包含n-1个帧。接收数据帧后,接收方窗口会不断缩小。它表示发送确认帧前窗口中还可接收的帧的数目(剩余的帧数)。一旦发送完一个确认帧,窗口大小就会按确认的帧数量自动扩展。
注意:接收方接收数据帧后,接收方滑动窗口左边界向左收缩窗口。而当发送确认帧时,接收方滑动窗口右边界向右扩展
4、滑动窗口的流量控制使用
滑动窗口如何实现流量控制的
发送方收到接收收方的确认后,发送窗口右边界向右移动,同时新的帧会到达发送窗口可以被发送,已被确认正确收到的帧移到了窗口的外面。所以接收方的确认作为一个依据,控制发送方发送窗口向前滑动。接收方可以根据自己的接收能力来控制确认帧的发送,从而实现传输流量的控制。
由于滑动窗口中使用了确认机制,因此它也兼有差错控制的功能。
为什么滑动窗口的大小比模数小1
为了避免确认帧中包含的编号出现二义性。
什么意思呢?假设n=8,窗口大小也为8,如果这时发送了0号帧,又收到编号1的确认帧(ACK 1)。发送方就开始扩展窗口,并继续发送1、2、3、4、5、6、7 和0 号帧。当此时发送方又收到ACK 1,它就不知道是因为网络问题而重发的上一次的ACK 1,还是最近发送的八帧的新的ACK 1。因此将窗口大小设定为7(即 n-1)。
滑动窗口控制流量采取的措施
滑动窗口中,控制传输流量主要采取以下措施:
- 1.设置合适的发送窗口大小,一般不超过接收方接收缓冲区的大小。这样发送方发送的数据就不容易淹没接收缓冲区。
- 2.可变滑动窗口。由接收方根据当前接收缓冲区的大小决定发送方发送窗口的大小,并通知发送方改变发送窗口的大小,TCP协议流量控制就使用这种方式。
- 3.接收方根据目前可用接收缓冲区的情况,决定发送确认的时机,使发送流量与接收缓冲区的可用容量匹配。
流量控制使用注意事项
流量控制使用注意:
- 流量控制机制不仅适合于局域网,也适合于城域网和广域网。比如:以太网中帧的传输、TCP协议等也使用这些流量控制机制。
- 流量控制并不只在数据链路层中进行,在传输层也有流量控制,只是控制对象不同。
- 数据链路层中控制的是LAN中两个节点之间,点到点连接的数据传输流量;
- 传输层控制的是WAN中从源端到目的端,传输路径中需要经过许多中间节点的端到端的流量。
1.4 链路管理
数据链路层的链路管理主要包括链路的建立,维持和释放。
- 链路的建立:链路两端的节点通信前,数据发送方首先确认接收方是否已处在准备接受的状态,为此,发送方可能会发送一个询问帧ENQ(enquiry),并与接收方交换一些必要的信息以对帧序号进行初始化,然后才能建立连接。
- 维持:在传输过程中需要要维持之前建立的连接。如果出现差错,需要重新初始化,重新自动建立连接,传输完毕后则会释放连接
- 释放:释放连接时,传输的正确性需要被确认,接收方会发一个确认应答ACK,否则发送一个否定应答NAK。
链路管理功能主要用于面向连接的服务