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 0Transport 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.outCheck 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 0Create a network namespace
ip netns add namespace1
Get into it
ip netns exec namespace1 /bin/bash
Check how
/proc/net/sockstat
shows the samenumber 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