三次握手

TCP连接建立使用三次握手的原因有几个方面:

1. **可靠的数据传输**:
   - 通过三次握手可以确保双方都能够正确地接收对方的数据包,从而保证了连接的可靠性。每次握手都是对前面一个步骤的确认。

2. **防止已过期的连接请求报文段突然又传送到了服务端**:
   - 如果只用两次握手,可能出现这样一种情况:客户端发出的第一个连接请求(SYN)由于网络问题延迟到达服务器,而在延迟期间客户端重新发起了新的连接请求并完成了正常的三次握手过程。此时,延迟的旧请求到达服务器,服务器会误以为是一个新的连接请求而接受并发送SYN-ACK回应。这种情况下,如果只使用两次握手,客户端就会错误地认为连接已经建立,但实际上服务器并不知道这是重复的请求。三次握手可以避免这种情况的发生,因为客户端会在第二次握手后等待对方的确认(ACK),如果未收到则不会认为连接已建立。

3. **确定初始序列号**:
   - 在三次握手的过程中,客户端和服务器都会发送自己的初始序列号(ISN)。这些序列号用于标识后续数据传输中的数据片段,确保数据的顺序性和完整性。通过三次握手,双方能够确定彼此的初始序列号,为后续的数据传输做好准备。

4. **同步状态信息**:
   - 在三次握手的过程中,双方还可以同步其他状态信息,如窗口大小等,这对于后续的数据传输非常重要。

综上所述,三次握手机制不仅保证了连接的建立是双方明确同意的结果,而且还确保了连接的可靠性、数据的完整性和有序性。因此,三次握手是TCP连接建立过程中不可或缺的一部分。
全部评论

相关推荐

好久没写牛客了,最近我想分享一下我关于技术上的某些看法,我的目的是满足分享欲和给大家一些不一样的观点。凡事都有两面性,技术方案也是一样,很少有一劳永逸的最优解决方案。我这里的中庸之道就是折中的意思。我喜欢举例子来说明观点。从前端常谈的性能优化入手。前端在打包文件的时候有一个分包的概念。目的是为了让单个资源不这么大,导致加载耗时过长,影响用户体验。如何看某个界面的性能的收益呢,当然就有一些指标,比如秒开率,但是核心还是用户的付费意愿和营收指标之类的。分包太大加载时间长影响用户体验,太小又会导致资源请求次数过多,增加在网络过程中耗时,那就要折中。如果就是要得到一个比较好的阈值呢,怎么做。微调。事实上很多这类问题的方案就是开不同的实验组,比较最终不同的收益。哪个收益大就用哪个。再比如react的性能优化手段。会有usecallback之类的缓存手段。但是很少有人谈这类缓存的性能开销。无论是什么缓存方式,都要增加一个是否要缓存的比较过程和缓存内容本身的开销。所以是否要缓存也应该是一个要折中的方案。我说的这些是觉得很多问题大家最好不要片面的看。不只是技术问题,生活上的很多问题,用这种方式表达自己的看法和观点。很多问题都有一个比较好的解决方案,也让别人觉得你成熟可靠。
现在前端的就业环境真的很...
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务