TCP 协议如何保证可靠传输

这个讲的相对简单一点:

TCP 协议如何保证可靠传输 - 云+社区 - 腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1679937这个讲的更详细:
TCP 协议如何保证可靠传输 - 云+社区 - 腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1679937

总结一下:

滑动窗口:

  • 为什么要用滑动窗口?发送端希望在收到确认前,继续发送其它报文段,提高信道的利用率;发出去后可能要重传,窗口可以作为缓冲区维护这些报文。
  • 接收窗口大小:取决于应用(比如说tomcat:8080端口的监听进程)、系统、硬件的限制。
  • 发送窗口大小:swnd <= min(rwnd,cwnd),rwnd是接收窗口,cwnd用于拥塞控制。

累计确认:

  • 什么是累计确认?发送方收到某号确认帧(ack),就认定前面的帧全部接收到,发送窗口移动到确认帧(ack)的位置。

比如发送方发了包1,包2,包3,包1含字节1到10,包2含字节11到20,包3含字节21到30。接受方成功收到包1,包3。那么接受方发回一个包含确认序号11的包,发送方就知道包1成功收到,必要时重发从字节11开始,此时包3存在被重复接收的可能

  • 什么时候重传?每个报文都有超时计数器,超时重传,超时重传时间的选择也是一个策略。
  • tcp缓存和窗口的关系:窗口是缓存的一部分。
  • 发送缓存=发送窗口+ 窗口右端的一部分
  • 接收缓存=接收窗口+部分已确认但主机还没处理完的数据

流量控制:

简单来说就是接收方处理不过来的时候,就把窗口缩小,并把窗口值告诉发送端。

当窗口值为0,而接受方把窗口值恢复(比如ACK=1,ack=601,rwnd=200),但确认丢失,进入相互等待的死锁局面。所以如果窗口值为0,发送端就会开启一个持续计数器,每个一段时间询问一下接收方

拥塞控制:

swnd<=min(rwnd,cwnd),cwnd就是拥塞窗口大小,SSthresh:处理拥塞时的一个阈值。

控制步骤:

1)当cwnd < SSthresh,cwnd从1开始以指数增长;

2)当cwnd > SSthresh,cwnd以线性增长;

3)当cwnd增长到出现网络拥堵,SSthresh变为当前cwnd的一半;

4)慢恢复:cwnd变为1,重新从1)开始;

5)快恢复:是对慢恢复算法是改进,cwnd不是从1重新开始指数增长,而是从新的SSthresh开始线性增长。

快重传:收到3个同样的确认就立刻重传,不等到超时;接收方收到同样的确认信号,表示接收方可能未按序收到数据,确认帧必须是按序收到数据的最大序号

TCP标志位:

深度好文:TCP三次握手和四次挥手深入实践https://baijiahao.baidu.com/s?id=1708621911214426696&wfr=spider&for=pc

以三次握手为例:

ACK:表示前面的确认号字段是否有效。ACK=1时表示有效。只有当 ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为 1

确认号ack:理解起来就一句话,所期望收到的下一个顺序号seq。

顺序号seq:用来标识从TCP源端向TCP目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。

ack是本机发出的确认号,确认源发出的seq,seq是本机发出的数据序列号。

流量控制时的报文标志位:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cyc头发还挺多的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值