http三次握手与四次挥手(连接与断开连接)

TCP connection

客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西;

由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它们之间都是经过由TCP创建的一个从客户端发起,服务器接收的类似连接的通道,这个连接可以一直保持,http请求是在这个连接的基础上发送的;

在一个TCP连接上是可以发送多个http请求的,不同的版本这个模式不一样。

在HTTP/1.0中这个TCP连接是在http请求创建的时候同步创建的,http请求发送到服务器端,服务器端响应了之后,这个TCP连接就关闭了;

HTTP/1.1中可以以某种方式声明这个连接一直保持,一个请求传输完之后,另一个请求可以接着传输。这样的好处是:在创建一个TCP连接的过程中需要“三次握手”的消耗,“三次握手”代表有三次网络传输。

如果TCP连接保持,第二个请求发送就没有这“三次握手”的消耗。HTTP/2中同一个TCP连接里还可以并发地传输http请求。、

我自己的通俗解释三次握手:第一次甲写信告诉乙,说他喜欢乙(然后不知道乙是否收到自己的信,焦急等待。。);乙收到来信后握手成功第一次,并且回信表示她也喜欢甲愿意交往(然后不知道甲是否收到自己的信,焦急等待。。);甲收到回信后成功握手第二次(此时表示双方通讯正常),并且回信表示,他很高兴乙也喜欢他,让他们为谈恋爱准备(此时甲已经准备好,然后就是乙收到甲的回信开始准备,然后第三次握手完成)。

TCP的四次挥手(Four-Way Wavehand)

所谓的四次挥手即TCP连接的释放(解除)。连接的释放必须是一方主动释放,另一方被动释放。以下为客户端主动发起释放连接的图解:

我的通俗理解:

挥手默认对方可以收到消息(因为之前已经建立了连接);

甲觉得乙太懒了,发出来分手的信息(不知道乙是否收到);乙收到甲要分手的消息,第一次挥手,同时表示同意和甲断绝关系,发出信息(由于连接是相通的没必要等甲回信)(相当于二次挥手),然后乙就收拾准备分手(由于实际分手很重要还是要等待甲的确认)(三次挥手);

甲收到消息,回信可以分手,等待对方是否回信因为意外没收到消息要是没收到就终于分手(第四次挥手到此完成,分手完成);

乙收到甲的确认消息真正分手(四次挥手的条件);

5.为什么客户端在TIME-WAIT阶段要等2MSL?

为的是确认服务器端是否收到客户端发出的ACK确认报文

当客户端发出最后的ACK确认报文时,并不能确定服务器端能够收到该段报文。所以客户端在发送完ACK确认报文之后,会设置一个时长为2MSL的计时器。MSL指的是Maximum Segment Lifetime:一段TCP报文在传输过程中的最大生命周期。2MSL即是服务器端发出为FIN报文和客户端发出的ACK确认报文所能保持有效的最大时长。

服务器端在1MSL内没有收到客户端发出的ACK确认报文,就会再次向客户端发出FIN报文;

如果客户端在2MSL内,再次收到了来自服务器端的FIN报文,说明服务器端由于各种原因没有接收到客户端发出的ACK确认报文。客户端再次向服务器端发出ACK确认报文,计时器重置,重新开始2MSL的计时;否则客户端在2MSL内没有再次收到来自服务器端的FIN报文,说明服务器端正常接收了ACK确认报文,客户端可以进入CLOSED阶段,完成“四次挥手”。

所以,客户端要经历时长为2SML的TIME-WAIT阶段;这也是为什么客户端比服务器端晚进入CLOSED阶段的原因

猜你喜欢

转载自blog.csdn.net/sxy3180911/article/details/108694592
今日推荐