Linux 查看网络连接数与流量

WIN下有GUI工具很方便,Linux下服务器只能通过命令来查看了。

结论

Bash
# netstat 只要不使用-p来查看进程,就不需要使用sudo
$ netstat -antu|grep -E '(0\.0\.0\.0|10\.0\.0\.103|::):(443|80)'|awk '{++S[$NF]} END {for(a in S) print a, S[a]}'
LISTEN 4
SYN_RECV 74
FIN_WAIT2 1

# sudo apt install nethogs
sudo nethogs

NetHogs的常用交互命令(键盘快捷键)

  • m : 修改显示单位
  • r 或s: 按流量排序
  • q : 退出

查看网络连接

查看0.0.0.010.0.0.103::三个ip地址上的443和80端口的连接:netstat -antu|grep -E '(0\.0\.0\.0|10\.0\.0\.103|::):(443|80)'

tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN
tcp        0      0 10.0.0.103:443          190.171.72.152:2599     SYN_RECV
tcp        0      0 10.0.0.103:443          183.194.145.8:10711     ESTABLISHED

netstat 常用参数:(只要不使用-p看其他用户的进程,就不需要使用sudo权限)

  • -a--all:显示所有连线中的Socket;
  • -n--numeric:直接使用ip地址,而不通过域名服务器;
  • -t--tcp:显示TCP传输协议的连线状况;
  • -u--udp:显示UDP传输协议的连线状况;
  • -p--programs:显示正在使用Socket的程序识别码和程序名称;
  • -c--continuous持续列出网络状态;

TCP状态含义

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

TCP状态迁移

TCP状态迁移图描述了一个连接从建立 → 数据传输 → 断开的完整生命周期,涵盖了三次握手、四次挥手以及特殊异常状态的变化过程。

建立阶段(三次握手)

  • CLOSED → LISTEN:服务端被动打开,监听端口等待连接。
  • CLOSED → SYN_SENT:客户端主动打开,发送SYN请求。
  • LISTEN → SYN_RCVD:服务端收到SYN后回复SYN+ACK。
  • SYN_SENT → ESTABLISHED:客户端收到SYN+ACK后发送ACK,连接建立。

通信阶段

ESTABLISHED:双方可进行全双工数据传输,依靠序列号(Seq)与确认号(Ack) 保证可靠性。

断开阶段(四次挥手)

  • 主动关闭方: ESTABLISHED → FIN_WAIT_1(发送FIN) FIN_WAIT_1 → FIN_WAIT_2(收到ACK) FIN_WAIT_2 → TIME_WAIT(收到FIN并回复ACK,等待2MSL) TIME_WAIT → CLOSED(超时释放资源)
  • 被动关闭方: ESTABLISHED → CLOSE_WAIT(收到FIN并回复ACK) CLOSE_WAIT → LAST_ACK(发送FIN) LAST_ACK → CLOSED(收到ACK)

特殊状态

  • CLOSING:双方同时发送FIN,互发ACK后进入TIME_WAIT。
  • SYN_RCVD → LISTEN:收到RST复位包时回退到监听状态。
  • TIME_WAIT:等待2MSL确保最后ACK可重发,防止旧连接数据干扰新连接。

查看网络浏量

  • vnstat 是一个用于收集网络接口统计信息的控制台应用程序。它可以提供关于网络流量的历史数据,包括每小时、每天和每月的流量使用情况。例如,使用 vnstat -i eth0 -l 可以查看实时流量情况。
  • iftop 是一个实时流量监控工具,它可以显示通过网络接口的数据包流动情况,包括源和目的IP地址、端口信息等。通过 iftop -i eth0 可以指定监控特定的网络接口。
  • nethogs 是一个实时网络流量监控工具,它按进程显示网络带宽的使用情况。这对于确定哪个进程正在使用网络带宽特别有用。例如,nethogs eth0 可以监视特定接口的网络带宽使用情况。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注