三次握手
是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。
可以想象两人用对讲机交谈。
代码语言:javascript复制A:我准备好了你准备好了吗,收到请回答。
B:收到收到,我也准备好了,收到请回答。
A:收到收到
四步挥手
代码语言:javascript复制客户端:“兄弟,我这边没数据要传了,咱关闭连接吧。”
服务端:“收到,我看看我这边有木有数据了。”
服务端:“兄弟,我这边也没数据要传你了,咱可以关闭连接了。”
客户端:“好嘞。”
为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,当收到客户端的FIN报文时,仅仅表示客户端不再发送数据了但是还能接收数据,服务端也未必全部数据都发送给对方了,有可能还会发送一些数据给客户端后,再发送FIN报文给客户端来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。
来源
https://www.dandelioncloud.cn/article/details/1498121783957073921