目录
- 零. 概要
- 一. ping
- 二. ip命令
- 2.1 ip address
- 2.2 ip route
- 2.3 ip neighbour
- 三. traceroute
- 四. DNS查询
- 4.1 nslookup
- 4.2 dig
- 五. ss 查看网络连接状态
零. 概要
⏹在Linux系统中有2套用于网络管理的工具集
net-tools
- 早期网络管理的主要工具集,缺乏对 IPv6、网络命名空间等现代特性的支持,可能存在与新内核不兼容的问题。
- 在新版的Ubuntu系统中已经不再默认安装,安装命令:
sudo apt install net-tools
- 适合处理简单网络任务,或用于维护旧系统。
iproute2
- 现代网络管理标准:支持新特性,如网络命名空间(namespace)、多路径路由等。
- 工具整合:单个工具(如 ip)涵盖多个功能(如管理 IP 地址、路由、链路等)。
- 性能优越:直接与内核交互,效率高。
- 跨协议支持:支持 IPv4、IPv6、SCTP、DCCP 等。
- Ubuntu系统内置
⏹两套工具集对比
功能 | iproute2 命令 | net-tools 命令 |
---|---|---|
查看接口信息 | ip link show | ifconfig |
启用/禁用接口 | ip link set dev eth0 up/down | ifconfig eth0 up/down |
查看 IP 地址 | ip addr show | ifconfig |
添加 IP 地址 | ip addr add 192.168.1.1/24 dev eth0 | ifconfig eth0 192.168.1.1 netmask 255.255.255.0 |
删除 IP 地址 | ip addr del 192.168.1.1/24 dev eth0 | 不支持直接删除 |
查看路由表 | ip route show | route -n |
添加/删除路由 | ip route add/del ... | route add/del ... |
查看套接字信息 | ss -tuln | netstat -tuln |
查看 ARP 表 | ip neigh show | arp -a |
⇓⇓⇓下图来源于网络工程师波哥⇓⇓⇓
一. ping
⏹测试网络连通性
- ping 会连续发送 ICMP 数据包,直到被手动中断(通常按 Ctrl+C)。
- 默认每秒发送一个数据包,显示结果包括往返时间(RTT)、数据包丢失率等信息。
ping www.example.com
选项 | 功能 | 示例 |
---|---|---|
-c <次数> | 指定发送数据包的数量 | ping -c 5 www.example.com |
-i <间隔> | 设置每次发送数据包的时间间隔(默认 1 秒) | ping -i 0.5 www.example.com |
-w <时间> | 设置最大等待时间(秒) | ping -w 10 www.example.com |
-s <大小> | 指定 ICMP 数据包的大小(字节) | ping -s 128 www.example.com |
-t <值> | 设置 IP 数据包的 TTL(Time to Live) | ping -t 64 www.example.com |
-4 | 强制使用 IPv4 | ping -4 www.example.com |
-6 | 强制使用 IPv6 | ping -6 www.example.com |
💥注意事项
一些服务器为了安全性可能禁用了 ICMP 协议(不响应 ping 请求),但这并不一定说明网络有问题。
二. ip命令
⏹在 Linux 系统中,ip 命令是 iproute2 工具集中最重要的网络管理工具之一,用于查看和管理网络接口、地址、路由等网络配置。
它功能强大,已经取代了许多传统的网络命令(如 ifconfig、route、arp 等)。
⏹基本用法
OPTIONS
:命令的全局选项(如 -4、-6,表示 IPv4 或 IPv6)OBJECT
:操作的网络对象(如 addr、link、route)COMMAND
:对象的具体操作(如 add、del、show)
ip [OPTIONS] OBJECT {COMMAND | help}
2.1 ip address
⏹查看所有接口的IP地址
# 完整写法
ip address show
# 简写
ip addr
⏹简洁的查看模式 → ip -br addr
- 第1列:接口名称
lo
:这是回环接口(loopback interface),用于本地通信,通常仅限于 127.0.0.1 地址。ens33
:这是物理或虚拟网络接口的名称,具体名字因系统和网络适配器配置而异。这里指的是一块以太网接口。
- 第2列:接口状态
UNKNOWN
:接口的状态未知,通常这是回环接口的默认状态。UP
:接口处于激活状态,能够发送和接收网络流量。
- 第3列:IP 地址信息
-
⭕IPv4 地址
127.0.0.1/8
:lo 的 IPv4 地址,是本地回环地址,子网掩码为/8
(即子网范围为 127.0.0.0 至 127.255.255.255)。192.168.118.136/24
:ens33 的 IPv4 地址,是局域网中的地址,子网掩码为/24
(即子网范围为 192.168.118.0 至 192.168.118.255)。
-
⭕IPv6 地址
::1/128
:lo 的 IPv6 地址,是本地回环地址,子网掩码为 /128,即只包含自身。fe80::20c:29ff:fe86:f265/64
:ens33 的 IPv6 链路本地地址(link-local address),作用域是当前链接,子网掩码为/64
。
-
⭕metric
- metric 是路由表中用于决定路径优先级的一个值。它在网络中主要用于路由选择。
多个路由指向同一个目标时,metric 值较低的路由优先被选择。 - 仅部分接口包含
- metric 100:网络接口的优先级,值越小优先级越高(通常用于路由选择时)。
- metric 是路由表中用于决定路径优先级的一个值。它在网络中主要用于路由选择。
-
apluser@ubuntu24-01:~$ ip -br addr
lo UNKNOWN 127.0.0.1/8 ::1/128
ens33 UP 192.168.118.136/24 metric 100 fe80::20c:29ff:fe86:f265/64
⏹仅显示 IPv4 地址
ip -4 addr
⏹仅显示 IPv6 地址
ip -6 addr
2.2 ip route
⏹ip route
是 Linux 系统中用于查看和管理路由表的命令。路由表决定了网络流量如何被发送到目标地址。通过 ip route
,可以
- 查看当前的路由信息
- 添加或修改路由规则
- 以及优化网络连接。
⏹基本概念
- ⭕
路由表
:- 路由表存储了从主机到不同网络的路径。
- 每条路由记录包含目标网络、网关(下一跳)、子网掩码、网络接口等信息。
- ⭕
默认网关
:- 如果目标地址不在任何已知的子网中,流量会被发送到默认网关。
⏹用法示例
默认路由
:将未知目标的流量发送到网关 192.168.118.2。子网路由
:通过本地子网 192.168.118.0/24 内的设备时,直接通过接口 ens33 发送,无需网关。网关路由
:网关 192.168.118.2 是通过 ens33 接口直接访问的设备。
主机当前网络配置正常,主要通过网关 192.168.118.2 和外部通信,同时能与 192.168.118.0/24 子网中的其他设备直接通信。
apluser@ubuntu24-01:~$ ip route show
default via 192.168.118.2 dev ens33 proto dhcp src 192.168.118.136 metric 100
192.168.118.0/24 dev ens33 proto kernel scope link src 192.168.118.136 metric 100
192.168.118.2 dev ens33 proto dhcp scope link src 192.168.118.136 metric 100
default
:表示默认路由,当目标地址无法匹配其他更具体的路由时,流量将使用此路由。via 192.168.118.2
:表示流量会通过网关(网关 IP 地址是192.168.118.2
)发送。dev ens33
:指定通过网络接口ens33
发送数据。proto dhcp
:表示这条路由是通过 DHCP 动态分配的。src 192.168.118.136
:表示默认使用源地址(本机的IP地址)192.168.118.136
。metric 100
:表示路由的优先级,数值越小优先级越高。这里100
是一个默认的路由优先级值。- 👉这是系统的默认路由,所有不匹配其他路由表规则的流量会通过网关
192.168.118.2
,从接口ens33
发出。👈
default via 192.168.118.2 dev ens33 proto dhcp src 192.168.118.136 metric 100
192.168.118.0/24
:表示这是一个子网路由,负责192.168.118.0
到192.168.118.255
之间的地址。dev ens33
:数据包通过ens33
接口发送。proto kernel
:表示这是由内核自动添加的路由。scope link
:路由的作用域是本地链路(即只能到达本地子网中的设备)。src 192.168.118.136
:本接口的源地址是192.168.118.136
。metric 100
:路由优先级是 100。- 👉这是本地子网的路由,流量目标是同一子网的设备时,直接通过
ens33
接口发送,不需要经过网关。👈
192.168.118.0/24 dev ens33 proto kernel scope link src 192.168.118.136 metric 100
192.168.118.2
:表示这是到网关192.168.118.2
的路由。dev ens33
:通过ens33
接口发送数据。proto dhcp
:这条路由由 DHCP 动态配置。scope link
:作用域是本地链路。src 192.168.118.136
:使用192.168.118.136
作为源地址。metric 100
:路由优先级是 100。- 👉这是到网关设备
192.168.118.2
的路由,通过接口ens33
发出数据。👈
192.168.118.2 dev ens33 proto dhcp scope link src 192.168.118.136 metric 100
2.3 ip neighbour
⏹ip neighbour
命令用于显示当前网络接口的邻居表(ARP 表或 NDP 表),它列出了本机网络接口与其直接连接的设备之间的映射关系,同时显示了与这些网络设备的通信状态。
例如:
- IP 地址
- 设备接口
- 硬件地址(MAC 地址)
- 网络邻居条目的状态
ip neighbour
是现代系统中管理邻居条目的工具,替代了传统的 arp
命令。
⏹示例
apluser@ubuntu24-01:~$ ip neighbour
192.168.118.2 dev ens33 lladdr 00:50:56:ea:9e:5f STALE
192.168.118.1 dev ens33 lladdr 00:50:56:c0:00:08 REACHABLE
192.168.118.254 dev ens33 lladdr 00:50:56:ec:2c:8b STALE
192.168.118.2
:网络邻居设备的 IP 地址。dev ens33
:表示邻居设备是通过网络接口ens33
访问的。lladdr 00:50:56:ea:9e:5f
:邻居设备的硬件地址(MAC 地址)。STALE
:表示邻居状态为“陈旧”,系统已经知道该设备的 MAC 地址,但最近没有与其通信。如果需要时,系统会重新验证它。
192.168.118.2 dev ens33 lladdr 00:50:56:ea:9e:5f STALE
192.168.118.1
:邻居设备的 IP 地址。dev ens33
:通过接口ens33
访问。lladdr 00:50:56:c0:00:08
:设备的 MAC 地址。REACHABLE
:表示邻居设备是可达的,最近系统已经成功与其通信。
192.168.118.1 dev ens33 lladdr 00:50:56:c0:00:08 REACHABLE
三. traceroute
traceroute
是一个网络诊断工具,用于显示从本地主机到目标主机之间的路径及经过的所有中间节点(路由器或设备)。
该命令会显示中间的路由器或网关,并提供每一跳的延迟信息,是排查网络问题和了解网络路径的重要工具。
-I
:使用 ICMP Echo 请求(类似 ping),代替默认的 UDP 数据包。- 如果 traceroute 显示
*
,可能是以下原因- 路由器禁用了 ICMP 响应。
- 数据包被防火墙阻拦。
- TTL 已到达但没有返回响应。
- 遇到防火墙阻拦时,可以尝试
-T
使用 TCP 探测。
root@ubuntu24-01:~# traceroute -I www.baidu.com
traceroute to www.baidu.com (119.63.197.151), 30 hops max, 60 byte packets
1 _gateway (192.168.118.2) 0.079 ms 0.046 ms *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * * *
15 119.63.197.151 (119.63.197.151) 7.820 ms 7.796 ms 7.772 ms
四. DNS查询
⏹nslookup
和dig
是linux系统中用于查询DNS的命令行工具。
特性 | nslookup | dig |
---|---|---|
复杂度 | 简单,适合快速查询 | 功能强大,适合高级用户 |
输出详细信息 | 较少,仅限查询结果 | 输出完整的 DNS 消息结构 |
记录类型支持 | 支持,但不如 dig 强大 | 支持多种记录类型和自定义查询 |
脚本支持 | 较弱,输出格式固定 | 较强,支持自定义输出 |
可用性 | 默认内置于 Windows 和 Unix | 通常需要额外安装(如 bind-utils ) |
4.1 nslookup
- nslookup 是一个命令行工具,用于查询域名系统(DNS)记录。
- 允许你检查域名到 IP 地址的解析、IP 地址到域名的反向解析,以及其他 DNS 信息。
apluser@ubuntu24-01:~$ nslookup www.google.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: www.google.com
Address: 142.250.199.100
Name: www.google.com
Address: 2404:6800:4004:823::2004
4.2 dig
⏹dig
(Domain Information Groper)是一个功能更强大的工具,用于查询 DNS 信息。它能显示更多详细信息,比如
- DNS 消息头、
- TTL、
- 查询时间
是网络管理员的首选工具。
⏹dig命令示例
apluser@ubuntu24-01:~$ dig www.google.com
; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44293
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.google.com. IN A
;; ANSWER SECTION:
www.google.com. 5 IN A 172.217.31.132
;; AUTHORITY SECTION:
google.com. 5 IN NS ns1.google.com.
google.com. 5 IN NS ns3.google.com.
google.com. 5 IN NS ns2.google.com.
google.com. 5 IN NS ns4.google.com.
;; ADDITIONAL SECTION:
ns1.google.com. 5 IN AAAA 2001:4860:4802:32::a
ns2.google.com. 5 IN AAAA 2001:4860:4802:34::a
ns3.google.com. 5 IN AAAA 2001:4860:4802:36::a
ns4.google.com. 5 IN AAAA 2001:4860:4802:38::a
ns1.google.com. 5 IN A 216.239.32.10
ns2.google.com. 5 IN A 216.239.34.10
ns3.google.com. 5 IN A 216.239.36.10
ns4.google.com. 5 IN A 216.239.38.10
;; Query time: 8 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Sun Dec 22 11:40:12 UTC 2024
;; MSG SIZE rcvd: 307
⏹只想获取查询结果而忽略其他信息
apluser@ubuntu24-01:~$ dig +short www.google.com
142.251.42.132
五. ss 查看网络连接状态
ss
是 Linux 系统上一个强大的命令行工具,用于显示套接字统计信息。
它的功能类似于传统的 netstat
,但性能更高,且支持更多功能。
ss
是 iproute2
工具包的一部分,适用于查看网络连接状态、套接字信息和网络统计数据。
-l
:仅显示监听的套接字。-t
:显示 TCP 连接。
apluser@ubuntu24-01:~$ ss -lt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.53%lo:domain 0.0.0.0:*
LISTEN 0 4096 127.0.0.54:domain 0.0.0.0:*
LISTEN 0 4096 *:ssh *:*
apluser@ubuntu24-01:~$
⏹仅显示状态为已建立的 TCP 连接
ss -t state ESTABLISHED
⏹配合 watch 命令实时监控
watch -n 1 ss -t state ESTABLISHED
⏹显示所有源端口为 80 的 TCP 连接
- sport(source port):表示源端口。
ss -t sport = :80
⏹显示所有目标端口为 443 的 TCP 连接
- dport(destination port):表示目标端口。
ss -t dport = :443