tcp笔记

三次握手

  1.客户端发送连接请求

  2.服务器收到请求后,告诉客户端可以建立连接

  3.客户端收到后继续返回说自己已经连接,可以发送数据了

  不能二次握手的原因:如果服务器二次握手就默认客户端已经连接了,开始发送数据,但此时的客户端并没有真正的连接,导致客户端会再次发起第一次握手请求,使服务器建立很多无效连接

四次挥手

  1.客户端:我没有请求发给你了

  2.服务器:你的请求我已经收到了,但是我还没有准备好,你继续等待我的消息

  3.服务器:我已经准备好了,你可以关闭了

  4.客户端:我可以关闭了,你也可以关闭了  。。。。。等待2MSL,防止服务器没有接收到四次挥手,服务器会重新三次挥手

  

 (4)为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

参考

原文地址:https://www.cnblogs.com/zhz-8919/p/10236363.html