



TCP协议的三次握手,四次挥手?
TCP协议是一种面向连接的,可靠的运输层协议。在通信过程中一般有三个阶段,建立连接,传输数据,释放连接。
建立连接时,客户端和服务器会互相发送TCP报文,这个过程称为三次握手,
1.首先,客户端向服务器发送SYN包;
2.服务器向客户端发送SYN+ACK包;
3.客户端向服务器发送ACK包;
第二个过程可以拆分,即先发送ACK包,再发送SYN包;这样就变成了四次握手。
最后一次是有必要的,是为了防止之前在网络中滞留的包一段时间后重新到达服务器端,白白浪费服务器资源。
如果没有最后一次握手,丢失的包发给服务器,服务器就建立连接,但客户端并不会发送数据到服务器,服务器只是等待。有了的话需要客户端最后一次确认才可以建立连接。
断开连接时,客户端和服务器互相发送TCP报文,释放连接。
1.客户端向服务器发送FIN报文;
2.服务器向客户端发送ACK;此时半关闭;
3.服务器向客户端发送FIN报文;
4.客户端ACK;服务器收到ACK后关闭,客户端自发送ACK报文段开始经过2MSL后关闭。
为什么需要2MSL,不能立刻关闭?
发送的ACK可能丢失;防止网络中滞留的失效报文重新到达。
保活计数器是什么?
万一客户端立即挂了,服务器不能一直等待,要是长时间没有收到消息,陆续发送探测报文,没有回复后可以关闭服务器。