(1)为什么是三次握手,关闭是四次?
答:四次是因为客户端发送FIN请求释放后,服务器端还可能继续发送数据,所以第一个是先回复客户端的FIN,等发送完所有数据服务器端再发送FIN。
而三次握手是因为客户端发送连接请求后,客户端可以直接发送SYN+ACK报文,而四次挥手是只是先发送ACK报文回应客户端的FIN报文已被接收。
(2)为啥四次挥手要等待2MSL?
答:防止客户端最后一次发送给服务器的确认ACK在网络中丢失,以至于客户端关闭了而服务端未关闭(如果服务端没有收到ACK则会不断发送FIN报文,即客户端不能立马关闭)。
2MSL即一个发送和一个回复的最大时间。
(3)为啥不用两次握手?四次握手?
答:TCP是可靠传输的,面向字节即对每个字节的数据分配一个序号。
1)因为如果两次握手,只有服务器对客户端的起始序列号做出确认,但客户端却没有对服务器的起始序列号做确认,不能保证TCP运输可靠性;
2)而四次握手没必要(第二三步可以合并,提高连接的速度和效率)。
-----------------------------------