跳转至

network


netstat

Bash
1
2
#查看网卡统计
ethtool -S <interface>

nslookup

dig

finger

lsof

sockstat

ethtool

查询或控制网络驱动和硬件设置

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#查看网口ring缓存
ethtool -g ens0
#查看网口驱动信息
ethtool -i ens0
#网口灯闪烁
ethtool -p ens0
#查看网口信息和统计
ethtool -S ens0
#查看支持多少个 Rx 队列
ethtool -l ens1f1
#检查 RSS 设置
ethtool -x ens1f1
ethtool -n ens1f1 rx-flow-hash tcp4

ss

显示socket统计

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#显示所有socket
ss -a
#详细详细socket信息
ss -e
#显示定时器信息
ss -o
#不解析地址
ss -n
#显示进程socket使用信息
ss -p
#显示tcp
ss -t

ifconfig

ip

redhat IP命令手册
ubuntu网络配置

IP查看

addr

显示IP地址和属性信息

Bash
1
2
3
4
5
6
7
8
9
#显示所有地址
ip addr
ip a
#显示特定网口
ip addr show dev ens0
#添加地址
ip addr add 192.168.1.2/24 dev ens3
#删除地址
ip addr del 192.168.1.2/24 dev ens3

查询或管理网络接口状态

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#显示有所网口信息
ip link
#显示网口ens0得信息
ip link show den ens0
#查看网口统计
ip -s link
#启动网口
ip link set ens0 up
#关闭网口
ip link set ens0 down
#开启混杂模式
ip link set ens0 promisc on

route

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#显示内核所有路由表
ip route
#添加路由
##添加到网关的默认路由
ip route add default via 192.168.1.1 dev ens0
ip route add 192.168.1.0/24 via 192.168.1.1
ip route add 192.168.1.0/24 dev ens0
#删除路由
ip route del 192.168.1.0/24 via 192.168.1.1
ip route del 192.168.1.0/24 dev ens0
#替换路由
ip route replace 192.168.1.0/24 dev ens1
#获取路由
ip route get 192.168.1.2

maddr

查询,管理组播地址

Bash
1
2
3
4
5
6
7
8
#显示所有组播信息
ip maddr
#显示网口ens0得组播信息
ip maddr show dev ens0
#增加静态组播地址
ip maddr add 33:33:00:00:00:01 dev ens0
#删除静态组播地址
ip maddr del 33:33:00:00:00:01 dev ens0

neigh

查看邻居对象,即IPv4得ARP表

Bash
1
2
3
4
5
6
7
ip neigh
#显示ens0得ARP缓存
ip neigh show dev ens0
#
ip neigh add 192.168.1.1 lladdr 1:2:3:4:5:6 dev ens0
ip neigh del 192.168.1.1 dev ens0
ip neigh replace 192.168.1.1 lladdr 1:2:3:4:5:6 dev ens0

tuntap

Bash
1
2
3
4
5
6
7
8
ip tuntap add dev tap0 mod tap # 创建 tap 
ip tuntap add dev tun0 mod tun # 创建 tun
#删除 tap/tun 设备:
ip tuntap del dev tap0 mod tap # 删除 tap 
ip tuntap del dev tun0 mod tun # 删除 tun
#或
ip link del tap0
ip link del tun0

help

Bash
1
2
3
4
ip help
ip addr help
ip link help
ip neigh help

修改地址和链路属性

调整或查看路由

ARP管理

iptraf

nc

netcat,详细用法请man一下

Bash
1
2
3
4
5
6
7
8
#TCP服务端
nc -lv 192.168.1.1 1234
#TCP客户端
nc 192.168.1.1 1234
#UDP服务端
nc -luv 192.168.1.1 1234
#UDP客户端
nc -uv 192.168.1.1 1234

NET-TOOLS VS IPROUTE

net-tools命令 iproute命令
arp -a ip neigh
arp -v ip -s neigh
arp -s 192.168.1.1 1:2:3:4:5:6 ip neigh add 192.168.1.1 lladdr 1:2:3:4:5:6 dev ens0
arp -i ens0 -d 192.168.1.1 ip neigh del 192.168.1.1 dev ens0
ifconfig -a ip addr
ifconfig ens0 down ip link set ens0 down
ifconfig ens0 up ip link set ens0 up
ifconfig ens0 192.168.1.1 ip addr add 192.18.1.2 dev ens0
ifconfig ens0 netmask 255.255.255.0 ip addr add 192.18.1.2 dev ens0
ifconfig ens0 mtu 9000 ip link set ens0 mtu 9000
ifconfig ens0 192.168.1.2 ip addr add 192.18.1.2 dev ens0
netstat ss
netstat -neopa ss -neopa
netstat -g ip maddr
route ip route
route add -net 192.168.1.0 netmask 255.255.255.0 dev ens0 ip route add 192.168.1.1/24 dev ens0
route add default gw 192.168.1.1 ip route add default via 192.168.1.1

脚本

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#进程使用tcp连接统计
#! /bin/bash
ss -tnp > .ss.tmp
range=$1
start_pid=$(echo $range | cut -d'-' -f1)
end_pid=$(echo $range | cut -d'-' -f2)

# 输出表头
printf "%-8s %-10s %-10s %-10s %-12s %-12s %-12s %-8s %-12s %-10s %-10s %-10s\n" \
"PID" "ESTAB" "SYN-SENT" "SYN-RECV" "FIN-WAIT-1" "FIN-WAIT-2" "TIME-WAIT" "CLOSE" "CLOSE-WAIT" "LAST-ACK" "LISTEN" "CLOSING"

for ((pid=start_pid; pid<=end_pid; pid++)); do
    # 统计各种状态数量
    awk -v pid="$pid" '
        $0 ~ pid { state[$1]++ }
        END {
            printf "%-8s %-10d %-10d %-10d %-12d %-12d %-12d %-8d %-12d %-10d %-10d %-10d\n", \
            pid, state["ESTAB"], state["SYN-SENT"], state["SYN-RECV"], state["FIN-WAIT-1"], state["FIN-WAIT-2"], \
            state["TIME-WAIT"], state["CLOSE"], state["CLOSE-WAIT"], state["LAST-ACK"], state["LISTEN"], state["CLOSING"]
        }
    ' .ss.tmp
done

rm -rf .ss.tmp

丢包

网卡丢包

Bash
1
2
3
4
5
6
7
8
#查看网卡丢包收报统计
ethtool -S <interface> | grep -E 'rx.*miss|rx.*error|rx.*drop'

#查看丢包总数
ip -s -s link show dev <interface>

#检查总体丢包
cat /proc/net/dev | grep <interface>

使用dropwatch

dropwatch

程序丢包

Bash
1
2
3
4
5
6
7
8
netstat -s | grep -i "drop\|loss\|overflow"
#packets pruned from receive queue:由于 socket 接收队列溢出丢包。
#segments dropped due to lack of memory:由于内核内存不足丢包。
#TCPBacklogDrop:TCP 连接队列溢出。


ss -ltn
#关键指标:Recv-Q 列显示 socket 接收队列中的未处理数据包。