关于TCP的三次握手与四次挥手的探索
三次握手
所有图片引用自:https://blog.csdn.net/qq_38950316/article/details/81087809
三次握手的过程
- 首先,客户端向服务器发送一个带有SYN的请求,请求连接。
- 其次,服务器接收到请求,回复客户端SYN + ACK,证明自己有接收的能力
- 客户端接收到服务器发来的请求,证明了自己有接收和发送的能力,以及证明了服务端有发送的能力,此时再发送给服务器一次请求,让服务器证明自己有发送的能力。
问题:
-
为什么要进行三次握手?
三次握手就是要保证双方都具有发送和接收的能力,同时也是为了保证连接的可靠性,如果只有两次握手,那么可能存在问题,当网络延时较大的时候,客户端向服务器发送请求,此时,网络延时较大,服务器过了很长时间才收到请求,此时客户端以为连接失败了,但是实际上服务器收到请求后已经连接上了,这就白白浪费了服务器的资源。三次握手就能解决此类问题。
-
如果连接成功后,客户端突然断开怎么办?
TCP还设有保活计时器,每次客户端向服务端发送请求的时候,都会重置保活计时器,保活计时器的时间是2小时,一旦两个小时后客户端没有给服务端发送请求,那么服务端会每隔75s向客户端发送探测性报文,连续发送10次,如果10次都没有响应,那么服务端断开连接。
四次挥手
四次挥手的过程
- 客户机给服务器发请求。请求关闭连接。
- 服务器收到请求后,回复给客户机ACK,此时需要等待服务器将数据传输给客户端,当客户端收到响应时,客户端就变成半连接的状态。
- 当服务器数据传输完毕后,向客户端发送请求断开连接。
- 此时客户端收到了请求后,要做出相应,并且等待2msl后彻底关闭连接
先请求断开连接的一方可能是服务器,也可能是客户端,上述例子采用的是客户端请求断开连接
问题
-
为什么是4次挥手?
采用4次挥手的原因就是要保证对方想要继续发送的数据一定要全部发送完。
-
为什么还要等待2msl?
当服务器请求断开后,客户端一定要响应,只有服务器收到了客户端的响应,双方才能彻底断开连接,但是由于网络原因,可能客户端响应给服务器的彻底断开连接可能服务器没收到,那么服务器就会启用失败重传机制?等2msl的目的就是防止响应给服务器的数据丢失。