理解 TCP 的三次握手、四次挥手

June 27, 2016

三次握手是这样

第一次(客户端 to 服务端):我想建立连接,你听到吗? 如果服务端收到第一次握手的请求后,则可以确认:[客户端 to 服务端] 是畅通的。 客户端还不知道任何是否畅通的情况

第二次(服务端 to 客户端):我收到你的请求了,可以建立连接啊,你听得到吗? 此时,服务端可以确认的事情是:[客户端 to 服务端] 是畅通的。 客户端如果收到第二次握手的服务端回复后,则可以确认 [客户端 to 服务端], [服务端 to 客户端] 都是畅通的。

第三次(客户端 to 服务端):我听到你说可以建立连接了。 上面已经确认了[客户端 to 服务端] 是畅通的,这个包不会有问题。 此时如果服务端收到确认后,知道的事情有:[客户端 to 服务端],[服务端 to 客户端] 都是畅通, 而客户端也知道 [客户端 to 服务端], [服务端 to 客户端] 都是畅通。

好的,三次握手确认了双方畅通。

然后为啥要四次挥手呢

现时情况:双方建立了连接,可以互相发送数据 首先我这边想断了连接,那我第一次挥手,说:我要断开,从现在起我也不给你发数据了,

他那边收到了这个断开请求后,先发出一个确认包:好的,好的,我知道了, 我先收到这个确认后,就知道他收到了我的断开请求了。

然而因为他那边也是可以发送数据的,突然让他停下来,他也得把手上的事情干完啊,那对方等到手上没事情后(数据发完了),就会再发出一个:好的,我准备好了,断开吧。

最后我这边收到他的就绪信息后,现在大家都没事了,断开吧。

嗯,四次挥手就这样。

Reference:

戏说西游||TCP/IP协议的由来

为什么“三次握手,四次挥手”?

comments powered by Disqus