前言:网络传输层主要是建立端到端的连接,那TCP通信的连接和断开原理是什么呢?也就是TCP的三次握手和四次挥手是什么意思?下面对这两个概念进行详细的理解和学习。
这篇文章写的不错,很详细。
面试官,不要再问我三次握手和四次挥手 - 知乎 (zhihu.com)
TCP三次握手
建立TCP连接
客户端与服务器交互需要三个数据包
握手的主要作用是确认双方的接收和发送能力是否正常
第一次握手:客户端发送syn报文,并进入syn_send状态,等待服务器确认
第二次握手:服务器收到syn报文,需要给客户端发送ack确认报文,同时服务器也要向客户端发送一个syn报文,此时服务器进入syn_rcvd状态
第三次握手:客户端收到syn+ack报文,向服务器发送确认包,客户端进入established状态,待服务器收到客户端发送的ack包,也会进入established状态,完成三次握手
两次握手是否可以?
TCP建立连接前,需要确认客户端、服务端双方的收包发包能力
第一次握手,客户端发送网络包,服务器收到了,服务端得出结论:客户端的发送能力、服务端的接收能力是正常的
第二次握手,服务端发包,客户端收到了,客户端得出结论:服务端的接收、发送能力、客户端接收、发送能力是正常的
但此时服务端不能确定客户端的接收能力是否正常
第三次握手,客户端发包,服务器收到了,服务器端得出结论:客户端的接收、发送能力是正常的,服务器的接收、发送能力是正常的
如果是两次握手,服务端无法确认客户端是否已经收到了自己发送的初始序列号,如果第二次握手报文丢失,那么客户端就无法知道服务端的初始序列号
TCP四次挥手
1、客户端和服务端都可以发起关闭的请求,举例客户端发起关闭请求,FIN+ACK
2、服务端发送ACK
3、服务端发送FIN+ACK
4、客户端发送ACK
为什么需要四次挥手,因为可能存在未发生完的数据。