tcp是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在tcp/ip协议中,tcp协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 tcp窗口大小信息。在socket编程中,这一过程由客户端执行connect来触发。
第一次握手: 建立连接。客户端发送连接请求报文段,将syn位置为1,sequence number为x;然后,客户端进入syn_send状态,等待服务器的确认;
第二次握手: 服务器收到syn报文段。服务器收到客户端的syn报文段,需要对这个syn报文段进行确认,设置acknowledgment number为x 1(sequence number 1);同时,自己自己还要发送syn请求信息,将syn位置为1,sequence number为y;服务器端将上述所有信息放到一个报文段(即syn ack报文段)中,一并发送给客户端,此时服务器进入syn_recv状态;
第三次握手: 客户端收到服务器的syn ack报文段。然后将acknowledgment number设置为y 1,向服务器发送ack报文段,这个报文段发送完毕以后,客户端和服务器端都进入established状态,完成tcp三次握手。
随后客户端与服务器端之间可以开始传输数据了。
tcp为什么要三次握手?2次握手不可以吗,原因请点击查看