tcp协议-流量控制

tcp协议-流量控制

前言

原因:数据传输总是尽可能要求的快。但如果发送方把数据发得过快,接收方就可能来不及接收,这就会造成数据的丢失。流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。
实现方向:TCP的流量控制通过滑动窗口机制来实现,数据接收端可根据自己的资源情况,随时动态地调整对方的传输窗口大小。
滑动窗口概念不仅存在于数据链路层,也存在于传输层,两者有不同的协议,但基本原理是相近的。其中一个重要区别是,一个是针对于帧的传送,另一个是字节数据的传送(TCP是面向字节的)。
TCP是面向字节流的,发送的数据块视为一连串无结构的字节流,每次发送提取一部分字节构建一个TCP报文段,即TCP不保证接收方收到的数据块与发送方的数据库大小相同。这是TCP实现可靠传输、流量控制、拥塞控制的基础。

过程

假设A要向B发送数据,主机建立TCP连接时,B告诉A接收窗口rwnd 的大小。
假设A发送的每个TCP报文段可携带100个字节数据,每个小格子是100个字节数据。
A向B将窗口内的数据封装成报文段发送(在发送数据后,便立刻创建一个该报文段的重传计时器),凡是没有收到确认的数据都会保留在发送缓存,以便在超时重传时使用。
B会对接收到的报文段进行累计确认,返回确认报文段,确认位ACK=1(在建立连接后ACK都为1),ack=201(确认号为接收方期待发送方发送的下一个报文数据的第一个字节的序号), B根据缓存大小返回 rwnd接收窗口大小,假设返回值为300。
A收到B发送的确认报文段:
A会将窗口调整为300;
并删除缓存中已经被确认的数据报 ;
则撤销已被确认的报文的重传计时器;

假设A发送的数据报中途丢失,该报文段的重传计时器超时后,则A重发报文段,直到B返回确认报文段。

TCP发送方的发送窗口 = min{ 自身拥塞窗口,TCP接收方的接收窗口 }

死锁:

当B向A发送了0窗口报文,B此时已经没有空间接受A发送的数据了,通知A停止发送。A在收到后即停止发送,等待一段时间后,B有了一些空间,可以继续接收了,此时再向A发送非0窗口报文。
如果此非0窗口报文在网络中丢失,那么A将一直等待非零窗口的通告,B也一直在等待A发来的数据,这样就会造成死锁。
解决:
假设A收到B发送的零窗口通知,A就会启动持续计时器。
若持续计时器超时,A会发送零窗口探测报文。
B收到后将当前窗口大小值返回给A。
如果窗口仍是0,重启持续计时器,超时后再发送探测报文段。
假设rwnd不为0,则A改变发送窗口大小,开始发送报文段。

补充

零窗口探测报文段也有重传计时器,若零窗口探测报文段丢失,当重传计时器超时,零窗口探测报文段会重传

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,其设计中包含了两个重要的机制来保证数据在网络中的稳定传输:流量控制和拥塞控制。 **流量控制**: 流量控制是为了防止接收端因处理速度较慢而积压过多的数据包导致缓冲区溢出。TCP通过滑动窗口机制来实现流量控制,发送方向接收方发送数据之前,会先等待接收方确认已收到足够的数据。发送方的窗口大小限制了未被确认的数据量,只有当接收到接收方的确认之后才会增加窗口大小继续发送。 **拥塞控制**: 拥塞控制是指网络中过多的数据而导致网络拥塞时,对数据包的发送速率进行调节的过程。TCP使用了一种自适应算法——慢开始、拥塞避免和快速恢复,以及快速重传机制来应对拥塞。 - **慢开始**:刚建立连接时,发送者会较小的拥塞窗口值开始发送数据,随着接收者的ACK到来,窗口逐渐扩大。 - **拥塞避免**:当接收到三个重复的ACK时,认为网络可能出现了拥塞,然后进入拥塞避免阶段,每次只增大窗口一小步。 - **快速重传/快速恢复**:当接收者检测到丢包,它立即发送第一个重复ACK,而不是等待定时器超时。这允许发送者更快地识别到丢失的段,并启动快速恢复过程。 这两个机制共同作用,保证了TCP网络环境中的稳定性和高效传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值