加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

[linux] C语言Linux系统编程-TCP通信的11种状态

发布时间:2020-12-13 14:17:40 所属栏目:Linux 来源:网络整理
导读:三次握手 由client主动发出SYN请求,此时client处于SYN_SENT状态(第一次握手)当server收到之后会由LISTEN转变为SYN_REVD状态,并回复client,client收到应答后处于ESTABLISHED状态,这个状态就表示client已经准备好通信了(第二次握手)client收到二次握手应答后回

三次握手由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 <.h> sock = socket(AF_INET,SOCK_STREAM, &serv_addr,,(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(); serv_addr.sin_port = htons(); connect(sock,( sockaddr*)&serv_addr, buffer[(buffer)-printf(</span><span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;Message form server: %sn</span><span style="color: #800000"&gt;"</span><span style="color: #000000"&gt;,buffer); </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;sleep(60); </span><span style="color: #008000"&gt;//</span><span style="color: #008000"&gt;关闭套接字</span>

<span style="color: #000000"> close(sock);
sleep(<span style="color: #800080">60<span style="color: #000000">);
<span style="color: #0000ff">return <span style="color: #800080">0<span style="color: #000000">;
}

server.c

#include <.h>.h> serv_sock = &serv_addr,(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);; serv_addr.sin_port = htons(); bind(serv_sock, listen(serv_sock, = clnt_sock = accept(serv_sock,( sockaddr*)&clnt_addr,& str[] = ,1183C ,

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读