0%

linux网络相关命令

问题提问

先同问提问自己问题,去寻找答案。

  • 怎么找到自己的网关?

  • nslookup 在不同的场景为什么显示不一样?

  • telnet 命令的使用方法和作用,什么情况下都可以用吗,和 ping 的区别是什么?

1. route

route 命令是一个用于查看和操作 IP 路由表的命令行工具。你可以把它想象成电脑网络世界的“GPS”或“地图导航”。

路由表:告诉系统如何将数据包发送到目标地址。

  • Linux 推荐使用 ip route
  • macOS 仍使用 routenetstat

使用场景

1
2
3
4
5
6
7
netstat -rn  # mac
routen -n # liunx

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
  • Destination (目标地址):数据包要去的目的地网络或主机。0.0.0.0 是一个特殊地址,代表“任何网络”,也就是默认路由。
  • Gateway (网关):数据包的下一跳地址。如果 Gateway 是 0.0.0.0 (或 *),表示目标地址在本地网络,不需要经过路由器。
  • Genmask (子网掩码):与目标地址配合,定义了一个网络的范围。255.255.255.255 表示一个具体的主机,0.0.0.0 用于默认路由。
  • Flags (标志位):
    • U:路由是活动的 (Up)。
    • G:需要通过网关 (Gateway)。
    • H:目标是一个主机 (Host),而不是一个网络。
  • Metric (跃点数):路由的成本或优先级。操作系统会优先选择 Metric 值较小的路由。
  • Iface (接口):发送数据包所使用的网络接口,如 eth0 (有线网卡)、wlan0 (无线网卡)。

解读上面的例子:

  1. 第一条路由(默认路由):如果要去任何地方 (Destination: 0.0.0.0),都把数据包发给网关 192.168.1.1,并且从 eth0 接口出去。这就是你能够访问互联网的原因。
  2. 第二条路由:如果要去 192.168.1.0/24 这个网络(即 192.168.1.1192.168.1.254),因为网关是 0.0.0.0,所以是直接通过 eth0 接口发送到局域网内,不需要路由器转发。

2. traceroute

你可以把 traceroute 想象成一个网络路径的“侦察兵”或“快递追踪系统”。它的核心作用是:追踪一个数据包从你的电脑出发,到达目标服务器所经过的全部路径(即每一个路由器或“跳”)。

使用场景

  1. 诊断网络延迟和性能问题(最常用):
    • 当一个网站或服务访问很慢时,ping 命令只能告诉你最终的延迟很高,但无法告诉你问题出在哪一环。
    • traceroute 可以逐跳显示延迟。你可以清楚地看到是在你自己的局域网、你的 ISP(网络服务提供商)网络中,还是在目标服务器的网络中出现了高延迟或丢包。
  2. 发现网络路径问题:
    • 如果数据包在某一跳之后就无法继续前进(显示为 * * *),这通常意味着那一跳的路由器有问题,或者它后面的网络路径不通。
    • 它可以帮助你确定网络故障的具体位置。

如何工作的?

它的工作原理非常巧妙,主要利用了 IP 协议中的一个字段——TTL (Time To Live)。

  1. traceroute 首先发送一个 TTL 值为 1 的数据包。这个数据包到达路径上的第一个路由器时,路由器会将 TTL 减 1,变为 0。
  2. 当路由器发现 TTL 为 0 时,它会丢弃这个数据包,并向你的电脑发回一个 ICMP "Time Exceeded"(超时)的错误消息。
  3. 你的电脑收到这个消息后,就知道路径上的第一跳是哪个路由器,并记录下往返时间(RTT)。
  4. 接着,traceroute 发送一个 TTL 值为 2 的数据包。这个包会顺利通过第一跳路由器(TTL 变为 1),但在第二跳路由器那里 TTL 会变为 0。
  5. 第二跳路由器同样会发回一个超时消息,于是你的电脑就知道了第二跳的地址和延迟。
  6. 这个过程不断重复,每次将 TTL 值加 1,直到数据包最终到达目标主机。
  7. 目标主机收到数据包后,会返回一个不同的消息(通常是 ICMP "Port Unreachable"Echo Reply),traceroute 就知道追踪结束了。

具体例子

1
2
3
4
5
6
7
8
9
10
$ traceroute google.com

traceroute to google.com (172.217.160.78), 30 hops max, 60 byte packets
1 _gateway (192.168.1.1) 1.521 ms 1.890 ms 2.145 ms
2 10.0.0.1 (10.0.0.1) 8.123 ms 8.543 ms 9.011 ms
3 some.isp.router (202.97.xx.xx) 15.234 ms 15.567 ms 16.102 ms
4 * * *
5 another.router.net (210.78.xx.xx) 45.890 ms 46.123 ms 47.987 ms
...
10 172.217.160.78 (172.217.160.78) 150.123 ms 150.456 ms 150.789 ms
  • 第一列: 跳数(Hop number)。
  • 第二列: 路由器的名称和 IP 地址。
  • 后面三列: 发送三次数据包到该跳的往返时间(RTT)。这可以帮助你判断该跳的延迟是否稳定。
  • * * *: 表示在规定时间内没有收到来自该路由器的响应,可能的原因是路由器繁忙、丢包,或者路由器配置了防火墙阻止 ICMP 响应。

和 route 区别

route 命令来检查和设置你电脑的本地“交通规则”,告诉它数据包出门后第一步该怎么走(例如,去互联网找默认网关)。

traceroute 命令来诊断和追踪一个数据包在广阔的互联网上实际走的每一步路,找出哪里堵车了(延迟高)或者哪条路不通(丢包)。

3. ping

ping 是最常用的网络诊断工具,用于测试网络连通性和延迟。一些组织或服务提供商可能会禁用ICMP协议,以防止网络探测和潜在的攻击。

你可以把 ping 命令想象成潜水艇的“声纳”。潜艇发出一个声波(ping!),然后等待回声(pong!)。通过计算声波发出去和收到回声之间的时间,就能知道:

  1. 前面是否有障碍物(对方是否存在)。
  2. 障碍物有多远(延迟有多高)。

ping 命令做的就是类似的事情,它发送一个小的网络数据包(称为 ICMP Echo Request)到目标主机,然后等待对方返回一个响应包(ICMP Echo Reply)。

主要作用

  1. 测试网络连通性(最核心):
    • 这是 ping 最基本的功能。如果能 ping 通一个设备,就说明从你的电脑到那个设备之间存在一条有效的网络路径。
    • 它是你判断“网络断了”还是“某个网站的服务挂了”的第一步。
  2. 测量网络延迟(RTT):
    • ping 的输出会显示每个数据包的往返时间(Round-Trip Time, RTT),通常以毫秒(ms)为单位。
    • 这个时间可以告诉你网络连接的质量。玩在线游戏、进行视频通话时,低延迟(low ping)非常重要。
  3. 检查网络丢包率:
    • ping 命令结束后会有一个统计摘要,告诉你发送了多少包、收到了多少包、丢失了多少包。
    • 如果丢包率很高,说明网络连接不稳定,这会导致网页加载不全、视频卡顿、游戏掉线等问题。
  4. 测试 DNS 解析:
    • 你可以 ping 一个域名(如 ping google.com)。如果命令能够显示出对应的 IP 地址,就说明你的 DNS 解析是正常的。如果显示“找不到主机”,但 ping 它的 IP 地址却能通,那问题很可能出在 DNS 上。

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 指定次数
ping -c 5 google.com # 发送5个包后停止

# 指定间隔
ping -i 2 google.com # 每2秒发送一次

# 指定包大小
ping -s 1000 google.com # 发送1000字节的包

# 设置超时
ping -W 3 google.com # 等待响应超时3秒

# 不解析域名
ping -n 8.8.8.8 # 只显示IP地址

输出解释

1
2
3
4
5
6
7
8
PING google.com (142.250.71.206) 56(84) bytes of data.
64 bytes from fra16s48-in-f14.1e100.net (142.250.71.206): icmp_seq=1 ttl=114 time=10.5 ms
64 bytes from fra16s48-in-f14.1e100.net (142.250.71.206): icmp_seq=2 ttl=114 time=10.2 ms
64 bytes from fra16s48-in-f14.1e100.net (142.250.71.206): icmp_seq=3 ttl=114 time=11.1 ms
^C
--- google.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 10.200/10.600/11.100/0.387 ms
  • PING google.com (142.250.71.206): 显示了正在 ping 的域名和它解析出的 IP 地址。
  • 64 bytes from ...: 表示收到了一个来自目标的 64 字节的回复。
  • icmp_seq=1: 这是第一个数据包。
  • ttl=114: Time To Live,数据包在网络中还能经过多少个路由器。可以粗略判断对方的操作系统类型。
  • time=10.5 ms: 这是最重要的信息! 表示这次往返花费了 10.5 毫秒。
  • ^C: 我按下了 Ctrl + C 来停止。
  • 统计摘要:
    • 3 packets transmitted, 3 packets received, 0% packet loss: 发送3个,收到3个,丢包率为0%。非常健康。
    • rtt min/avg/max/mdev: 显示了最小、平均、最大和标准差延迟。avg(平均延迟)是最常看的值。

4. telnet

telnet 是一个用于测试 TCP 端口连通性的工具,虽然最初设计用于远程登录,但现在主要用于网络诊断。

telnet 的核心作用是:与远程主机的特定 TCP 端口建立一个连接,并进行交互。

1
2
3
4
5
6
7
# 测试端口连通性
telnet google.com 80
telnet 192.168.1.1 22
telnet localhost 3306

# 退出telnet
# 1. Ctrl + ] 2. 输入 quit

历史背景

  • telnet 最初被设计用来登录到远程的 Unix 服务器,就像你坐在那台服务器的终端前一样。

  • telnet 所有的通信(包括你输入的用户名和密码)都是以明文形式在网络上传输的! 这意味着任何在网络路径上的人都可以轻易地窃取你的登录凭据。

  • 因此,现在绝对不应该使用 telnet 来进行远程登录。它的这个功能已经被更安全的 SSH (Secure Shell) 完全取代。SSH 会对所有传输的数据进行加密。

  • 由于 telnet 有安全问题且功能有限,推荐使用以下替代工具:nc

    1
    2
    3
    4
    5
    6
    # 更强大的网络工具
    nc -zv google.com 80 # 测试端口
    nc -zv google.com 70-90 # 扫描端口范围

    # 发送数据
    echo "GET / HTTP/1.0\r\n\r\n" | nc google.com 80

什么情况不能用 telnet?

  • HTTPS/SSL 端口: telnet 能用于测试端口是否开放,无法完成一次真正的 HTTPS 通信。 无法处理 SSL 握手,使用 openssl 代替
  • UDP: telnet 只支持 TCP, 使用 nc 测试 UDP。
  • 需要认证的服务:例如 SSH 等加密协议。

5. host

host 是一个简单易用的 DNS 查询工具,用于将域名解析为 IP 地址,或进行反向 DNS 查询。host 命令的核心作用是:进行 DNS (Domain Name System) 查询。

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 基本查询
host google.com
host 8.8.8.8

# 指定 DNS 服务器
host google.com 8.8.8.8
host google.com 1.1.1.1


# -t: 指定查询类型
host -t A google.com # A 记录(IPv4)
host -t AAAA google.com # AAAA 记录(IPv6)
host -t MX google.com # 邮件服务器
host -t NS google.com # 域名服务器
host -t TXT google.com # TXT 记录
host -t CNAME www.google.com # 别名记录
host -t SOA google.com # 起始授权机构

# -a: 查询所有记录
host -a google.com

# -v: 详细输出
host -v google.com

# -W: 设置超时时间
host -W 5 google.com

# -4/-6: 强制使用 IPv4/IPv6
host -4 google.com
host -6 google.com

使用场景

  1. 网络故障排查:

    当你能 ping 8.8.8.8 但不能 ping google.com 时,几乎可以断定是 DNS出了问题。这时使用 host google.com 就能确认你的电脑是否能成功解析域名。如果失败,说明需要检查你的 DNS 服务器设置。

  2. 网站/服务部署验证:

    你刚给自己的网站 www.mydomain.com 添加了一条新的 A 记录,指向你的新服务器 IP。你可以用 host www.mydomain.com 来检查这条记录是否已经生效(DNS 记录在全球生效需要一定时间,称为“传播”)。

  3. 检查是否使用 CDN

    1
    2
    3
    # 不同 DNS 返回不同 IP 可能表示使用了 CDN
    host www.example.com 8.8.8.8
    host www.example.com 1.1.1.1

6. nslookup

nslookup 是一个用于查询DNS(域名系统)记录的命令行工具。它可以帮助你查找域名对应的IP地址,或者反向查找IP地址对应的域名。

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 基本查询
nslookup google.com

# 指定 DNS 服务器
nslookup google.com 8.8.8.8

# 反向查询
nslookup 8.8.8.8

# 查询特定记录类型
nslookup -type=MX gmail.com
nslookup -type=NS google.com
nslookup -type=TXT google.com

# 使用特定端口
nslookup -port=5353 google.com

# 调试模式
nslookup -debug google.com

输出解释

1
2
3
4
5
6
7
$ nslookup google.com
Server: 192.168.1.1 # DNS 服务器主机名/IP
Address: 192.168.1.1#53 # DNS 服务器地址和端口,53 是 DNS 服务使用的标准端口号。所有 DNS 查询默认都发送到目标服务器的 53 端口。

Non-authoritative answer: # 非权威应答(来自缓存)
Name: google.com # 查询的域名
Address: 142.250.185.78 # 解析得到的 IP 地址

和 host 区别是什么

  • nslookup 由于其输出不如 host 清晰,且功能不如 dig 强大,在 Linux 上不被优先推荐
  • nslookup 一般全平台支持

不同网络下显示不一样

根本原因是你使用的 DNS 解析服务器不同,你在公司问路,问的是前台;你在家里问路,问的是小区保安。

很多公司为了安全和管理,会配置内外网使用不同的 DNS 解析。

  • 在公司内网:你查询 internal.service.com,DNS 返回一个内网 IP,如 10.0.0.50

  • 在公司外(家):你查询同一个域名 internal.service.com,公共 DNS 可能会返回一个公司的公网入口 IP,或者直接告诉你找不到这个域名。

7. curl

8. wget

9. nc

10. dig

11. 参考教程

可以加首页作者微信,咨询相关问题!