三次握手

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

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

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

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

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

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

相关推荐

06-12 16:56
四川大学 Java
虎鲸是6.5ssob上海投的,6.12约面,西安大麦的前端岗。虾皮是老早投的深圳后端,然后被前端捞的,后端和项目一点没问,麻了问题:1、js获取多个div元素的方法。如果这些div有父子关系,如何进行区分?如何由子获得父?2、react状态管理的几种方式?除了redux还有哪些?3、跨端如何解决?4、选择器的优先级?5、如何进行浏览器性能优化?6、url的结构?7、url从输入到响应页面的过程?8、http2.0与1.0的区别?9、tcp三次握手与四次挥手?10、https加密的过程?11、如何给元素设置水平,垂直居中?12、react的useState如何放在if分支中会有什么问题?13、浏览器如果断网了如何处理,缓存如何实现的?14、defer和async有什么区别?(都没听说过defer)15、promise有哪几种状态?......16、短期规划?题目:1、拆分数字字符串,按照千分位添加逗号。2、提取字符串中括号里的内容。(我给的思路是用栈或队列遍历,面试官说正则表达式可以秒,可是我不怎么会正则)总结:两场面试都是四十分钟左右,问的都是前端比较基础的东西,但我只学了一个多月前端,也没专门看过八股,被拷打麻了。面试官看我都不会,后面就转而问场景题和一些计网之类的基础了。下午面完虾皮后,大麦发邮件中止流程了。感觉今年前端面试的确比后端多,我都被前端捞了三次了
查看16道真题和解析
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

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