首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >netstat输出是“已建立-”(没有附加程序名称)。有什么问题吗?

netstat输出是“已建立-”(没有附加程序名称)。有什么问题吗?
EN

Unix & Linux用户
提问于 2017-08-22 06:16:57
回答 1查看 1.2K关注 0票数 1

我的服务器程序正在运行,我正在尝试从redis客户端建立一些TCP连接。

我正在尝试建立1150个客户端连接,当我在服务器端检查netstat时,我发现有一些“已建立的”状态,其中我不理解破折号(-)的原因,省略了程序名。

客户端的

代码语言:javascript
复制
[root@smarak-2storage-testvnf-vm0 src]# ulimit -n
4096
[root@smarak-2storage-testvnf-vm0 src]# ./redis-benchmark -h 10.111.89.230 -p 6379 -c 1150 -t set -n 20000 -d 10000 -r 100000000000000 -I

服务器端的

代码语言:javascript
复制
[root@sdl-blr-vm-1-14 src]# ulimit -n
1024
[root@sdl-blr-vm-1-14 src]# netstat -anp | grep -i 6379
tcp      129      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      31535/respAccess
tcp        0      0 10.111.89.230:6379      10.111.89.112:34276     ESTABLISHED 31535/respAccess
tcp        0      0 10.111.89.230:6379      10.111.89.112:35048     ESTABLISHED -
tcp        0      0 10.111.89.230:6379      10.111.89.112:34614     ESTABLISHED 31535/respAccess
tcp        0      0 10.111.89.230:6379      10.111.89.112:34234     ESTABLISHED 31535/respAccess
tcp        0      0 10.111.89.230:6379      10.111.89.112:34984     ESTABLISHED 31535/respAccess
tcp        0      0 10.111.89.230:6379      10.111.89.112:34441     ESTABLISHED -
tcp        0      0 10.111.89.230:6379      10.111.89.112:34441     ESTABLISHED -
tcp        0      0 10.111.89.230:6379      10.111.89.112:34441     ESTABLISHED 
-

为什么我要得到这个ESTABLISHED -输出?我认为服务器端有1024个文件描述符,因此,由于1150个连接是从客户端启动的,因此应该只建立1024个连接,即作为状态(带有程序名)的“已建立的31535/重新访问”,而其他连接应该被丢弃。如果有与国家“建立”的联系,那么为什么没有程序名称附加到它?

EN

回答 1

Unix & Linux用户

发布于 2017-08-22 08:48:30

由于您使用的是根帐户,所以您可以看到所有用户的所有进程,因此-表明连接由内核处理。

为了处理连接,必须使用套接字描述符和待定参数调用listen()函数。根据man listen的说法:

backlog参数定义了sockfd的挂起连接队列可能增长到的最大长度。如果连接请求在队列已满时到达,则客户端可能会收到一个带有ECONNREFUSED指示的错误,或者,如果底层协议支持重传,则该请求可能被忽略,以便以后重新尝试连接成功。在Linux2.2中,TCP套接字上的待定参数的行为发生了变化。现在,它指定了等待被接受的完全建立的套接字的队列长度,而不是不完全连接请求的数量。

编辑:

传入的TCP连接由内核(TCP握手)处理,这就是为什么您将连接视为已建立的。当内核建立TCP连接时,当它等待程序被接受时,连接被添加到队列中。待办事项处理指示队列的大小,而不是连接的最大数量。

因此netstat中的“-”标志表示客户端请求连接到您的服务器,内核处理TCP握手并将连接添加到队列中,但是连接尚未被服务器接受。

EDIT2:

查看网站。有一个很酷的流程图,描绘了整个过程。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/387574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档