TCP/IP 三次握手

TCP是传输层协议,建立连接时需要进行一个三次握手的机制来保证连接的可靠性和稳定性。TCP三次握手的过程如下
TCP/IP 三次握手
第一次握手由客户端主动发起,向服务器发送一段TCP报文,内容包括标致信号SYN,表示请求建立连接,同时发送***seq=x;
第二次握手:服务器端开始处于一直监听状态,当接收到客户端发送过来的报文后,回复一段报文,标致位为ACK+SYN,表示同意建立连接,同时发送***seq=y和确认号ack=x+1(客户端发送的***+1);
第三次握手:客户端在接收到来自服务器端的报文后,明确了客户端到服务器端的数据传输正常,然后返回最后一段报文,其标致位是ACK,***是seq=x+1;确认号是ack=y+1,然后客户端进入建立连接完成状态。服务器端在接受到最后一段报文后,确认了从服务器端到客户端的数据连接正常,进入连接完成状态。
由于握手过程中的seq和ack都是由对方发过来的报文计算得出来的,因此一旦传输过程中的报文丢失,都无法完成握手,这保证了连接的可靠性和稳定性。理论上来说,只需要两次握手 即可完成传输,但两次握手的缺陷在于:如果客户端发起连接请求,由于某种原因在传输过程中经历了较大的延时,客户端没有接收到服务器端的回复就会发送新的连接请求。当客户端发送的第二次连接结束后,先前失效的报文延时到达了服务器端,于是服务器回应了客户端一段失效的报文,并且处于一直等待数据接收状态造成了资源的浪费。