结论
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.0、10.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可以监视特定接口的网络带宽使用情况。
发表回复