1.三次握手
TCP建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个TCP报文段。
主动连接方(客户端)
- SYN-SENT:同步-已发送状态;
- ESTAB-LISHED:已建立连接状态;
被动连接方(服务器端)
- LISHTEN
- SYN-RCVD:同步-收到状态
- ESTAB-LISHED:连接已建立
三次握手通俗理解
2.四次挥手
主动连接方(客户端)
- FIN-WAIT1:终止-等待状态1;
- FIN-WAIT2:终止-等待状态2;
- TIME-WAIT:时间-等待;
被动连接方(服务器端)
- CLOSE-WAIT:关闭-等待状态;
- LAST-ACK:最后-确认状态;
四次挥手通俗理解
3.客户端在TIME-WAIT等待2MSL
- MSL是TCP报文的最大生存时间,;
- 因此TIME_WAIT持续存在2MSL的话,就能保证在两个传输方向上的尚未被接收或迟到的报文段都已经消失(否则服务器立刻重启, 可能会收到来自上一个进程的迟到的数据, 但是这种数据很可能是错误的);
- 同时也是在理论上保证最后一个报文可靠到达(假设最后一个ACK丢失, 那么服务器会再重发一个FIN. 这时虽然客户端的进程不在了, 但是TCP连接还在, 仍然可以重发LAST_ACK);