ss 命令输出详解
ss 全名socket statistics,是iproute2中的一员
ss已经替代netstat,大热于江湖。但是关于ss命令输出的内容,是什么意思呢?
[root@test]# ss -s Total: 26437 (kernel 27730) TCP: 31961 (estab 25762, closed 6003, orphaned 70, synrecv 0, timewait 5985/0), ports 0 Transport Total IP IPv6 * 27730 - - RAW 0 0 0 UDP 21 13 8 TCP 25958 25073 885 INET 25979 25086 893 FRAG 0 0 0
Total: 26437 (kernel 27730) 是什么意思?为什么Total的值小于kernel?
Transport Total IP IPv6
* 27730 - -
* 又代表什么?
网上全是千篇一律,对于输出格式的文档却没有说明
关于*
答:仅是和简单的打开、管理相关的sockets,而不管在内核级别的传输是什么层
关于total 和kernel 的 数量不一致的解释:
答:系统socket 使用后不会立即过期,所以 26437 是所有active sockets 减去过期sockets.。27730 是 连接到kernel sockets,包含(27730-26437)剩余的 还没有被 kernel清理的sockets。
http://tweaked.io/guide/kernel/
这篇关于内核调优的页面很好地概述了内核如何处理套接字的概念,以及如何调整系统以更好地管理内核级别的套接字。
输出格式字段说明
netid 它表示套接字类型和传输协议, 当它不明确时:tcp、udp、raw、u str是unix_stream的缩写,u_dgr是unix数据报套接字,nl是netlink,p_raw和p_dgr是raw和datagram数据包套接字
第二列是状态。此处显示套接字状态。这些名称是标准TCP名称,但UNCON除外,它不能用于TCP,但对于其他类型的未连接的套接字是正常的。同样,可以隐藏此列。
然后两列(recv-q和send-q)显示排队等待接收和发送的数据量。
最后两列显示了套接字的本地地址和端口以及它的对等地址(如果套接字已连接)。
如果给出了选项-o、-e或-p,则不在固定位置显示选项,而是用空格对分隔:选项:值。如果值不是一个数字,它将以值列表的形式显示,括在(…)用逗号分隔
硬翻外国文档
https://superuser.com/questions/885250/what-does-the-output-of-ss-s-mean
socket 和port 的区别
ss命令详解
https://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html
Linux创建sockets原理
https://ops.tips/blog/how-linux-creates-sockets/
通过本文知道,kernel 的数值 是取得kernel 全部的sockets,而且不能知道 这些sockets 具体是被哪些占用,就算用不同的namespace,也是一样
# Create a bunch of sockets using our # example in C ./sockets.out # Check that we have a bunch of sockets cat /proc/net/sockstat sockets: used 296 TCP: inuse 5 orphan 0 tw 2 alloc 108 mem 3 UDP: inuse 1 mem 0 UDPLITE: inuse 0 RAW: inuse 0 FRAG: inuse 0 memory 0 # Create a network namespace ip netns add namespace1 # Get into it ip netns exec namespace1 /bin/bash # Check how `/proc/net/sockstat` shows the same # number of allocated sockets. TCP: inuse 0 orphan 0 tw 0 alloc 108 mem 3 UDP: inuse 0 mem 0 UDPLITE: inuse 0 RAW: inuse 0 FRAG: inuse 0 memory 0
转载于:https://blog.51cto.com/foxhound/1944473