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

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

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

序列号和确认

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

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

超时和定时器

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

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

流量控制

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

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

拥塞控制

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

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

选择性重传

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

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

连接管理

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

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

总结

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

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

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

相关推荐
所待.3837 分钟前
深入解析SpringMVC:从入门到精通
前端·spring·mvc
逃逸线LOF32 分钟前
CSS之精灵图(雪碧图)Sprites、字体图标
前端·css
ikkkkkkkl1 小时前
P2P架构
网络协议·计算机网络·p2p
愚昧之山绝望之谷开悟之坡1 小时前
HTTP与HTTPS协议的核心区别
网络协议·http·https
无敌最俊朗@2 小时前
**HTTP/HTTPS基础** - URL结构(协议、域名、端口、路径、参数、锚点) - 请求方法(GET、POST) - 请求头/响应头 - 状态码含义
爬虫·python·网络协议·http·https
海天胜景2 小时前
jqGrid冻结列错行问题,将冻结表格(悬浮表格)与 正常表格进行高度同步
前端
还是鼠鼠2 小时前
JMeter 教程:使用 HTTP 请求的参数列表发送 POST 请求(form 表单格式)
网络协议·jmeter·http
清风细雨_林木木2 小时前
解决 Tailwind CSS 代码冗余问题
前端·css
三天不学习2 小时前
VueUse/Core:提升Vue开发效率的实用工具库
前端·javascript·vue.js·vueuse
余道各努力,千里自同风3 小时前
CSS实现文本自动平衡text-wrap: balance
前端·css