每日一个计算机小知识: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次挥手也正是需要确认双方都没有数据要发送了才能断开连接释放资源。

相关推荐
autism_cx3 小时前
TCP/IP协议栈
服务器·网络·笔记·网络协议·tcp/ip·ios·osi
coderhuo4 小时前
libuv spin空转导致的cpu消耗问题
后端
绝无仅有4 小时前
用友面试题解析:项目介绍、Dubbo、MQ、分布式事务、分布式锁等
后端·面试·github
绝无仅有5 小时前
京东面试题解析:SSO、Token与Redis交互、Dubbo负载均衡等
后端·面试·github
懒惰蜗牛5 小时前
Day44 | J.U.C中的LockSupport详解
java·开发语言·后端·java-ee
Mintopia5 小时前
🧠 Next.js 还是 Nuxt.js?——当 JavaScript 碰上命运的分叉路
前端·后端·全栈
nexttake6 小时前
5.go-zero集成gorm 和 go-redis
开发语言·后端·golang
Victor3566 小时前
Redis(84)如何解决Redis的缓存击穿问题?
后端
Victor3566 小时前
Redis(85)Redis缓存与Memcached缓存有何区别?
后端