分析工具¶
两个主要用于网络管理的软件包
iproute2 是更现代、更一致、功能更强大的工具集,逐渐成为标准
而 net-tools 已经不再维护,逐渐被淘汰
- net-tools
- ifconfig 用于配置和显示网络接口信息的命令,启用或禁用接口、设置 IP 地址、查看接口统计信息等
- iptunnel 用于创建和管理隧道,如 IP in IP 或 GRE 隧道
- route 用于查看和修改IP路由表,添加或删除路由条目,控制数据包的目的地路由
- netstat 显示网络连接、路由表、接口统计、伪装连接和多播成员资格等信息
- arp 用于操作或查看 ARP 缓存
- iproute2
- ip 替代 ifconfig, route, iptunnel 等命令
- ss 替代 netstat,提供更详细和更快速的输出
- tc Traffic Control,用于控制和配置网络流量,包括队列、分类和流量整形。
- bridge:用于设置和管理网络桥接设备。
- ip rule 和 ip route:用于高级路由配置和策略路由。
net-tools¶
ifconfig¶
if, interface,网络接口,即网卡
ifconfig # 查看所有网卡
ifconfig eth0 ip_new [netmask 子网掩码] # 修改ip和子网掩码
ifconfig eht0 up/down # 启用或停用网卡,等价于:ifup/ifdown eth0
返回字段解析
# 第一行
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> # net_device flags(网络设备状态标识)
# BROADCAST 表示这个网卡有广播地址,可以发送广播包
# MULTICAST 表示网卡可以发送多播包
# UP 表示网卡处于启动的状态
# LOWER_UP 表示L1是启动的,也即网线插着呢
mtu 1500 # 最大传输单元1500字节(这是以太网的默认值)
# MAC头后面的正文(包括IP头、TCP头、HTTP头)不允许超过1500个字节,存不下则分片传输
qdisc pfifo_fast # queueing discipline(排队规则)
# 内核通过某个网络接口发送数据包时,需要按照这个排队规则将数据包加入队列
state UP
# 第二行
link/ether 00:15:5d:21:b9:ea brd ff:ff:ff:ff:ff:ff # MAC地址
# 第三行
xxx.xx.xxx.x scope global eth0 # ethernet 以太网卡,范围global,对外访问
127.0.0.1/8 scope host lo # loopback 环回接口,范围host,供本机相互通信
route¶
# 查看网关(路由)
# 默认每条ip会反解为域名,所以会较慢,-n参数不解析主机名
route -n
route del default gw 10.211.55.1 # 删除默认网关(0.0.0.0)
route add default gw 10.211.55.1 # 增加默认网关
route add -host 10.0.0.1 gw 10.211.55.2 # 指定主机添加明细路由
route add -net 102.168.0.0 netmask 255.255.255.0 gw 10.211.55.3 # 指定网段添加明细路由
arp¶
# 查看ARP Cache
arp -a # windows
# 动态类型是通过广播获取然后缓存的
# 否则就是静态的,比如手动添加
arp -s IP MAC
netstat¶
# 当前所有连接的详情
netstat -alepn | grep :80 # 查看哪个进程绑定到了80端口
'
-a 列出所有连接、监听、socket信息
-t 仅列出tcp包
-u 仅列出udp包
-l LISTEN 状态的
-p 列出端口对应的进程
-n 将域名显示为ip地址
-c 持续输出
'
# 返回信息,可以清楚地看到一条 TCP 连接的四元组
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:28036 0.0.0.0:* LISTEN 34965/sshd: /usr/sb # sshd 远程控制服务
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 25963/systemd-resol
tcp6 0 0 :::28036 :::* LISTEN 34965/sshd: /usr/sb
iproute2¶
ip¶
ip addr # 或者:ip address
"""
1: lo(环回接口loopback): <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo # scope host 表示这张网卡只可供本机互相通信
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0(第一块网卡): <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP group default qlen 1000
# <有广播地址(可以发送广播包),可以发送多播包,启动状态,L1是启动的(网线插着呢)> 最大传输单元为1500(以太网默认值)
link/ether aa:aa:00:10:3f:d8 brd ff:ff:ff:ff:ff:ff
altname enp0s18
altname ens18
inet 23.105.203.144/21 metric 100 brd 23.105.207.255 scope global eth0
valid_lft forever preferred_lft forever # scope global 表示这张网卡对外接收所有的包
inet6 fe80::a8aa:ff:fe10:3fd8/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq state UP group default qlen 1000
link/ether ba:aa:00:10:3f:d8 brd ff:ff:ff:ff:ff:ff
altname enp0s19
altname ens19
inet 169.254.254.254/32 brd 169.254.254.254 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::b8aa:ff:fe10:3fd8/64 scope link
valid_lft forever preferred_lft forever
"""
ip route
SS¶
ss 的参数与 netstat 基本相同
ss -ntpl
"""
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=25963,fd=14))
LISTEN 0 128 0.0.0.0:28036 0.0.0.0:* users:(("sshd",pid=34965,fd=3))
LISTEN 0 128 [::]:28036 [::]:* users:(("sshd",pid=34965,fd=4))
"""
网络故障排除¶
查看 DNS 解析
nslookup www.baidu.com
"""
Server(DNS服务器): 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
www.baidu.com canonical name(别名) = www.a.shifen.com.
www.a.shifen.com canonical name = www.wshifen.com.
Name: www.wshifen.com
Address: 104.193.88.123
Name: www.wshifen.com
Address: 104.193.88.77
"""
显示当前系统中的所有网络设备,即网卡列表
ip addr # iproute2
ifconfig # net-tools
ipconfig /all # windows
主机问题¶
检测网络是否畅通,网络丢包率、网络延迟等信息
主要使用 ping
工具,它基于 ICMP 协议
不可达的原因通常有:IP 对应的主机关机、断线、拒绝响应 ICMP 协议、防火墙拦截了 ICMP 协议等
ping [-c 2] www.baidu.com
'
-c n 限制尝试次数
-i n 设置时间间隔
可接 host_name 或 ip
'
# 返回
# 基础信息
PING www.wshifen.com (104.193.88.77) 56(84) bytes of data.
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=1 ttl=55 time=7.82 ms # TTL(time to live)表示两个IP之间传输的时间
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=2 ttl=55 time=7.27 ms
# 统计信息
--- www.wshifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms # 丢包率、网络延迟
rtt min/avg/max/mdev = 7.266/7.544/7.822/0.278 ms # 最小/平均/最大时间
可以追踪路由,查看每一跳
traceroute
测试本机到目标主机经过哪些路由,基于 ICMP 协议
traceroute -w 1 www.baidu.com
"""
-w time 如果超时最多等待(wait)几秒
1 * * *
2 96.44.162.49 0.779ms 0.611ms 0.679ms
3 69.12.70.232 0.379ms 0.696ms 0.252ms
4 63.218.212.169 0.728ms 0.654ms 0.642ms
5 63.218.178.58 7.766ms 7.656ms 7.677ms
6 63.219.23.98 8.155ms 8.128ms 8.126ms
7 63.219.23.98 7.844ms 7.780ms 7.667ms
8 104.193.88.13 10.636ms 8.459ms 8.530ms
9 * * *
10 * * *
"""
mtr 查看数据包是否丢失比 traceroute 信息更清晰,而且不需要额外安装
mtr www.baidu.com
端口问题¶
检查当前主机到目标主机某端口是否畅通
telnet www.baidu.com 80
"""
Trying 104.193.88.123...
Connected to www.wshifen.com. # 表示畅通,否则返回端口不可达
Escape character is '^]'.
^] # 使用ctrl+右方括号退出
telnet> quit # 然后再输入quit关闭
Connection closed.
"""
端口如果能通,可以抓包分析数据包
tcpdump -i any -n port 80
tcpdump -i any -n host 10.0.0.1 and port 80 -w /tmp/filename
"""
-i any 抓取所有网卡的数据包
-n 如果有域名,解析为ip形式显示
host 10.0.0.1 抓取流向指定主机的数据
port 80 抓取流向指定端口的数据
-w path 存储到文件
"""
数据包如果也没问题,检查服务监听范围
使用 netstat 或 ss 查看 IP 地址和端口的使用情况
也可以结合 lsof 一起使用
# 查看哪个进程占用了8080接口
netstat -a | grep 8080
# 或
lsof -i :8080
lsof /var/run/docker.sock # 查看谁打开了这个文件