每日一个计算机小知识:TCP

每日分享一个有趣的计算机小知识,今日话题:TCP

TCP 是 Transmission Control Protocol 的缩写,中文叫传输控制协议,它是一种可靠的、有序的、面向连接的、基于字节流的数据传输通信协议,可以在两台设备之间提供可靠的数据传输,是网页浏览、文件传输、邮件发送、远程登录等场景的基础。

在发送数据前,TCP需要先建立一条稳定的连接,也就是我们常说的三次握手,数据传输完成后,会触发四次挥手断开连接。客户端向服务端发送数据的具体步骤:

步骤 1:三次握手建立连接

通过三次握手和服务器建立连接。

步骤 2:拆分成数据段

客户端将数据交给 TCP 层后,TCP 会根据最大报文段长度,将数据拆分为成多个数据段。

步骤 3:为每个数据段分配序列号

TCP 会为每个数据段的第一个字节分配序列号,后续字节的序列号依次递增(每字节 + 1)。

步骤 4:发送数据段

TCP 并非一个数据段发送完了再发下一个,而是通过一个叫做滑动窗口的机制批量发送数据,以此来提升传输效率。

步骤 5:接收方验证数据段

服务器收到数据后,需要校验数据段的完整性、记录已接收的数据。

步骤 6:接收方返回确认报文

服务器定期会向客户端发送确认报文,报文里的确认号会告知已接收到的数据。

步骤 7:发送方处理确认信息

客户端收到确认报文后,根据确认号判断所有数据是否被正确接收,如果已丢失的数据会立即重新发送。

步骤 8:接收方重组数据

当所有数据段都全部接收完整后,TCP 会将其重组为原始数据,交给服务器处理,当服务器处理完数据后,会通过当前连接返回给客户端响应数据。

步骤 9:四次挥手断开连接

当数据全部传输完成后,会触发四次挥手断开 TCP 连接。
很多人可能一直不理解为什么是3次握手和4次挥手,1次、2次为什么不行?

要搞明白这个问题,就要先搞明白TCP的作用。TCP是全双工的、可靠的、双向通道协议,双方在连接建立后可同时收发数据,而三次握手的核心目的,正是通过3次握手来互相确认双方的收、发能力都是正常的,而4次挥手也正是需要确认双方都没有数据要发送了才能断开连接释放资源。

相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
大勇前进4 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu4 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile4 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go
大白804 天前
PHP 内存溢出排查思路:看懂报错日志,精准定位问题
后端
二月龙4 天前
PHP 接口返回统一响应封装,让前后端对接更省心
后端
盖伦发发4 天前
软件工程SOLID 五大设计原则
后端·软件工程