TCP 为什么要三次握手和TIME_WAIT
TCP建立连接的三次握手
在建立连接的时候Client端会向Service端发送请求,发送SYN同步信息。但是这个信息有时候会滞留在网络中,在上次TCP连接释放之后才达到S端。会导致S端误以为C端又发送了一次数据请求,然而实际上C端并没有这么做。如果TCP建立连接没有三次握手,而是两次握手,那么此时的S端就会一直发送数据给C端,造成信道中大量垃圾包,并且极大的消耗了S端的资源。直到保活计时器到时间释放链接。不过此时要是有第三次握手,S端就只会等待很短的时间,没有收到C端发出的ACK包,便会释放资源准备下一次链接。
TCP释放链接的TIME_WAIT
防止C端在第四次握手的时候发送的ACK报文没有被S端收到,检测到之后可以重传。不然S端一直收不到ACK无法进入CLOSED状态白白浪费资源。