linux基础第二篇:TCP SOCKET的状态
建立TCP连接的三次握手:

1、client向处于LISTEN状态的server发送SYN后,变为SYN_SENT状态。
2、server收到SYN后,变为SYN_RECV状态,并向client返回SYN_ACK。
3、client收到SYN_ACK后,变为ESTABLISHED状态,并向server返回ACK。
4、server收到ack后,变为ESTABLISHED状态。
三次握手涉及4种状态,client的SYN_SENT、ESTABLISHED,server的LISTEN、SYN_RECV、ESTABLISHED。
关闭TCP连接的四次挥手:

1、主动关闭方(下面简称主关)向被动关闭方(下面简称被关)发送FIN后,变为FIN_WAIT1状态。
2、被关收到FIN后,向主关返回ACK,并变为CLOSE_WAIT状态。
3、主关收到ACK后,变为FIN_WAIT2状态。
4、被关向主关发送FIN,变为LAST_ACK状态。
5、主关收到FIN后,向被关返回ACK,并变为TIME_WAIT状态,2MSL后变为CLOSED状态。等待2MSL时间是为了确保最后一个ACK能到达被关,防止被关重发FIN,导致连接无法正常关闭。MSL是Max Segment Lifetime,分段最大寿命,是一个TCP分段在互联网系统中存在的最大时间。在linux系统中,可以通过cat /proc/sys/net/ipv4/tcp_fin_timeout文件查看2MSL的值,一般为60(即2MSL为60s,1MSL为30s)。
6、被关收到ACK后,变为CLOSED状态。
四次挥手涉及6种状态,主关的FIN_WAIT1、FIN_WAIT2、TIME_WAIT、CLOSED,被关的CLOSE_WAIT、LAST_ACK、CLOSED。
综上,有TIME_WAIT的一端是主动关闭方,有CLOSE_WAIT、LAST_ACK的一端是被动关闭方。
client与server建立短连接,最终server是主动关闭方。
浙公网安备 33010602011771号