传输数据之前需要先建立连接,TCP 连接的建立,称为三次握手
一开始,客户端和服务端都处于 Close 状态,
然后服务器监听某个窗口,处于Listen状态
客户端发起连接,发送SYN报文(将SYN标志位置为1),发完之后自己处于SYN_SENT状态
服务端收到SYN,立马返回SYN+ACK(即SYN和ACK),自己进入SYN_RCVD状态
客户端收到SYN+ACK(即SYN和ACK),马上发送对SYN确认的ACK,并且自己进入established状态
服务端收到对SYN确认的ACK,也进入established状态
至此,客户端和服务器端都进入established状态,连接建立了
三次握手目的是保证双方都有发送和接收的能力
在这个过程中一共产生三个报文,第一个报文是一个SYN报文(SYN标志位设为1),第二个报文是SYN+ACK报文(SYN标志位和ACK标志位设为1),第三个报文ACK报
2.四次挥手
客户端发送一个Tcp首部FIN标志位被置为1的报文(即FIN报文),然后进入FIN_WAIT_1状态
服务器收到这个FIN报文,马上发送一个确认报文ACK,然后马上进入CLOSED_WAIT状态
客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态
服务器处理完数据后,向客户端发送FIN报文,之后自己 马上进入LAST_ACK 状态
客户端收到这个FIN报文之后,立即向服务端发送ACK报文,而且自己进入TIME_WAIT 状态,然后等待2MSL(一来一回,所以是两个MSL)时间后,自动进入CLOSED状态
而服务器端收到ACK之后马上就进入CLOSE状态
四次挥手一共产生四个报文,两个FIN报文,两个ACK报文,所以叫四次挥手
经典问题,为什么三次握手需要三次,四次挥手需要四次?



