Info
使用
cat读取/proc/net/tcp:
20:26:16 with imicola in /proc …
➜ cat net/tcp
sl local_address rem_address st tx_queue rx_queue tr tm→when retrnsmt uid timeout inode
0: 3600007F:0035 00000000:0000 0A 00000000:00000000 00:00000000 00000000 975 0 19504 1 00000000a4229c44 100 0 0 10 5
1: 00000000:1F90 00000000:0000 0A 00000000:00000000 00:00000000 00000000 1000 0 212078 1 000000000d6f9099 100 0 0 10 0
2: 3500007F:0035 00000000:0000 0A 00000000:00000000 00:00000000 00000000 975 0 19502 1 0000000096cfd0bc 100 0 0 10 5
3: 00000000:14EB 00000000:0000 0A 00000000:00000000 00:00000000 00000000 975 0 19485 1 0000000090afd4c8 100 0 0 10 5
4: FEFFFF0A:0035 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 11274 1 00000000002c1024 100 0 0 10 0
5: 0100007F:820F 00000000:0000 0A 00000000:00000000 00:00000000 00000000 1000 0 61747 1 00000000a99e8635 100 0 0 10 0
6: 0100007F:2EED 00000000:0000 0A 00000000:00000000 00:00000000 00000000 1000 0 66273 1 00000000c8cd5fa4 100 0 0 10 0
7: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 3458 1 000000008179c28a 100 0 0 10 0
8: 0100007F:CF2C 0100007F:820F 01 00000000:00000000 00:00000000 00000000 1000 0 60129 1 0000000058f58fb6 20 4 2 10 -1
9: 0100007F:820F 0100007F:CF24 01 00000000:00000000 00:00000000 00000000 1000 0 22915 1 00000000a02f3b3b 20 4 30 10 32
10: 0100007F:820F 0100007F:CF2C 01 00000000:00000000 00:00000000 00000000 1000 0 22920 1 000000004162dccd 20 4 31 10 -1
11: 0100007F:CF24 0100007F:820F 01 00000000:00000000 00:00000000 00000000 1000 0 91312 1 00000000d84b6750 20 4 30 10 -1
简介
/proc/net/tcp 是 Linux procfs 中用于展示当前 TCP socket 状态的内核接口文件,该文件列出了系统当前所有 TCP socket(监听 + 已建立连接) 的内核信息。
字段讲解
sl
sl字段表示序号,通常是在内核哈希表中的索引,是方便人类阅读的设置
local_address
含义:
- 本地IP+本地端口 格式:
IP:PORT使用 16进制 + 小端序 表示
Note
例如
0100007F:CF2C转化为正常端口格式:
- 小端序 → 反转
7F 00 00 01转化为10进制:
127.0.0.1端口:
CF2C(hex) -> 53036(dec)即:
0100007F:CF2C = 127.0.0.1:53036
rem_address
含义:
- 远程IP + 端口
同样也是小端口+16进制,具体的分析拆解可以见上面的
st(TCP state)
TCP有十一种状态,而 st 表示TCP状态机状态
例如:
0A
01[!常见的状态]-
HEX TCP状态 01 ESTABLISHED 02 SYN_SENT 03 SYN_RECV 04 FIN_WAIT1 05 FIN_WAIT2 06 TIME_WAIT 07 CLOSE 08 CLOSE_WAIT 09 LAST_ACK 0A LISTEN TCP状态的具体含义可以在计算机网络章节查看
tx_queue | rx_queue
含义:
- 发送队列中等待发送的数据量和接收队列数据量
格式:
tx_queue:rx_queue当 rx_queue 很大的时候,有可能是:
- 程序读取数据慢
- 网络拥塞
- 应用卡住
tr
表示 TCP timer 状态
常见值:
| 值 | 含义 |
|---|---|
| 00 | no timer |
| 01 | retransmit timer |
| 02 | delayed ack |
tm->when
表示 timer 还剩多少时间触发
其中单位是 Linux 内核时间单位
retrbsmt
表示 重传次数
当这个值很大的时候,说明:
- 网络丢包
- TCP重传频繁
uid
表示创建该socket 的用户ID
timeout
TCP socket 的超时值。
inode
socket 对应的 inode编号。
可以通过这个 inode 找到哪个进程打开了这个 socket,使用如下命令即可:
ls -l /proc/*/fd/* | grep inode