面试官:TCP是如何保证可靠传输的🙉🙉🙉

TCP 是一种面向连接的传输协议,它在网络通信中提供了可靠的数据传输。TCP 通过一系列机制来确保数据的可靠性和顺序性,以确保数据在发送和接收之间的正确传输。

以下是 TCP 保证可靠传输的主要机制:

序列号和确认

每个 TCP 段都有一个 32 位的序列号。这个序列号会在数据段中进行编码,接收方使用这些序列号来确保数据的正确顺序。如果数据包乱序到达,接收方会将它们重新排序。

确认号是期望接收到的下一个字节的序列号。接收方会在确认中发送这个确认号,告诉发送方它期望接收到哪个序列号的数据。

超时和定时器

发送方启动定时器,在数据发送后计时。如果在超时时间内未收到确认,发送方会认为数据可能丢失,会触发重传。

超时时间通常根据过去的往返时间(RTT)和拥塞情况动态调整。较长的 RTT 或拥塞可能导致较长的超时时间。

流量控制

接收方会在 TCP 头部的窗口字段中指定自己的可用缓冲区大小。发送方会根据这个窗口大小来控制发送速率,确保不会发送太多数据导致接收方缓冲区溢出。

这个窗口大小可以动态地调整,以适应接收方的缓冲区状态和网络拥塞情况。

拥塞控制

拥塞控制是 TCP 保持网络稳定的关键机制。发送方根据网络拥塞的程度来调整发送速率,避免过多的数据拥塞网络。

TCP 使用慢启动、拥塞避免和快速恢复等算法来调整发送速率和拥塞窗口大小,以平衡网络负载和性能。

选择性重传

如果接收方发现缺失的数据段,它可以向发送方请求重传。发送方会重新发送丢失的数据段,而不是整个数据流。

接收方使用累积确认,表明它已经收到了截至到哪个序列号的数据,发送方会据此判断需要重传哪些数据段。

连接管理

连接的建立使用三次握手,其中包括发送方和接收方之间的序列号初始化和对彼此的确认。

连接的关闭使用四次挥手,包括双方交换 FIN(结束)标志,确认关闭请求,并最终关闭连接。

总结

通过这些机制,TCP 能够在不可靠的 IP 网络上提供可靠的数据传输。它适用于需要确保数据准确性和顺序性的应用,如文件传输、电子邮件和网页浏览。然而,由于 TCP 的一些机制(如确认和重传)可能引入一定的延迟,对于某些实时性要求较高的应用,如实时音视频传输,可能会选择使用 UDP 等其他协议。

最后分享两个我的两个开源项目,它们分别是:

这两个项目都会一直维护的,如果你也喜欢,欢迎 star 🥰🥰🥰

相关推荐
fengxinzi_zack6 小时前
年统计与最长连续天数:数据聚合可视化
后端
全堆鸿蒙6 小时前
aboutToAppear 生命周期:路由参数获取与数据初始化
后端
Tsuki_tl6 小时前
UDP传输协议
网络·网络协议·udp·传输层·udp校验和·tcp与udp区别·面向数据报
2501_931803756 小时前
Go 反射:原理、核心机制与实践指南
开发语言·后端·golang
小则又沐风a6 小时前
库的原理:目标文件,ELF格式,程序加载
java·linux·前端
程序员爱钓鱼7 小时前
Rust if let 与 while let 详解:简化模式匹配
前端·后端·rust
爸爸6197 小时前
UIAbility 生命周期在日记 App 中的实践
后端·华为·harmonyos·鸿蒙系统
胡萝卜术7 小时前
从暴力到滑动窗口的终极形态:力扣3「无重复字符的最长子串」的优化进化之路
前端·javascript·面试
钛态15 小时前
前端安全防线:CSRF 攻击链路与双重 Token 校验的工程实现
前端·vue·react·web
大阳光男孩16 小时前
Spring Boot 整合 Debezium 实现 MySQL 增量数据监听(嵌入式版)
spring boot·后端·mysql