TCP的socket连接十个状态

13人阅读 评论(0) 收藏 举报
分类:

tcp的十种状态

由上图可看:tcp连接的时候发生了三次握手的过程,分别对应有四个状态
client: SYN_SENT -> ESTABLISHED
server: LISTEN -> SYN_RECV -> ESTABLISHED

关闭socket

(6种状态)

当客户端主动关闭的时候,发送FIN 信号到服务端,此时服务端通知应用程序的接收数据由开始的recv([1024])变为recv(0) ,还通知阻塞的线程不用再接收数据了,此时服务端接收还没有完全关闭,代码还没有往下执行,当得到cpu之后,再往下执行的时候服务端的状态再变为LASK_ACK(最后一次通知结束),直到最后两个都变为CLOSED。

笔者在做thrift遇到一个问题,当服务一直跑的时候客户端再也调取不到服务端了,服务端的多种状态一直是CLOSE_WAIT的状态,如图:

close_wait

分析问题:
1. 客户端请求过多,导致服务器线程池无法及时处理,此时服务端在一个无响应的状态,即使发送再多的请求也无法响应,减少不必要的请求,降低timeout时间
2.服务器大量的CLOSE_WAIT说明系统CLOSE_WAIT设置时间过长
3. 检查客户端是否能够正常关闭

相关资料:
tcp详解

查看评论

TCP/IP/UDP Socket通讯开发实战 适合iOS/Android/Linux

-
  • 1970年01月01日 08:00

判断SOCKET连接状态

第四种是本人认为最好的 1. 用read函数来判断   读到长度0不能断定是已经断开.除非是-1,才代表输入流已经被关闭,说名socket已经close,而且关键在于你怎么读,实际上应该...
  • FrankieWang008
  • FrankieWang008
  • 2013-09-18 09:39:06
  • 11941

不可不知的socket和TCP连接过程

本文主要说明的是TCP连接过程中,各个阶段对套接字的操作,希望能对没有网络编程基础的人理解套接字是什么、扮演的角色有所帮助。如发现错误,敬请指出 1. 背景 1.完整的套接字格式{...
  • qq3401247010
  • qq3401247010
  • 2017-10-03 19:35:01
  • 255

linux 查看socket的连接状态

Linux中查看socket状态: cat /proc/net/sockstat #(这个是ipv4的)说明: sockets: used:已使用的所有协议套接字总量 TCP: inuse:正在...
  • haolipengzhanshen
  • haolipengzhanshen
  • 2016-12-12 15:26:55
  • 900

TCP 连接状态图 (TCP Connection State Diagram)

转载地址:http://www.reistlin.com/blog/123 TCP 連線在各種狀態之間變動的狀況與順序,其中 TIME_WAIT 連線已經是 TCP 連線在 完全關閉連線狀...
  • dszgf5717
  • dszgf5717
  • 2016-01-11 22:29:20
  • 830

TCP socket如何判断连接断开

SO_KEEPALIVE是系统底层的机制,用于系统维护每一个tcp连接的。 心跳线程属于应用层,主要用于终端和服务器连接的检查。 即使SO_KEEPALIVE检测到连接正常,但并不能保证终端和服务...
  • yangyangye
  • yangyangye
  • 2014-03-24 22:13:25
  • 15911

TCP 连接状态 及 netstat用法

State: 表TCP连接状态 ESTABLISHED 指TCP连接已建立,双方可以进行方向数据传递   CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。当对方close一个SOCK...
  • Beyond_cn
  • Beyond_cn
  • 2013-06-12 14:48:39
  • 4245

SOCKET连接与TCP/IP连接

SOCKET连接与TCP/IP连接 创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个T...
  • zh521zh
  • zh521zh
  • 2016-08-01 17:18:43
  • 783

TCP连接的11种状态变迁

转自:http://blog.csdn.net/engrossment/article/details/8104482             http://blog.csdn.net/xiaof...
  • zhutulang
  • zhutulang
  • 2016-04-14 16:01:37
  • 2196

soket编程相关(二)如何判断连接状态断开,Linux:C/Socket多路复用select(),阻塞

以下程序是网上一哥们写的:就是通讯任意一方可以任意发送消息,有消息来到时会收到系统提示去接收消息。先建立好套接字,然后绑定,转化为监听套接字,接受连接。这里要用到select函数。使用步骤如下:1、设...
  • hejianhua
  • hejianhua
  • 2011-06-02 15:02:00
  • 8072
    个人资料
    持之以恒
    等级:
    访问量: 4万+
    积分: 1403
    排名: 3万+