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

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

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

序列号和确认

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

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

超时和定时器

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

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

流量控制

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

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

拥塞控制

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

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

选择性重传

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

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

连接管理

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

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

总结

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

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

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

相关推荐
MeixianAgent12 小时前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python
yingyima12 小时前
JWT Token 解析与安全实践速查:5 问 5 答直击要害
前端
9i编程12 小时前
SpringBoot 测试环境免发短信验证码方案,节省测试短信成本
后端
Ai拆代码的曹操12 小时前
把线程 Dump 读薄:从 BLOCKED/WAITING/RUNNABLE 到问题定位的完整方法论
后端
雪隐13 小时前
个人电脑玩AI-09让5060 Ti给你打工——让 AI 读懂你的资料
人工智能·后端
kyriewen13 小时前
我用 Codex 重写了同事维护三年的代码,他没说谢谢——而是找了领导
前端·javascript·ai编程
小满zs13 小时前
Go语言第一章(入门)
后端·go
OpenTiny社区14 小时前
从零开发 AI 聊天页要两周?试试这款 Vue3 垂直对话组件库 TinyRobot,直接开箱即用
前端·vue.js·github
用户67570498850214 小时前
Kafka 太重?试试 NSQ:一个优雅到极致的消息队列
后端·go
铁皮饭盒14 小时前
S3已成为文件存储标准,阿里/腾讯/华为云都支持,Bun率先原生支持
前端·javascript·后端