[linux] C语言Linux系统编程-TCP通信的11种状态
三次握手由client主动发出SYN请求,此时client处于SYN_SENT状态(第一次握手)当server收到之后会由LISTEN转变为SYN_REVD状态,并回复client,client收到应答后处于ESTABLISHED状态,这个状态就表示client已经准备好通信了(第二次握手)client收到二次握手应答后回复server,server收到应答之后也处于ESTABLISHED,表示握手成功,可以通信了(第三次握手) 数据传输然后client和server都处于通信状态,不会改变 四次挥手client主动发送FIN请求关闭,此时client处于FIN_WAIT_1状态(短暂)(第一次挥手)server收到之后处于CLOSE_WAIT状态(半关闭状态),并做出应答(第二次挥手)client收到之后处于FIN_WAIT_2状态,等待server发送关闭请求.server会紧接着发送FIN断开请求,并处于LAST_ACK(第三次挥手)client收到之后并应答,此时处于TIME_WAIT状态,这是主动断开的一端的最后一个状态,意思是会等待一定的时间(2MSL-1min),等待之后会变成CLOSED状态(第四次挥手) TCP的11种状态 CLOSED最初状态1.建立连接三次握手client ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? server(1)SYN_SENT ? ? ? ========> ? ? (2)LISTEN(4)ESTABLISHED <======== ? ? ?(3)SYN_RCVD(5) ? ? ? ? ? ? ? ? ? ? ? ?=========> ? ?(6)ESTABLISHED2.数据传输阶段3.断开连接四次挥手(1)FIN_WAIT_1 ?=========> ? ? ?(2)CLOSE_WAIT(4)FIN_WAIT_2 ?<========== ? ?(3)(6)TIME_WAIT ?<========== ? ? (5)LAST_ACK(7) ? ? ? ? ? ? ? ? ? ? ==========> 使用netstat命令查看各种状态: 1. 2. 3. 4. 服务端监听本机1234端口,客户端进行连接,TIME_WAIT状态维持时间是两个MSL时间长度,也就是在1-4分钟,自动关掉 参照代码: client.c #include
printf(</span><span style="color: #800000">"</span><span style="color: #800000">Message form server: %sn</span><span style="color: #800000">"</span><span style="color: #000000">,buffer);
</span><span style="color: #008000">//</span><span style="color: #008000">sleep(60);
</span><span style="color: #008000">//</span><span style="color: #008000">关闭套接字</span>
<span style="color: #000000"> close(sock); <span style="color: #0000ff">return <span style="color: #800080">0<span style="color: #000000">; } server.c #include (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |