说说TCP 3次握手的过程?为什么要3次?4次不行吗?
1. 客户端向服务器发送SYN报文,表示请求建立连接。
2. 服务器收到SYN报文后,向客户端发送SYN+ACK报文,表示同意建立连接。
3. 客户端收到SYN+ACK报文后,向服务器发送ACK报文,表示确认建立连接。
三次握手的理由是为了确保双方都能收到对方的信息,并且建立一条可靠的连接。在第一次握手时,客户端发送SYN报文并等待服务器的确认;在第二次握手时,服务器接收到SYN报文后,向客户端发送SYN+ACK报文,表示同意建立连接,并等待客户端的确认;在第三次握手时,客户端接收到SYN+ACK报文后,向服务器发送ACK报文,表示确认建立连接。这样就确保了双方都能收到对方的信息以及建立可靠的连接。
四次握手的方法理论上也可以建立连接,但由于TCP频繁断开连接会增加网络负担,所以采用三次握手的方法更为合理。四次握手是在三次握手的基础上进行的关闭连接操作,因此与建立连接的三次握手的目的和意义是不同的。
-
上一篇
说说TCP 3次握手的过程?为什么要3次?4次不行吗?
<p class="ql-align-justify">建立连接前server端需要监听端口,所以初始状态是LISTEN。</p><p class="ql-align-justify">client端建立连接,发送一个SYN同步包,发送之后状态变成SYN_SENT</p><p class="ql-align-justify">server端收到SYN之后,同意建立连接,返回一个ACK响应,同时也会给client发送一个SYN包,发送完成之后状态变为SYN_RCVD</p><p class="ql-align-justify">client端收到server的ACK之后,状态变为ESTABLISHED,返回ACK给server端。server收到之后状态也变为ESTABLISHED,连接建立完成。</p><p class="ql-align-justify"><br></p><p class="ql-align-justify">因为TCP是双工传输模式,不区分客户端和服务端,连接的建立是双向的过程。</p><p class="ql-align-justify">如果只有两次,无法做到双向连接的建立,从建立连接server回复的SYN和ACK合并成一次可以看出来,他也不需要4次。</p><p class="ql-align-justify">挥手为什么要四次?因为挥手的ACK和FIN不能同时发送,因为数据发送的截止时间不同。</p><p class="ql-align-justify"><br></p><p class="ql-align-justify">四次挥手过程</p><p class="ql-align-justify">client端向server发送FIN包,进入FIN_WAIT_1状态,这代表client端已经没有数据要发送了</p><p class="ql-align-justify">server端收到之后,返回一个ACK,进入CLOSE_WAIT等待关闭的状态,因为server端可能还有没有发送完成的数据</p><p class="ql-align-justify">等到server端数据都发送完毕之后,server端就向client发送FIN,进入LAST_ACK状态</p><p class="ql-align-justify">client收到ACK之后,进入TIME_WAIT的状态,同时回复ACK,server收到之后直接进入CLOSED状态,连接关闭。但是client要等待2MSL(报文最大生存时间)的时间,才会进入CLOSED状态。</p><p class="ql-align-justify"><br></p>
-
下一篇
说说TCP 3次握手的过程?为什么要3次?4次不行吗?
说说TCP 3次握手的过程?为什么要3次?4次不行吗?
相关文章
- PHP中如何进行单元测试以及如何在开发过程中保证代码质量?
- 聊一下高并发和高性能的区别和联系?
- 请解释HTTP的基本概念,以及在Golang中如何使用HTTP?
- 请给一个例子解释一下PHP中的闭包函数是什么?
- 如何通过PHP来保护您的代码免受SQL注入攻击?
- 如何在Golang中进行并发编程?
- 请举例说明PHP中如何处理异常?
- 如何在Golang中实现单例模式?
- 请问PHP中如何实现多线程?
- 请解释下PHP中会话(session)和Cookie(cookie)的作用。
- 请解释一下PHP中的MVC模式是如何工作的?
- 在PHP中,Magic Method都有哪些,并举例说明它们的作用?
- 请列出与PHP相关的缓存机制及其优缺点。
- PHP中如何处理文件上传和下载?
- 请解释什么是defer语句,以及它有什么作用?
- PHP7和PHP5的性能上有什么差别?
- 请提供至少三个通过PHP实现的网站性能优化技巧。
- 请描述在Golang中使用MongoDB时的最佳实践。
- 请谈谈您对PHP的垃圾回收机制的了解及实践。
- PHP中常用的设计模式有哪些?
微信收款码
支付宝收款码