网站自动采集rss,深圳商城网站设计推荐,电商网站 外包,旅游网站这么做上一篇内容可能比较多#xff0c;显得比较杂乱#xff0c;这一篇简单总结一下TCP是靠什么实现可靠传输的吧。
校验和
TCP是端到端的传输#xff0c;由发送方计算校验和#xff0c;接收方进行验证#xff0c;目的是为了验证TCP首部和数据在发送过程中没有任何改动#x…上一篇内容可能比较多显得比较杂乱这一篇简单总结一下TCP是靠什么实现可靠传输的吧。
校验和
TCP是端到端的传输由发送方计算校验和接收方进行验证目的是为了验证TCP首部和数据在发送过程中没有任何改动一旦发现校验和有差错直接丢弃TCP段并重新发送。
序列号/确认应答
TCP传输时发送方对每一个发送的消息都会编号也就是序列号seq。接收方在每次接收到消息后回复确认应答号ACK不仅告诉接收到哪些数据还包括下一次消息从哪里发送。只要发送方没有接收到确认应答号ACK都会重新发送数据。
超时重传
发送方发送完数据后会等待一定的时间如果在这个时间内没有接收到ACK就会重传数据。如果是发送方发生了丢包那么接收方在接收到数据后会回复ACK如果是接收方回复的ACK丢失了导致的重传那么根据校验和和序列号知道该数据已经接收丢弃该数据并发送ACK。
连接管理
三次握手和四次挥手。
流量控制滑动窗口控制
发送方发送数据的快慢取决于接收方接收能力。TCP的报文信息中有一个16位字段来标识滑动窗口窗口大小就是接收方剩余缓冲区大小在回复ACK时接收方将自己剩余缓冲区大小填入。发送方根据窗口大小来调整自己的发送速度如果缓冲区大小为0那么发送方会停止发送数据。并且发送方定期会发送探测报文来获取缓冲区大小。
快速重传
当接收端收到比期望号大的seq时候就会发送冗余ACK在超时重传之前如果收到三个相同的冗余ACK那么就知道哪段报文发生了丢包重传该段报文即可避免了超时重传。
拥塞控制
网络可能刚开始很拥塞如果在网络传输过程中开始就发送大量数据的话会发生丢包和超时重传所以需要慢启动算法、拥塞避免算法、快速重传和快速恢复。
慢启动算法
一开始不发送大量数据而是应该先发一小部分探测数据然后由小到大逐渐增大发送窗口。通常在刚刚开始发送报文段时先把拥塞窗口 cwnd 设置为1每次接收到报文之后将窗口大小翻倍。如果指数增长到避免拥塞算法的门限ssthresh则改用避免拥塞算法。
初始化设置 cwnd 1并开始传输数据收到回馈的 ACK会将 cwnd 加 1当发送端一个 RTT 后且未发现有丢包重传就会将 cwnd cwnd * 2当 cwnd ssthresh 或发生丢包重传时慢启动结束进入拥塞避免状态
避免拥塞算法
每当收到一个 ACK 时cwnd 增加 1/cwnd变为线性增长。一但发现丢包和超时重传就进入拥塞处理状态。
拥塞发生
当网络出现拥塞也就是会发生数据包重传重传机制主要有两种超时重传和快速重传。
ssthresh 和 cwnd 的值会发生变化
ssthresh 设为 cwnd/2cwnd 重置为 1
发送三次前一个包的 ACK于是发送端就会快速地重传不必等待超时再重传。TCP 认为这种情况不严重因为大部分没丢只丢了一小部分则 ssthresh 和 cwnd 变化如下
cwnd cwnd/2 也就是设置为原来的一半ssthresh cwnd进入快速恢复算法
快速恢复
拥塞窗口 cwnd ssthresh 3 3 的意思是确认有 3 个数据包被收到了重传丢失的数据包如果再收到重复的 ACK那么 cwnd 增加 1如果收到新数据的 ACK 后把 cwnd 设置为第一步中的 ssthresh 的值原因是该 ACK 确认了新的数据说明从 duplicated ACK 时的数据都已收到该恢复过程已经结束可以回到恢复之前的状态了也即再次进入拥塞避免状态
具体详细内容请见https://blog.csdn.net/qq_45444343/article/details/145670595?spm1001.2014.3001.5501