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

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

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

序列号和确认

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

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

超时和定时器

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

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

流量控制

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

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

拥塞控制

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

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

选择性重传

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

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

连接管理

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

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

总结

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

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

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

相关推荐
架构技术专栏8 小时前
Agent 工具调用:从工具声明到执行反馈
前端·人工智能·后端
TechWayfarer8 小时前
精度极限的突破:AI与IPv6如何重塑高精度IP查询
人工智能·网络协议·tcp/ip·transformer
别动我齐刘海8 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
码事漫谈8 小时前
你让AI干的活,它可能只干了十分之一——而你根本看不出来
后端
Wx-bishekaifayuan8 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
志尊宝9 小时前
Vue3 零基础每日笔记(071):暗黑模式与主题切换——CSS 变量 + Element Plus 暗黑方案
前端·css·笔记·vue·html·前端开发·软件开发
Wx-bishekaifayuan9 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe9 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
刘发财10 小时前
前端如何生成10000页PDF文件?
前端·javascript·开源
WeiXin_DZbishe10 小时前
基于Springboot+AI的kuall音乐广场的设计与实现-计算机毕设 附源码【课程设计】12715
vue.js·人工智能·spring boot·后端·python·php·课程设计