TCP的三次握手与四次挥手

2019-04-01  本文已影响0人  12313凯皇

通常我们进行HTTP连接网络的时候会进行TCP的三次握手,然后传输数据,之后再释放连接。TCP传输如下图所示:


TCP传输

TCP三次握手的过程如下:

举一个很形象的例子:

A和B打电话
A:喂,我是A,你听的到吗?(第一次握手)
B:我听的到,你听的到吗?(第二次握手)
A:我也能听到。(第三次握手)
三次握手完毕,双方都确定对方能够听到(接收到消息),连接建立完毕,后面就可以开始通话了(传输数据)。

当客户端和服务端通过三次握手建立了TCP连接以后,当数据传送完毕,断开连接时就需要进行TCP的四次挥手。其四次挥手如下所示:

接着上面的例子来形容:

A和B聊完了,准备结束通话
A:我说完了,我不说了(A -> FIN_WAIT1)
B:好的,我知道你说完了(B -> CLOSE_WAIT)
B:我也说完了,那下次聊,再见(B -> LAST_ACK)
A:我知道你也说完了,再见。(A -> FIN_WAIT2)

下面再通过一张图来加强理解:


三次握手与四次挥手

如果有大量的连接,每次在连接、关闭时都要经历三次握手、四次挥手,这很显然会造成性能低下。因此,HTTP有一种keepalive connections的机制,它可以在传输数据后仍然保持连接,当客户端需要再次获取数据时,直接使用刚刚空闲下来的连接而无须再次握手,如下图所示:

连接复用
为什么是三次握手,而不是两次或四次?

因为三次握手刚好双方都可以确认自己的发送的数据对方是可以接收到的。例如A是客户端,B是服务端,那么前两次握手A就可以确认B是能够收到A所发送的请求的,后两次握手B可以确认A是能够接收到B所发送的请求的。

同样的,如果是两次握手,那么B无法确认他所发送的消息A是否能收到,如果是四次则会造成浪费。

上一篇下一篇

猜你喜欢

热点阅读