设计师如何注册个人网站,h5技术做网站,甘肃省建设局官方网站,东莞精准网络营销推广参考资料 #xff1a;小林Coding、阿秀、代码随想录
一、TCP拥塞控制⭐
1. 慢启动 – Slow Start 慢启动是指TCP连接刚建立#xff0c;一点一点地提速#xff0c;试探一下网络的承受能力#xff0c;以免直接扰乱了网络通道的秩序。
慢启动算法#xff1a; 初始拥塞窗口…参考资料 小林Coding、阿秀、代码随想录
一、TCP拥塞控制⭐
1. 慢启动 – Slow Start 慢启动是指TCP连接刚建立一点一点地提速试探一下网络的承受能力以免直接扰乱了网络通道的秩序。
慢启动算法 初始拥塞窗口 cwnd 1表明可以传一个MSS大小的数据。每当发送方收到一个ACKcwnd大小加一。每当过了一个往返延迟时间RTT(Round-Trip Time)cwnd大小直接翻倍乘以2呈指数让升。慢启动拥有一个ssthreshslow start threshold门限当 cwnd ssthresh 时就会进入拥塞避免算法 2. 拥塞避免 – Congestion Avoidance 当拥塞窗口大小cwnd大于等于慢启动阈值ssthresh后就进入拥塞避免算法。算法如下
收到一个ACK则 cwnd cwnd 1 / cwnd每当过了一个往返延迟时间 RTTcwnd 大小加一 过了慢启动阈值后拥塞避免算法可以避免窗口增长过快导致窗口拥塞而是缓慢的增加调整到网络的最佳值。
举个 “拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长使网络比较不容易出现拥塞。
3. 拥塞发生 TCP拥塞控制默认认为网络丢包是由于网络拥塞导致的所以一般的TCP拥塞控制算法以丢包为网络进入拥塞状态的信号。对于丢包有两种判定方式一种是超时重传RTORetransmission Timeout另一个是快速重传收到三个重复确认ACK。重传机制具体介绍见第三部分
1超时重传RTO 超时重传是TCP协议保证数据可靠性的一个重要机制其原理是在发送一个数据以后就开启一个计时器在一定时间内如果没有得到发送数据报的ACK报文那么就重新发送数据直到发送成功为止。
由于发生丢包将慢启动阈值ssthresh设置为当前拥塞窗口cwnd的一半即 ssthresh cwnd / 2cwnd重置为1 恢复为 cwnd 初始化值进入慢启动过程
2快速重传 如果发送端接收到3个以上的重复ACKTCP就意识到数据发生丢失需要重传。这个机制不需要等到重传定时器超时所以叫快速重传。
cwnd大小缩小为当前的一半ssthresh设置为缩小后的cwnd大小然后进入快速恢复算法Fast Recovery。 4. 快速恢复 —— Fast Recovery TCP Tahoe是早期的算法所以没有快速恢复算法而Reno算法有。在进入快速恢复之前cwnd 和 ssthresh 已经被更改为原有 cwnd 的一半。快速恢复算法的逻辑如下 拥塞窗口 cwnd cwnd 3 MSS加 3 MSS的原因是因为收到3个重复的ACK。 重传丢失的数据包。 如果再收到重复的ACK那么cwnd大小增加一。 如果收到新的ACK表明重传的包成功了那么退出快速恢复算法。将cwnd设置为ssthresh然后进入拥塞避免算法。
二、TCP可靠传输 TCP协议保证数据传输可靠性的方法主要有校验和、序列号、确认应答、超时重传、连接管理、流量控制、拥塞控制。
1. 数据校验TCP报文头有校验和采用CRC校验全部数据
2. 序列号和确认应答TCP通过给每个发送的数据段分配一个序号以及使用确认机制ACK来跟踪数据的传输与接收。接收方会确认已经成功接收的数据发送方则根据收到的确认确定哪些数据已经被成功传输哪些需要重新发送。
3. 超时和重传TCP使用超时机制来检测是否发生数据包丢失如果发送方在一定时间内未收到确认就认为数据包丢失并触发响应的重传。这确保及时某个数据包在传输过程中丢失最终仍能够被成功传递。
4. 连接管理通信前确认通信实体的存在。具体见【面试八股总结】传输控制协议TCP一-CSDN博客
5. 流量控制TCP使用滑动窗口机制进行流量控制确保发送方不会以高于接收方处理速度的速率发送数据这有助于防止接收方缓冲溢出提高整个通信链路效率防止数据包丢失。具体见【面试八股总结】传输控制协议TCP二-CSDN博客
6. 拥塞控制TCP还具有拥塞控制机制通过动态调整发送速率以适应网络状况。当网络出现拥塞时通过拥塞窗口减缓发送速率防止进一步加剧拥塞。具体见第一部分
三、TCP重传机制
1. 超时重传 TCP在发送数据时会设定一个定时器当超过指定的时间后没有收到对方的 ACK 确认应答报文就会重发该数据也就是超时重传。TCP 会在以下两种情况发生超时重传
数据包丢失确认应答丢失
超时重传时间RTORetransmission Timeout 当超时时间 RTO 较大时网络的空闲时间增大降低了传输效率。当超时时间 RTO 较小时会引起很多报文段的不必要的重传使网络负荷增大。 TCP 采用了一种自适应算法它记录一个报文段发出的时间以及收到相应的确认的时间。这两个时间之差就是报文段的往返时延RTTRound-Trip Time。 TCP保留RTT的一个加权平均往返时间RTTS又称为平滑的往返时间。
第一次测量到 RTT 样本时RTTS 值就取为所测量到的 RTT 样本值。以后每测量到一个新的 RTT 样本就按下式重新计算一次 RTTS
新的RTTs (1 - α) × (旧的 RTTs) α ×(新的 RTT 样本)
式中0 α 1。若 α 很接近于零表示 RTT 值更新较慢。若选择α接近于 1则表示 RTT 值更新较快。
2. 快速重传 快速重传Fast Retransmit机制不以时间为驱动而是以数据驱动重传。 快速重传的工作方式是当收到三个相同的 ACK 报文时会在定时器过期之前重传丢失的报文段。 3. SACK 选择确认 如果要使用选择确认建立 TCP 连接时就要在 TCP 首部的选项中加上“允许 SACK”的选项而双方必须都事先商定好。在 TCP 报文段的首部中增加 SACK 选项以便报告收到的不连续的字节块的边界。由于首部选项的长度最多只有 40 字节而指明一个边界就要用掉 4 字节因此在选项中最多只能指明 4 个字节块的边界信息。 4. Duplicate SACK Duplicate SACK 又称 D-SACK其主要使用了 SACK 来告诉发送方有哪些数据被重复接收。 使用D-SACK的优点 可以让「发送方」知道是发出去的包丢了还是接收方回应的 ACK 包丢了;可以知道是不是「发送方」的数据包被网络延迟了;可以知道网络中是不是把「发送方」的数据包给复制了。