TCP 如何保证传输的可靠性?

可靠性保障
  • 数据分块,序列号,ACK:TCP 把数据分成合适的数据块传输;每一个数据包都有唯一的序列号,根据序列号来排序保证顺序性,同时进行数据包的去重,ACK 保证数据接收。
  • 校验和:对首部和数据进行校验和,防止数据被纂改。
  • 超时重传机制:在数据包丢失或延迟的情况下,重新发送数据包,直到收到对方的确认应答(ACK)。TCP 重传机制主要有:基于计时器的重传(也就是超时重传)、快速重传(基于接收端的反馈信息来引发重传)、SACK(在快速重传的基础上,返回最近收到的报文段的序列号范围,这样客户端就知道,哪些数据包已经到达服务器了)、D-SACK(重复 SACK,在 SACK 的基础上,额外携带信息,告知发送方有哪些数据包自己重复接收了)。
  • 流量控制:通过维护发送窗口和接收窗口来维持发送方与接收方的平衡。接收方会返回当前可用大小,发送方根据这个调整自己的发送窗口,避免数据过载。是端到端的控制。
  • 拥塞控制:维护一个拥塞窗口,发送窗口取接收窗口大小和拥塞窗口大小的较小值。拥塞窗口的控制算法有慢启动、拥塞避免、快速重传和恢复,通过这些算法动态调整拥塞窗口的大小。
超时重传

发送方在一定时间内没有收到 ACK,就会重新发送。重传时间(RTO)由网络往返时间(RTT)动态计算得出,避免太快或太慢。

重传机制:

  • 定时器重传;
  • 快速重传:会返回需要重传的数据包的序列号,但是无法知道需要重传哪些;
  • SACK:在快速重传的基础上额外返回了已经接收到的序列号的区间(字段:Left Edge,Right Edge);
  • D-SACK:在 SACK 的基础上,额外告知了有哪些重复的数据包。
流量控制

通过维护发送窗口和接收窗口,来平衡二者。接收方会告知发送方剩余可用大小,发送方据此来控制发送速度,从而达到流量控制的效果。

拥塞控制

维护一个拥塞窗口,发送窗口取接收窗口大小和拥塞窗口大小的较小值。根据网络拥塞状态动态调整拥塞窗口大小,当网络出现丢包或延迟时,减慢数据发送速度。

相关推荐
北辰当尹7 分钟前
【实习之旅】Kali虚拟机桥接模式ping通百度
java·服务器·桥接模式
qq_256247059 分钟前
除了“温度”,如何用 Penalty (惩罚) 治好 AI 的“复读机”毛病?
后端
阿巴~阿巴~11 分钟前
从不可靠到100%可靠:TCP与网络设计的工程智慧全景解析
运维·服务器·网络·网络协议·tcp/ip·智能路由器
飞翔的小->子>弹->13 分钟前
CMK、CEK
服务器·数据库·oracle
内存不泄露20 分钟前
基于Spring Boot和Vue 3的智能心理健康咨询平台设计与实现
vue.js·spring boot·后端
持续升级打怪中20 分钟前
WebSocket:从“写信”到“打电话”的实时通信革命
网络·websocket·网络协议
qq_124987075321 分钟前
基于Spring Boot的电影票网上购票系统的设计与实现(源码+论文+部署+安装)
java·大数据·spring boot·后端·spring·毕业设计·计算机毕业设计
learning-striving21 分钟前
eNSP中OSPF协议多区域的配置实验
网络·智能路由器·ensp·通信
三两肉23 分钟前
深入理解 HTTPS RSA 握手:从原理到流程的完整解析
网络协议·http·https·rsa·tls四次握手
麦兜*25 分钟前
【Spring Boot】 接口性能优化“十板斧”:从数据库连接到 JVM 调优的全链路提升
java·大数据·数据库·spring boot·后端·spring cloud·性能优化