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

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

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

重传机制:

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

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

拥塞控制

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

相关推荐
szxinmai主板定制专家5 分钟前
电力设备RK3568/RK3576+FPGA,多系统混合部署Linux+RTOS RT-THREAD,强实时性
linux·运维·服务器·人工智能·嵌入式硬件·fpga开发
枕星而眠14 分钟前
Linux 四大进程/线程同步锁详解:互斥锁、读写锁、条件变量、文件锁
linux·c语言·后端·ubuntu·学习方法
IT_陈寒19 分钟前
Vite动态导入把我坑惨了,原来要这样用才对
前端·人工智能·后端
L、2181 小时前
CANN调优工具链全景:从profiler到tensorboard的完整观测体系
linux·运维·服务器·深度学习
xiaoshuaishuai81 小时前
C# 签名异常与Gas预估失败调试方案
开发语言·网络·tcp/ip·c#
其实防守也摸鱼1 小时前
软件安全与漏洞--软件安全编码
java·前端·网络·安全·网络安全·web·工具
j_xxx404_1 小时前
Linux进程信号捕捉与操作系统运行本质深度解析
linux·运维·服务器·开发语言·c++·人工智能·ai
eggrall1 小时前
Linux信号——保存信号
linux·运维·服务器
XiaoLin laile1 小时前
数据自主可控时代,企业私有化通讯部署价值解析
网络
学习3人组1 小时前
思科Packet Tracer 7.4 生成树协议(STP)配置与安全防护上机讲义
网络·安全·php