Linux网络状态

  |  

摘要: 本文记录了 Linux 中关于网络状态的常见工具和用法

【对算法,数学,计算机感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:算法题刷刷
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


1. netstat

用 netstat 查看 Linux 网络状况

1
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

结果的字段和含义

字段 含义
TIME-WAIT 等待足够的时间以确保远程TCP接收到连接中断请求的确认
FIN-WAIT-1 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2 从远程TCP等待连接中断请求
ESTABLISHED 代表一个打开的连接
SYN-RECV 再收到和发送一个连接请求后等待对方对连接请求的确认
SYN-SENT 再发送连接请求后等待匹配的连接请求
CLOSING 等待远程TCP对连接中断的确认
CLOSED 没有任何连接状态
CLOSE-WAIT 等待从本地用户发来的连接中断请求
LAST-ACK 等待原来的发向远程TCP的连接中断请求的确认
LISTEN 侦听来自远方的TCP端口的连接请求

2. ss

ss 是替代 netstat 的更强大的命令。可以说现在 netstat 已经过时了。

如果没有指定任何选项,ss 列出所有已经建立、并不处在listen的TCP 套接字。

选项及含义

选项 含义
-h, -help 列出选项概要
-V,-version 输出版本信息
-n, -numeric 不尝试解析服务的名字
-r,-resolve 尝试解析数字地址/端口
-a,-all 显示处在listening 和 非listening 状态的套接字
(对TCP来说,这意味所有已建立的连接)。
-l, -listening 只显示处在 listening 状态的套接字(默认情况下它们是被忽略的)
-o, -options 显示定时器信息
-e,-extended 显示详细的套接字信息
-m,-memory 显示套接字的内存使用信息
-p, -process 显示使用套接字的进程
-i, -info 显示TCP内部信息
-s,-summary 显示概要统计。该选项不分析来自不同来源的套接字概要信息。
当套接字的数量很大导致分析/proc/net/tcp 很痛苦时,它很有用。
-Z,-context 同 -p 选项,不过还显示进程的安全上下文
-z,-contexts 同 -Z, 不过还显示套接字的上下文。
该套接字上下文是从inode里取出的、并不是内核持有的
实际的socket上下文。 套接子通常以创建它的进程上下文标记,
但该上下文会反映已应用上的policy role, type and/or range ,
因此这是个很有用的参考。
-b,-bpf 显示套接字的BPF过滤(只有管理员能获取这些信息)
-4,-ipv4 只显示IPv4 套接字(-f inet的别名)
-6,-ipv6 只显示IPv6 套接字(-f inet6的别名)
-0,-packet 显示PACKET 套接字(-f link的别名)
-t,-tcp 显示 TCP 套接字
-u,-udp 显示UDP 套接字
-d,-dccp 显示 DCCP 套接字
-w,-raw 显示 RAW 套接字
-x,-unix 显示 Unix Domain 套接字(-f unix的别名)
-f FAMILY,
-family=…
显示类型为FAMILY的套接字。 支持以下几个family: unix, inet,inet6,link,netlink
-A QUERY,
-query=…,
-socket=…
列出需要倒出的套接字列表,用逗号隔开。 支持以下标识符:
all, inet, tcp, udp, raw, unix, packet, netlink, unix_dgram, unix_stream,
unix_seqpacket, packet_raw, packet_dgram
-D FILE,
-diag=FILE
不显示任何内容,仅把原始TCP套接字信息存入文件FILE。
如果FILE为 - , 则使用stdout作为输出。
-F FILE,
-filter=FILE
从文件FILE中读取信息。 文件的每一行被认为是单个命令行参数。
如果FILE为 - , 则使用stdin。

常见用法

1. 显示所有的连接

1
ss | less

2. 把 TCP 连接过滤出来

1
ss -aA tcp

3. 过滤出 UDP 连接

1
ss -aA udp

4. 不解析主机名

1
ss -nt

5. 只显示监听的套接字

1
ss -lnt

6. 打印进程名和进程号

1
ss -ltp

7. 打印统计概要

1
ss -s

8. 仅显示 ipv4 或 ipv6 连接

1
2
ss -tl -f inet
ss -tl6

9. 列出处在 time-wait 状态的 ipv4 套接字

注:state 后面的参数除了 time-wait 外还有很多可选的状态名,根据需要查手册使用。

1
ss -t4 state time-wait

Share