TCP为啥需要"三次握手"与"四次挥手"?
简单说,就是为了同步字节流的起始序号与结束序号。

TCP被描述为一种面向连接的、可靠的、基于字节流的传输层通信协议。
为了兑现承诺,TCP会为当前字节流中的每个字节编号。这样,在确认了起始序号与结束序号后就能方便地实现整个字节流的有序性与完整性。
为啥要同步结束序号可能还好理解,因为要传输的数据或者说文件大小是不定的,所以字节流的结束序号自然也就不确定,进而需要同步。
可为啥起始序号也要同步,就不能直接固定从0或者1开始计数吗?
答案是不能。因为如果起始序号固定了就无法实现“并发”。
以浏览器这个软件举例,作为常见的web通信客户端,它一般允许最多进行6个左右的“并行连接”。
假设用户A要访问网站B,且把6个并行连接拉满了。6个连接对应6个字节流,6个字节流的目标IP、源IP、目的端口和源端口显然都是相同的。
这时,如果每个字节流的起始字节的编号也相同,6个字节流并行向接收端发送数据,接收端要如何确认哪个字节属于哪个连接呢?
所以起始编号就不能相同,而且不光不能相同,还要非常大。不光要保证每条连接的起始序号不相同,还要防范后续字节序号的冲突。
具体措施就是,TCP报文的序号和确认序号都被设计得非常大,其占据32比特,可以表示的最大数是4294967296,约等于43亿。

这时回到浏览器并发那个场景,6个连接的起始编号同时且随机生成的话,“撞车”的可能性就只有“43亿分之6”,这概率比在体彩中头奖的概率还低2个数量级。
版权保护: 本文由 绿茶加糖-郭保升 原创,转载请保留链接: https://www.guobaosheng.com/tuijian/2025/0711/369.html
- 上一篇:RSA的分段加密与解密
- 下一篇:org域名为什么禁止备案
