TCP滑动窗口

滑动窗口(多线程)
1.窗口大小指的是无需等待确认应答而可以继续发送数据的大值. 
上图的窗口大小就是4000个字节(四个 段).  窗口大小可以变,可以动态调整
2.发送前四个段的时候, 不需要等待任何ACK, 直接发送; 
3.收到第一个ACK后, 滑动窗口向后移动, 继续发送第五个段的数据; 依次类推; 
4.操作系统内核为了维护这个滑动窗口, 需要开辟 发送缓冲区 
来记录当前还有哪些数据没有应答; 只有确认 应答过的数据, 才能从缓冲区删掉; 
5.窗口越大, 则网络的吞吐率就越高;

A给B发,如果B 来不及接收数据,这时,A通过B端通知的接受窗口而减缓数据的发送

发送了4个,只收到了第一个的确认应答,窗口会左滑,下次只确认应答第二个,会卡在这里

1.ACK丢了
第一个ACK丢失了不影响第二个ACK
发送下一个是5001 代表之前的数据都接受到,前面的ACK丢失了没关系,后面会继续发,
不会影响后续发送

2.数据包丢失
 "高速重发控制"(也叫 "快重传)
发送时数据包丢失  一直发,确认应答一直显示下一个是1001 说明1001到2000丢了,补上之后,
之前发送的数据都被保存在接受缓冲区 直接变成7001开始正常
(还有一个发送缓冲区,如果数据包丢失了,会再次发送)

窗口是由客观原因决定的,而不是由数据丢失决定的,
不能扩大窗口的情况下(除去如果网络等其他客观原因是窗口扩大的原因),
他会在这里一直等待,即使后四个数据包已完成发送,
等待一个第一个发送应答后,才会滑动

确认应答机制
每一个ACK都带有对应的确认序列号, 意思是告诉发送者, 我已经收到了哪些数据; 比如是下一次是5001
说明前5000个数据都已经被接受了
下一次你从哪里开始发. 

发送数据进行通信的时候
确认一次就行 A发给B数据,B给A发一个确认,A不用再给B发一个确认了
为啥不用
因为有一个发送缓冲区的,只有对方确认应答之后,数据才从发送缓冲区里删掉,
把数据发给对端,对端必须确认收到数据,伴随来自对端的ACK不断到达,本段才从发送缓冲区中
丢弃已确认的数据,TCP必须要为已发送的数据保留一个副本,直到他被对端确认
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值