三次握手和四次挥手的理解
TCP/IP TCP协议提供可靠的连接服务,采用三次握手来建立连接。
三次握手:如图所示:
第一次握手:建立连接;客户机先向服务器发送一个请求报文段,客户端发送一个SYN为1;seq为x,客户端进入SYN-SENT状态,使服务器进入LISTEN状态,等待服务器的回应。
第二次握手:服务器收到客户端的 SYN 报文段,需要对这个 SYN 报文段进行确认,设置 Ack 为x+1(Sequence Number+1);同时,自己还要发送 SYN 请求信息,将 SYN 位置为 1,Seq 为y;服务器端将上述所有信息放到一个报文段(即 SYN+ACK 报文段)中,一并发送给客户端,此时服务器进入 SYN_RECV 状态;
第三次握手:客户端收到服务器SYN+ACK报文后,向服务器发送ack确定报文,从而客户端进入ESTABLISHED状态,从而客户端可以读写数据;而服务器收到客户端的报文,会进入ESTABLISHED状态,可以开始读写数据了。
简单对三次握手的理解:第一次握手是为了确定客户端和服务端正常开启;第二次握手是服务器给客户端发送报文,客户端回应收到了;第三次握手是客户端向服务器发送报文,服务器回应收到了的过程,因此三次握手缺一不可,要是采用二次握手会使传输数据不安全;而四次握手就没必要,三次握手时就已经建立连接,四次握手就显得很多与。
客户端:你在线吗?
服务器:我在线的,你在线吗?
客户端:我在线的。
四次挥手:当客户端与服务器通过TCP三次握手建立连接,传输数据结束后,需要对TCP断开连接,从而出现了四次挥手。
第一次挥手:当客户端主动调用close报文时,向服务器发送结束报文fIN,会进入FIN_WAIT状态
第二次挥手:服务器收到FIN结束报文,并向客户端发送一个ack确定请求报文,自己进入CLOSE_WAIT状态;
第三次挥手:服务器调用close报文时,服务器向客户端发送一个FIN结束报文,使服务器进入LAST_ACK,等待最后一个ack确定请求;
第四次握手:客户端收到服务器发来的结束报文段, 进入TIME_WAIT, 并发出送确认报文段ACK;服务器收到了对结束报文段确认的ACK,进入CLOSED状态,断开连接。而客户端要等待2MSL的时间,才会进入到CLOSED状态。
三次握手和四次挥手的区别:
其实在TCP握手的时候,接收端将SYN包和ACK确认包合并到一个包中发送的,所以减少了一次包的发送。对于四次挥手,由于TCP是全双工通信,主动关闭方发送FIN请求不代表完全断开连接,只能表示主动关闭方不再发送数据了。而接收方可能还要发送数据,就不能立即关闭服务器端到客户端的数据通道,所以就不能将服务端的FIN包和对客户端的ACK包合并发送,只能先确认ACK,等服务器无需发送数据时在发送FIN包,所以四次挥手时需要四次数据包的交互。
简单理解四次挥手:
客户端:数据传输结束,我需下线。
服务器:我知道了,我还有一些数据需要传输,先稍等下。
服务端:数据传输结束了,你可以下线了。
客户端:好的。