网络篇 | DNS 查询利器:掌握 ping/host/nslookup/dig 命令

网络篇 | DNS 查询利器:掌握 ping/host/nslookup/dig 命令

NETWORK | DNS Query tool: The ping/host/nslookup/dig command to solve network puzzles

  • Title: 网络篇 | DNS 查询利器:掌握 ping/host/nslookup/dig 命令,解开网络迷局
  • Tag: DNSLinuxpinghostnslookupdig
  • Author: Tacks
  • Create-Date: 2023-10-30
  • Update-Date: 2023-10-30

0、大纲

0、Ref

0、Keywords

  • DNS (Domain Name System) - 域名系统
  • ICANN (Internet Corporation for Assigned Names and Numbers) - 互联网名称与数字地址分配机构
  • IANA (Internet Assigned Numbers Authority) - 互联网号码分配机构
  • ttl (Time To Live) 数据包存活时间
  • ping (Packet InterNet Groper) 分组网间探测
  • ICMP (Internet Control Message Protocol) - 网络控制消息协议
  • ARP (Address Resolution Protocol) 地址解析协议
  • MAC (Media Access Control Address) 媒体访问控制地址
  • nslookup (name server lookup) 名称服务器查找
  • DHCP (Dynamic Host Configuration Protocol) 动态主机配置协议服务器

0、Prepare

  • 命令安装

通常 Linux 系统,默认会带 ping 命令,非常非常常用;但是 host/nslookup/dig 并不是都有,而这几个命令通常在 bind-utils 包中,你可以根据你的操作系统来选择合适的安装命令。

例如

Centos/RHEL:

    ```shell
    yum install bind-utils -y
    ```

Alpine:

    ```shell
    apk add bind-tools
    ```

1、DNS 是什么

DNS 即域名系统,全称是 Domain Name System 。它作为 将 域名IP地址 相互映射的一个分布式数据库,类似给 IP 起一个名字,能够允许用户使用域名更方便的访问网站,而不是难以记忆的 IP 地址。

DNS 位于 应用层, 是一个典型的 客户端-服务器应用, 客户端发起域名查询请求,服务端对请求进行应答。

DNS 一般采用 UDP 作为传输层协议, (TCP 也行) ,端口号是 53 。请求报文和应答报文均作为数据,搭载在 UDP 数据报中进行传输。

1.1 DNS 的由来

IP的分配

IP 地址分配由互联网数字分配机构 IANA (Internet Assigned Numbers Authority)负责。 IANA 负责全球IP地址空间的分配和管理。然后,IANA 将IP地址块分配给五个地区 互联网注册管理机构(Regional Internet Registries,简称RIR)

  • 非洲地区 AFRINIC
  • 亚太地区 APNIC
  • 美洲地区 ARIN
  • 拉丁美洲及加勒比地区 LACNIC
  • 欧洲地区 RIPE NCC

目前正在使用的互联网协议 (IP) 地址有两种类型:IP 版本 4 (IPv4) 和 IP 版本 6 (IPv6)

  • IPv4 协议
    • 始于 1983 年
    • IPv4 地址是 32 位数字
    • 通常以 点分十进制 表示法表示为 4 个八位字节(例如 192.0.2.53
  • IPv6 协议
    • 始于 1999 年
    • IPv6 地址是 128 位数字
    • 通常使用 十六进制 字符串表示(例如 2001:0db8:58:33::29

域名的分配

域名分配由 互联网名称与数字地址分配机构 ICANN (Internet Corporation for Assigned Names and Numbers)负责。ICANN 是全球负责协调和管理互联网的非营利组织, 成立于 1998 年。ICANN 通过多个顶级域名注册管理机构(Domain Name Registries)和注册商(Registrars)来管理和分配顶级域名(例如.com、.org、.cn等)。

DNS

DNS 的发展始于 1980 年左右,由保罗·摩兰(Paul Mockapetris)在 1983年设计和开发。他提出了一种分布式的命名系统,该系统将域名层次结构组织为树状结构,并使用不同级别的域名服务器来管理域名解析。这些域名服务器相互协作,通过递归查询迭代查询的方式,将域名转换为对应的 IP 地址。

1.1 DNS 域名结构

DNS 域名结构包括多个层级,从右向左逐级解析。

1.2 DNS 服务器

DNS 实际上是一个分布式的数据库,域名的解析记录分布在世界各地的服务器上。

  • 根 DNS 服务器
  • 顶级域名服务器
  • 权威域名服务器
  • LocalDNS 本地域名服务器

请求过程

一次 DNS 查询行为一般由递归查询和迭代查询协作完成。但是通常都会有缓存,就不会每次都这样请求

  • 设备 -> LocalDNS 服务器(递归查询)
    • 有缓存,直接返回 IP
  • LocalDNS 服务器 -> DNS 根服务器(迭代查询)
    • LocalDNS 服务器 <- DNS 根服务器(返回顶级域名服务器的地址)
  • LocalDNS 服务器 -> DNS 顶级域名服务器(迭代查询)
    • LocalDNS 服务器 <- DNS 顶级域名服务器(返回权威域名服务器的地址)
  • LocalDNS 服务器 -> DNS 权威域名服务器(迭代查询)
    • LocalDNS 服务器 <- DNS 权威域名服务器(返回 ip)
  • 设备 <- LocalDNS 服务器(返回 ip)

Root DNS 根服务器

全球只有 13 个,编号从 a.root-servers.net 一直到 m.root-servers.net ,你也可以使用命令 dig NS . +short 查看,也可以访问 https://root-servers.org/ 查看。

TLD DNS 顶级域名服务器

顶级域名服务器是指管理特定顶级域(如.com、.org、.cn等)的服务器。

每个顶级域都有自己的顶级域名服务器负责管理其下级域名的DNS解析。例如,.com顶级域名服务器会管理所有以.com结尾的域名。

DNS 权威域名服务器

权威域名服务器(Authoritative DNS Server)是存储并管理特定区域内所有域名的服务器。

当顶级域名服务器返回权威域名服务器的信息时,权威域名服务器将根据请求提供该域名下的DNS解析结果,一般来说就是每个公司的官网,都有一个对应的权威域名。

LocalDNS 本地DNS服务器

cat /etc/resolv.conf 这个文件一般在 DHCP 的时候,自动生成。这个文件中的 IP ,可以是内网的,当然也可以是外网IP。网上也会有一些提供 DNS 服务器的 IP ,例如 谷歌的 8.8.8.8,国内的 114.114.114.114 都可以填进去。会按照顺序去请求 LocalDNS 服务器 获取 域名的 IP。

LocalDNS 本身不具备真正的解析域名的功能

主要作用:

  • 代替用户参与域名解析
  • 缓存域名的查询记录

1.3 DNS 记录类型

DNS 服务器有自己的域文件(zone file),zone file 是由多个记录组成的,每一个记录就被称为资源记录。

假如你了一个域名,需要绑定到对应的 ip 上来提供 web 服务,或者要提供其他服务,这个时候域名的销售方会让你选择解析的类型,大概有下面几种类型。

  • A(Address Record)
    • 将域名映射到IPv4地址
  • AAAA(IPv6 Address Record)
    • 将域名映射到IPv6地址
  • CNAME (Canonical Name Record)
    • 创建一个别名,将一个域名指向另一个域名
    • CNAME 记录常用于将子域名指向主域名或实现域名的重定向
    • 经常购买一个 www.example.xxx 域名,就能自己设置多个别名,这样就能 Nginx 配置多个子站点,但实际上还是一个 IP、一个域名
  • MX (Mail Exchanger Record)
    • 指定接收域名邮件的邮件服务器
    • MX 记录用于指定邮件服务器的优先级和地址,以确保电子邮件能够正确传送到目标域名
  • TXT(Text Record)
    • 提供与域名相关的任意文本信息
    • TXT记录通常用于验证域名所有权、配置SPF(Sender Policy Framework)等
  • NS (Name Server Record)
    • 指定该域名由哪个DNS服务器来进行解析
    • NS记录用于指定域名的权威DNS服务器,负责处理该域名的解析请求
  • PTR(Pointer Record)
    • 用于反向DNS解析,将IP地址解析为域名
  • SRV (Service Record)
    • 指定提供特定服务的服务器的位置
    • SRV记录通常用于指定域名提供的各种服务(如邮件、VoIP等)所在的服务器
  • SOA(Start of Authority Record)
    • 指定域名的权威DNS服务器和域名参数信息。
    • SOA记录包含了域名的基本设置,如域名管理员的电子邮件地址、域名的刷新时间等。

2、Ping

ping 命令可谓是我们日常中判断网络是否通常的最常用的利器之一。 工作在网络层,它通过发送 ICMP ECHO_REQUEST 数据包到网络主机(send ICMP ECHO_REQUEST to network hosts),并显示响应情况。

没想到,属实没想到 ping 的全称是 Packet InterNet Groper,也就是 分组网间探测。 之前一直用这个命令,但是今天才知道 本名 。哈哈哈哈哈哈~

2.1 ping 域名和 ping IP 的区别

  • 使用 域名

当你使用 ping 命令加上一个域名作为参数时,例如 ping www.weibo.com ,操作系统会首先通过 DNS 解析将域名转换为对应的 IP 地址,然后发送 ICMP 请求到该 IP 地址。

这意味着 ping 命令会先解析域名,然后才能发送请求进行网络连通性测试。 可以看到下面的实例。

  • 使用 IP

当你使用 ping 命令加上一个 IP 地址作为参数时,例如 ping 49.7.37.74,操作系统会直接发送 ICMP 请求到指定的 IP 地址,而无需进行 DNS 解析。

这种情况下,你已经知道了目标主机的 IP 地址,因此不需要解析域名,响应速度会快一些。

~ # ping www.weibo.com
PING www.weibo.com (49.7.37.74): 56 data bytes
64 bytes from 49.7.37.74: seq=0 ttl=37 time=12.139 ms
64 bytes from 49.7.37.74: seq=1 ttl=37 time=6.904 ms
64 bytes from 49.7.37.74: seq=2 ttl=37 time=5.008 ms
^C
--- www.weibo.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 5.008/8.017/12.139 ms


~ # ping 49.7.37.74
PING 49.7.37.74 (49.7.37.74): 56 data bytes
64 bytes from 49.7.37.74: seq=0 ttl=37 time=4.520 ms
64 bytes from 49.7.37.74: seq=1 ttl=37 time=5.571 ms
64 bytes from 49.7.37.74: seq=2 ttl=37 time=4.242 ms
^C
--- 49.7.37.74 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 4.242/4.777/5.571 ms
  • 使用 网址

那你可能有疑问了,为什么不能直接 ping https://www.weibo.com/ 。 因为网址是由 HTTP 应用层协议解析的,而 ping 域名是由 DNS 解析获取 IP 的。 DNS 不会解析 HTTP 协议,所以并不能使用网站,不过你可以利用 curl 或者 wget 等命令来判断网址。

~ # ping https://www.weibo.com/
ping: bad port '//www.weibo.com/'

2.2 ping 使用文档

2.2.1 ping 文档

  • 命令格式
ping [参数] [主机名或IP地址]
  • 命令参数

不同平台的 ping , 可能参数略微不同,具体可以 ping -h 来看使用说明。

用法: 
    Usage: ping [-R] [-c count] [-i interval] [-s packetsize]  [-t ttl]  destination

选项:
    -R :记录路由过程
    -c count: 完成 count  ICMP 请求和响应
    -i interval: 间隔 interval 秒 后发送一次 ICMP 请求
    -s packetsize :设置发送数据包的大小
    -t ttl:  限制数据包存活时间,可以跳转路由的次数,如果超过就会认为 loss
    -q : 不显示指令执行过程,开头和结尾的相关信息除外

2.2.2 ping 使用

示例1 : 每隔 1 秒发送一次,共计发送 3 次
  • ping -c 3 -i 1 www.baidu.com
~ #  ping -c 3  -i 1 www.baidu.com
PING www.baidu.com (220.181.38.149): 56 data bytes
64 bytes from 220.181.38.149: seq=0 ttl=37 time=7.243 ms
64 bytes from 220.181.38.149: seq=1 ttl=37 time=6.800 ms
64 bytes from 220.181.38.149: seq=2 ttl=37 time=6.776 ms

--- www.baidu.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 6.776/6.939/7.243 ms
示例2 : 限制 ttl 为 20
  • ping -t 20 www.baidu.com
// 限制 20 ,可以正常响应
~ # ping -t 20 www.baidu.com
PING www.baidu.com (220.181.38.149): 56 data bytes
64 bytes from 220.181.38.149: seq=0 ttl=37 time=4.817 ms
64 bytes from 220.181.38.149: seq=1 ttl=37 time=4.663 ms
64 bytes from 220.181.38.149: seq=2 ttl=37 time=7.219 ms
64 bytes from 220.181.38.149: seq=3 ttl=37 time=13.474 ms
64 bytes from 220.181.38.149: seq=4 ttl=37 time=10.453 ms
64 bytes from 220.181.38.149: seq=5 ttl=37 time=5.443 ms
^C
--- www.baidu.com ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 4.663/7.678/13.474 ms



// 限制 10, 全部丢失
~ # ping -t 10 www.baidu.com
PING www.baidu.com (220.181.38.149): 56 data bytes
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 0 packets received, 100% packet loss
示例3 :显示请求的路由过程
  • ping -R www.learnku.com
~ # ping -R www.learnku.com
PING www.learnku.com (117.50.36.69) 56(124) bytes of data. 
# 正在对 IP 地址为 117.50.36.69 的主机 www.learnku.com 进行 ping 请求,每个请求的数据包大小为 56 字节
64 bytes from 117.50.36.69 (117.50.36.69): icmp_seq=1 ttl=52 time=198 ms 
# 收到了来自 IP 地址为 117.50.36.69 的主机的回复。
# 其中 icmp_seq=1 表示这是第一个 ICMP 回显请求的序列号,ttl=52 表示回复的数据包的生存时间(Time to Live),time=198 ms 表示往返时延(Round-Trip Time)为 198 毫秒
RR:     Mycentos (10.100.100.189)  #// ==> [我的服务器内部IP]
# 路由器(Router)的跳数记录(Routing Record)
# 显示了 ping 请求经过的每个路由器的 IP 地址和主机名(如果有提供)。一般情况下,路由器会将这些信息添加到 ping 的回复中,以便追踪请求的路径
    9.31.119.85 (9.31.119.85)
    10.196.18.46 (10.196.18.46)
    0.0.0.0
    58.254.152.238 (58.254.152.238)
    120.80.137.110 (120.80.137.110)
    120.80.138.21 (120.80.138.21)
    219.158.19.226 (219.158.19.226)
    202.96.12.149 (202.96.12.149)

# 路径选择不同
# 数据包从源主机通过多个路由器传输到目标主机 , 每次请求可能会通过不同的路由器传输数据包
64 bytes from 117.50.36.69 (117.50.36.69): icmp_seq=2 ttl=52 time=538 ms
RR:     Mycentos (10.100.100.189)
    9.31.119.85 (9.31.119.85)
    10.196.18.46 (10.196.18.46)
    0.0.0.0
    58.254.152.238 (58.254.152.238)
    120.80.138.22 (120.80.138.22)
    120.83.0.66 (120.83.0.66)
    219.158.112.26 (219.158.112.26)
    202.96.12.149 (202.96.12.149)

64 bytes from 117.50.36.69 (117.50.36.69): icmp_seq=3 ttl=52 time=70.7 ms    (same route)
64 bytes from 117.50.36.69 (117.50.36.69): icmp_seq=4 ttl=52 time=59.2 ms    (same route)
64 bytes from 117.50.36.69 (117.50.36.69): icmp_seq=5 ttl=52 time=60.3 ms    (same route)
^C

# 当你按下 ctrl + c 表示结束请求
# 表示对 www.learnku.com 的 ping 统计信息开始显示
--- www.learnku.com ping statistics ---
# 说明发送了 5 个 ICMP 请求并成功接收到了全部 5 个回复,没有丢包。时间为 302 毫秒。
5 packets transmitted, 5 received, 0% packet loss, time 302ms
# 表示往返时延的统计信息。其中,rtt min 表示最小时延,rtt avg 表示平均时延,rtt max 表示最大时延,mdev(Mean Deviation)表示平均偏差。
rtt min/avg/max/mdev = 59.169/185.222/538.380/184.112 ms
示例4 :设置发送数据包的大小为100字节
  • ping -s 100 www.learnku.com
    • 一个 ICMP Echo 请求数据包的标准大小是 64 字节,其中包括 8 字节的 ICMP 头和 56 字节的数据
    • 如下显示 100(128) 表明:100 表示你设置的数据包大小,128 表示实际发送的数据包大小。这个增加的差值来自于 ICMP 头和 IP 头的额外开销
    • ICMP 头的大小为 8 字节,IP 头的大小为 20 字节,所以总共增加了 28 字节
~ # ping -s 100 www.learnku.com
PING www.learnku.com (117.50.36.69) 100(128) bytes of data.
108 bytes from 117.50.36.69 (117.50.36.69): icmp_seq=1 ttl=248 time=41.4 ms
108 bytes from 117.50.36.69 (117.50.36.69): icmp_seq=2 ttl=248 time=41.4 ms
108 bytes from 117.50.36.69 (117.50.36.69): icmp_seq=3 ttl=248 time=41.3 ms
108 bytes from 117.50.36.69 (117.50.36.69): icmp_seq=4 ttl=248 time=41.3 ms
^C
--- www.learnku.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 12ms
rtt min/avg/max/mdev = 41.251/41.334/41.433/0.215 ms

2.3 ICMP 协议

❓ 可能你也有些好奇,每次 ping 到底在发什么东西。
🌐 这就来看看 ICMP 协议,即:网络控制消息协议(Internet Control Message Protocol),属于 TCP/IP 协议族,工作在 网络层

通过 ping 的用途,我们也能理解 ICMP 的作用。 ICMP 报文通常被用于在 IP主机路由器 之间传递控制信息,例如 网络是否可达、主机是否可达、路由是否有效 等 ,所以 ICMP 报文本身也不会携带用户想要传输的数据,主要就是来排查网络的。

2.3.1 ICMP 的作用

  • 排查网络是否可达
  • 排查主机是否可达
  • 排查路由是否可达

2.3.2 ICMP 的报文格式

ICMP 报文,也是 IP 数据包的一种,自然包含 IP 头部,默认 20 字节,以及数据部分。

[首部] + [数据部分] ======> IP 报文
            |
            |
___________ICMP_______________
[类型]---[代码]---[校验和] 32 位
--------------------------
[     ICMP 报文类型      ] 32 位
--------------------------
[     ICMP 数据部分      ] 取决于报文类型
___________ICMP_______________

2.3.3 ICMP 的报文类型

  • 差错报文
    • 3 => 终点不可达
    • 4 => 源点抑制
    • 5 => 改变路由
    • 11 => 超时
    • 12 => 参数问题
  • 询问报文
    • 8 => Echo 请求
    • 0 => Echo 回答
    • 13 => Timestamp 请求
    • 14 => Timestamp 回答

2.4 ARP 协议

❓ 那么当我们通过 DNS 知道某个域名对应的 IP ,那么当我们使用 ping 发送 ICMP 报文的时候,它又是如何找到对应主机的 MAC 物理地址。 实际上就是 ICMP 报文从 网络层 => 数据链路层的阶段。
🌐 这就要有请 ARP 协议, ARP (Address Resolution Protocol) 地址解析协议 是一种用于根据主机的IP地址获取物理地址 MAC 地址 的协议。

ARP 协议工作在,网络层和数据链路层的,连接第二层和第三层。

2.4.1 为什么要扯到 ARP 协议

  • IP => MAC ,就是 ARP 的作用,也是网络中数据传输重要的一环

在局域网中,当主机或其它三层网络设备,例如我们的 ping 有数据要发送给另一台主机或三层网络设备时,需要知道对方的 IP 地址。但是仅有 IP地址 是不够的,因为 IP报文 必须封装成才能通过物理链路层发送,因此发送方还需要知道接收方的 MAC 物理地址, 这就需要一个通过IP地址获取MAC物理地址的协议,以完成从 IP地址 到 MAC地址 的映射。

2.4.2 简单复习 MAC 物理地址

📬 MAC (Media Access Control Address) 媒体访问控制地址,可以理解位网络设备的身份证号。MAC 地址也被称为 LAN 地址、物理地址、以太网地址等。

  • MAC 的格式

MAC 地址是使用十六进制表示的。每个 MAC 地址由 12 个十六进制数字符号组成,通常用冒号或者连字符分隔开来。每个十六进制符号,表示4个二进制位,所以共计 48 位, 6 字节。

例如:

  • 01:23:45:67:89:AB
  • 01-23-45-67-89-AB

特殊的广播地址:

  • FF-FF-FF-FF-FF-FF

  • MAC 的分配

MAC 地址由 IEEE 统一管理与分配。 IEEE 的注册管理机构 RA 分配给厂商,分配时只分配前三个字节,后三个字节由各厂商自行分配。

理论上,一个网络设备中的网卡上的 MAC 地址是永久的。不同的网卡生产商从 IEEE 那里购买自己的 MAC 地址空间,也就是前 3 字节由 IEEE 统一管理,保证不会重复。而后 3 字节,由各家生产商自己管理,同样保证生产的两块网卡的 MAC 地址不会重复。

2.4.3 如何查看 ARP 缓存表?

🕳 真是无处不在的缓存,毕竟通过广播寻址费时间,如果你设备本身就有 IP 和 MAC 的映射缓存,岂不是快一些。 每一个局域网内,每个网络设备都会维护自己的 ARP 高速缓存表。

ARP 表

  • <IP,MAC,TTL> 三元组的形式存储

Linux 中,可以采用 arp -n 查看当前 ARP 缓存的映射关系 , Windows 下 采用 arp -a 查看。

arp 命令

  • 内容
    • Address: IP 地址
    • HWtype: 硬件类型,通常是”ether”表示以太网。
    • HWaddress: MAC地址
    • Flags: 标志位,常见的标志位有”C”表示已经完成ARP解析
    • Mask: 子网掩码
    • Iface: 接口名称
~ # arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.1              ether   00:11:22:33:44:55   C                     eth0
192.168.0.2              ether   66:77:88:99:aa:bb   C                     eth1
192.168.0.3              ether   cc:dd:ee:ff:00:11   C                     eth2

2.4.4 ARP 具体是如何寻址呢?

前面铺垫这么久,也该来了解一下大致的寻址过程吧。

大概分别两种情况:

  • 同一个局域网内 MAC 寻址
  • 从同一个局域网内到另一个局域网内的 MAC 寻址

【注意】 ARP 是解决同一个局域网上的主机或者路由器的 IP 地址和 MAC 的映射

ARP报文

ARP 分组报文有两类,它们具有相同的格式,均包含了发送和接收的 IP 地址、发送和接收的 MAC 地址

  • 一种是查询分组
  • 一种是响应分组

ARP-报文-请求&响应

同一个局域网内

假如:IP 地址为 10.10.10.10 的主机 A,想要给同一局域网内的 IP 地址为 10.10.10.11 主机 B,发送 IP 数据报文

大致流程

ARP-报文-请求

  • 主机 A 检索自己的 ARP 表
    • 发现 ARP 表中并无主机 B 的 IP 地址对应的映射条目,也就无从知道主机 B 的 MAC 地址
  • 主机 A 将构造一个 ARP 查询分组,并将其广播到所在的局域网中
    • ARP 查询报文:
      • 发送的 IP 地址 : 主机 A
      • 接收的 IP 地址 : 主机 B
      • 发送的 MAC 地址: 主机 A 的 MAC 地址
      • 接收的 MAC 地址: xxx (你猜是什么,肯定不是B的MAC地址,而是一个特殊的广播 MAC 地址, 即 FF-FF-FF-FF-FF-FF)
  • 局域网内所有设备都会收到 ARP 查询分组报文,然后验证是 接收IP地址是否是自己的
      • ARP 查询分组报文可达 主机 B
      • ARP 查询分组报文对当前设备无效,丢弃

ARP-报文-响应

  • 主机 B 收到了查询分组之后,验证无误,先也可以存一份主机A的映射,然后构造 ARP 响应分组报文,回传给 主机 A
    • 主机 B 的 ARP 映射表
      • 构造主机A的映射 (IP - MAC 映射记录)
    • ARP 响应报文:
      • 发送的 IP 地址 : 主机 B
      • 接收的 IP 地址 : 主机 A
      • 发送的 MAC 地址: 主机 B 的 MAC 地址
      • 接收的 MAC 地址: 主机 A 的 MAC 地址
  • 主机 A 收到了主机 B 的响应分组,构造映射信息,存储自己 ARP 表
    • 主机 A 的 ARP 映射表
      • 构造主机 B 的映射 (IP - MAC 映射记录)

经过上面的流程, 主机 A 和主机 B 双方本地的 ARP 映射表,都会记录对方的位置,下次可以直接获取 MAC 地址,构造链路层数据帧,来进行传输数据。

当然 关于 ARP 映射表的缓存时间,或者说生命周期也是有限制的,一般来说为 20 分钟。

🔱【因此】 ARP 协议是一个广播问询,单播响应协议

不同局域网内

【注意】 ARP 是解决同一个局域网上的主机或者路由器的 IP 地址和 MAC 的映射

假如:主机 A 和 主机 B 在不同局域网内,中间经过一个或者多个路由器通信。

                          [主机 P]
                            |
[主机A]   ->   [路由器 R1]       ->   [路由器 R2]     -> [主机 B]
                    |                     |                       
-- LAN1 (网1) --- | -- LAN2 (网2) --- |  -- LAN3 (网3) --- |
  • 由于 主机A 和 主机B 不在同一个局域网内,则主机A=>主机B 的IP数据报,交给同一局域网内 R1 转发
  • 主机A 和 R1 是网1 内,可以参考 同局域网内 ARP 解析,得到 R1 的 MAC 地址
  • R1 从转发表中得到下一跳的 路由器 R2
  • R1 和 R2 是网2 内,可以参考 同局域网内 ARP 解析,得到 R2 的 MAC 地址
  • R2 转发 IP数据报,利用同样的方式,解析 主机B 的 MAC 地址
  • 从而让 IP 数据包交付给 主机B
总结 ARP 解析的几种情况

ARP-报文-转发四种场景

  • 同一局域网,主机A发送主机B (无需中转,ARP 广播就能找到)
    • ARP 解析目的主机B的 MAC 地址
  • 不同局域网,网段1的主机A,发送给网段2的主机B (需要中转,ARP 广播找到路由器 MAC 地址,然后交给路由器继续转发)
    • ARP 找到本网络的路由器的 MAC 地址,然后交给路由器转发
  • 不同局域网,路由器R1, 发送另一个网段的 主机B (无需中转,ARP 广播就能找到)
    • ARP 找到本网络的另一个路由器的 MAC 地址,然后交给路由器转发
  • 同一局域网,路由器R2, 发送同一局域网的主机B (需要中转,ARP 广播找到路由器 MAC 地址,然后交给路由器继续转发)
    • ARP 解析目的主机B的 MAC 地址

2.5 ping 域名的执行流程

前面说了怎么用 ping, 域名需要通过 DNS 来找到 IP,知道了是向目的IP地址发送的是 ICMP 协议 的 ECHO 报文,并且从 三层网络层到二层链路层,是由 ARP 来把 IP地址 解析成真正的 MAC 物理地址,完成数据的请求。 那这里就简单总结一下 ping 的大致流程。

♻ 主机 向 域名主机 发起 ping 请求

  • ① DNS 解析
    • 例如 www.baidu.com
    • 主机查找本地 hosts 文件的 DNS 缓存,判断是否存在对应域名的IP
      • 存在;可以退出 DNS 解析
      • 不存在;继续寻找
    • 主机向本网络路由器发起请求,查找 路由DNS缓存
      • 存在;可以退出 DNS 解析
      • 不存在;继续寻找
    • 路由器向本地ISP(互联网提供商)的DNS服务器发起请求,查找 DNS服务器缓存
      • 存在;可以退出 DNS 解析
      • 不存在;继续寻找
    • 本地DNS服务器 向 根DNS服务器 发起请求
      • 根DNS服务器,不能直接用于域名解析,但是可以指明下一步方向
      • 根DNS服务器 收到 本地DNS服务器 请求
        • 发现是 .com 结尾,然后给了 .com 顶级DNS服务器的地址,指明下一步方向
    • 本地DNS服务器 向 顶级DSN服务器 发起请求
      • 顶级DSN服务器 给了 .baidu.com 权威DNS服务器的地址,指明下一步方向
    • 本地DNS服务器 向 权威DNS服务器 发起请求
      • 权威DNS服务器 查询了 www.baidu.com 的 IP 地址,然后返回给 本地DNS服务器
    • 本地DNS服务器 给 主机返回对应域名的 IP 地址
      • over 拿到 IP
  • 网段判定
    • 主机通过子网掩码判断 请求的 IP 是否跨网段
  • ② 主机利用 ARP 根据 IP地址 求 MAC 地址
    • 主机查看 ARP 高速缓存是否由 本网段的 路由器/网关 的 MAC 地址
      • 不存在;
        • 主机使用 ARP 解析协议获取到 本网段路由的MAC地址
      • 存在;
        • 获取本网段路由的 MAC 地址
    • 【同一局域网】主机知道本网络的一个路由 MAC 地址
    • 主机构造数据报、封装数据帧
      • 主机将 ICMP报文封装成IP数据报,IP数据报的源地址为主机的IP地址,目的地址是域名对应的IP地址;
      • 主机将IP数据报封装成MAC帧,MAC帧的源地址为主机的MAC地址,目的地址是路由器的MAC地址;
    • 路由器收到 ICMP 报文,解析后发现 MAC 目的地址是自己, IP 地址是想要访问的目的 IP;
    • 【路由跳转,重复这个过程】路由器重新构造数据帧,进行转发
      • 新数据帧:源MAC地址是路由器的,目的MAC地址是本网段的另一个路由的MAC地址
    • 【最后一次 ARP 解析】
      • 得到主机想要访问的IP地址对应的主机的MAC地址
      • 将ICMP报文封装成MAC帧发送给该域名主机
    • over 请求没问题
  • ③ 域名主机收到请求,然后进行响应
    • 域名主机接收到主机发送的ICMP回送请求报文
    • 由于 ARP 解析的两方,会互相知道对方的 MAC 地址,域名主机也会进行响应
    • 域名主机将向本网络路由发送ICMP回送回答报文,同样的,也会经过刚才路由器进行转发
    • over 回答没问题
  • ④ 主机收到域名主机发送的 ICMP 回答报文
    • over 网络是连通可达的

3、Host

host 一个用于执行 DNS 查找的简单实用程序。它通常用于将名称转换为 IP 地址,反之亦然。

host 本质上就是 DNS 查询过程,工作在 OSI 的 第七层应用层 ,就是通过运行在本地主机上的本地 DNS 解析器来执行查询操作。 依赖于本地 DNS 解析器和 DNS 服务器来解析域名。

3.1 host 使用文档

3.1.1 host 文档

  • 命令格式
host [参数] [主机名或IP地址]
  • 命令参数

不同平台的 host , 可能参数略微不同,具体可以 host -h 来看使用说明。

用法: 
    Usage: ping [-R] [-c count] [-i interval] [-s packetsize]  [-t ttl]  destination

选项:
    -R :记录路由过程
    -c count: 完成 count  ICMP 请求和响应
    -i interval: 间隔 interval 秒 后发送一次 ICMP 请求
    -s packetsize :设置发送数据包的大小
    -t ttl:  限制数据包存活时间,可以跳转路由的次数,如果超过就会认为 loss
    -q : 不显示指令执行过程,开头和结尾的相关信息除外
用法:
    Usage: host [-aCdilrTvVw] [-c class] [-N ndots] [-t type] [-W time]
              [-R number] [-m flag] hostname [server]
选项:
    -a :等效于 -v -t ANY ,以详细视图输出所有记录,包括任何类型的记录
    -c :指定非IN数据的查询类别
    -C :比较权威域名服务器上的SOA记录 
    -d :等效于-v。打印出更详细的调试信息
    -v : 启用详细输出。显示更多关于查询和响应的信息。
    -m :-m:设置内存调试标志(trace|record|usage)
    -N :更改在进行根查找之前允许的点数
    -r :禁用递归处理,只查询本地配置的资源记录
    -R :指定UDP数据包的重试次数
    -s :如果收到SERVFAIL响应,则停止查询
    -t :指定查询的类型(如A、AAAA、MX、NS等
    -T :启用TCP/IP模式进行查询
    -U :启用UDP模式进行查询
    -V : 输出版本号
    -w :指定永久等待回复
    -W :指定等待回复的时间
    -4 :仅使用IPv4进行查询
    -6 :仅使用IPv6进行查询
   [server] :想要利用非/etc/resolv.conf内的DNS主机来查询主机名与IP的对应时

3.1.2 使用

  • 查看 host 命令版本
    • host -V
~ # host -V
host 9.11.13-RedHat-9.11.13-6.el8_2.1
示例1: 最简单的使用方式 host + 域名
  • 直接请求某个域名
    • host www.baidu.com
# // 看一下微博的
~ # host www.weibo.com
# // 别名
www.weibo.com is an alias for weibo.com.
# // 多个 IPV4 IP 地址 
weibo.com has address 49.7.37.75
weibo.com has address 106.63.15.9
weibo.com has address 106.63.15.10
weibo.com has address 49.7.37.74
# // 多个 IPV6  IP 地址
weibo.com has IPv6 address 2400:89c0:1053:3::69
weibo.com has IPv6 address 2400:89c0:1150:3::11:79
weibo.com has IPv6 address 2400:89c0:1150:3::11:78
weibo.com has IPv6 address 2400:89c0:1053:3::68

# // weibo.com 的邮件服务器为 mx.sina.net,优先级为10
weibo.com mail is handled by 10 mx.sina.net.


# // 看一下百度的
~ # host  www.baidu.com 
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 14.119.104.254
www.a.shifen.com has address 14.119.104.189
www.a.shifen.com has IPv6 address 240e:ff:e020:38:0:ff:b06d:569b
www.a.shifen.com has IPv6 address 240e:ff:e020:37:0:ff:b08c:124f
示例2:指定 DNS Server 请求
  • 例如 使用 Google DNS 8.8.8.8
    • host www.baidu.com 8.8.8.8

发现返回的 IP 地址还不一样

# // 看一下百度的
~ # host  www.baidu.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases: 

www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 157.148.69.74
www.a.shifen.com has address 157.148.69.80
www.a.shifen.com has IPv6 address 2408:8756:c52:5016:0:ff:b09d:48ab
www.a.shifen.com has IPv6 address 2408:8756:c52:5013:0:ff:b03b:239c
www.a.shifen.com is an alias for www.wshifen.com.
  • 那你如何查看默认的 DNS 服务器
    • cat /etc/resolv.conf

当计算机需要解析一个域名时,会首先查看本地的 /etc/resolv.conf 文件,根据其中的DNS服务器地址去尝试解析对应的域名。

如果第一个DNS服务器无法解析,则会尝试下一个DNS服务器,直到找到能够解析域名的DNS服务器为止。

~ # cat /etc/resolv.conf 
# Your system has been configured with 'manage-resolv-conf' set to true.
# As a result, cloud-init has written this file with configuration data
# that it has been provided. Cloud-init, by default, will write this file
# a single time (PER_ONCE).
#
nameserver 223.5.5.5
nameserver 180.76.76.76
nameserver 119.29.29.29
nameserver 114.114.114.114
示例3:反向解析 IP

并不是所有 IP 都能反解析成功,可能该IP地址没有设置PTR记录、PTR记录尚未生效或者PTR记录被错误地配置,等

  • 例如 请求谷歌的 IP
    • host 74.86.151.162
~ # host www.google.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases: 

www.google.com has address 202.160.128.210
www.google.com has IPv6 address 2001::c085:4d85
www.google.com has address 74.86.151.162

# // 尝试请求一个 IP

~ #  host 74.86.151.162
162.151.86.74.in-addr.arpa domain name pointer a2.97.564a.ip4.static.sl-reverse.com.
示例4:-t 指定查询的类型
  • host -t SOA baidu.com 域名的授权信息
    • 主服务器(Primary Name Server):指定负责管理该域名的主DNS服务器的域名
    • 串行号(Serial Number):一个序列号,用于标识DNS区域文件的版本
    • 刷新时间(Refresh Interval):指定辅助服务器多久应该从主服务器获取一次区域文件的更新
    • 重试时间(Retry Interval):指定辅助服务器在无法连接到主服务器时,多久后应该再次尝试连接
    • 过期时间(Expire Interval):指定辅助服务器可以继续使用过期的区域文件的时间长度
    • 默认生存时间(Minimum TTL):指定缓存DNS服务器应该将SOA记录保留多长时间
  • host -t MX baidu.com 指定邮件服务器的地址
  • host -t A baidu.com 解析到 IPV4
  • host -t AAAA www.baidu.com 解析到 IPV6
  • host -t NS baidu.com 指定域名服务器的地址
~ #  host -t SOA www.baidu.com 
www.baidu.com is an alias for www.a.shifen.com.
~ #  host -t SOA baidu.com 
baidu.com has SOA record dns.baidu.com. sa.baidu.com. 2012147390 300 300 2592000 7200

~ #  host -t MX baidu.com 
baidu.com mail is handled by 10 mx.maillb.baidu.com.
baidu.com mail is handled by 20 usmx01.baidu.com.
baidu.com mail is handled by 20 mx1.baidu.com.
baidu.com mail is handled by 20 jpmx.baidu.com.
baidu.com mail is handled by 20 mx50.baidu.com.
baidu.com mail is handled by 15 mx.n.shifen.com.

~ #  host -t A baidu.com 
baidu.com has address 110.242.68.66
baidu.com has address 39.156.66.10

~ #  host -t AAAA baidu.com 
baidu.com has no AAAA record
~ #   host -t AAAA www.baidu.com 
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has IPv6 address 240e:ff:e020:38:0:ff:b06d:569b
www.a.shifen.com has IPv6 address 240e:ff:e020:37:0:ff:b08c:124f

~ #  host -t NS baidu.com 
baidu.com name server ns7.baidu.com.
baidu.com name server dns.baidu.com.
baidu.com name server ns3.baidu.com.
baidu.com name server ns4.baidu.com.
baidu.com name server ns2.baidu.com.
示例5:-v 显示请求的详细内容
~ #  host -v www.baidu.com

# 对域名www.baidu.com进行了查询
Trying "www.baidu.com"

# HEADER部分显示了查询的相关信息,包括操作码(opcode)、状态(status)、标识符(id)以及标志(flags)
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39187
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

# QUESTION SECTION部分显示了查询的问题部分,即所查询的域名及其记录类型(A记录)
;; QUESTION SECTION:
;www.baidu.com.            IN    A

# ANSWER SECTION部分给出了响应的答案部分
;; ANSWER SECTION:
www.baidu.com.        176    IN    CNAME    www.a.shifen.com.
www.a.shifen.com.    30    IN    A    14.119.104.254
www.a.shifen.com.    30    IN    A    14.119.104.189

Received 90 bytes from 114.114.114.114#53 in 0 ms

# 对域名www.a.shifen.com进行了进一步的查询
Trying "www.a.shifen.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9726
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

# 查询是针对AAA记录类型(IPv6地址)
;; QUESTION SECTION:
;www.a.shifen.com.        IN    AAAA

# 并返回了两个IPv6地址
;; ANSWER SECTION:
www.a.shifen.com.    56    IN    AAAA    240e:ff:e020:37:0:ff:b08c:124f
www.a.shifen.com.    56    IN    AAAA    240e:ff:e020:38:0:ff:b06d:569b

Received 90 bytes from 114.114.114.114#53 in 9 ms

# 进行了一个MX记录
Trying "www.a.shifen.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50786
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;www.a.shifen.com.        IN    MX

# 返回了一个授权信息(Authority Section)
;; AUTHORITY SECTION:
a.shifen.com.        263    IN    SOA    ns1.a.shifen.com. baidu_dns_master.baidu.com. 2310300018 5 5 2592000 3600

Received 97 bytes from 114.114.114.114#53 in 3 ms

3.2 /etc/host 、/etc/hostname 、/etc/host.conf 、/etc/resolv.conf 配置文件

/etc 下有一些个配置文件,来看一下分别是什么作用,和 DNS 或者 host 命令有啥关系

  • /etc/hosts 本地系统的主机名与IP地址之间的映射关系表

当本地系统需要解析一个主机名时,会首先查询该文件中是否有对应的IP地址,如果找到了则直接使用该IP地址完成解析。这个文件通常用于维护本地局域网中的主机名解析,可以手动编辑来添加/删除主机名与IP地址的映射关系。

  • /etc/hostname 本地系统的主机名

在 Linux 系统中,每个主机都应该拥有一个唯一的主机名,用于标识该主机。这个文件通常用于系统启动时设置系统的主机名。

  • /etc/host.conf 系统如何进行主机名解析

里面最重要的配置项是 order ,用于指定系统查询DNS服务器的顺序。默认情况下,先查询/etc/hosts文件,然后查询DNS服务器。也可以通过修改order配置项的值来改变查询顺序,或者禁用某些查询选项。

  • /etc/resolv.conf DNS服务器的IP地址

当系统需要解析一个主机名时,会向该文件中列出的DNS服务器发送查询请求。可以通过手动编辑该文件来指定DNS服务器的IP地址,或者使用DHCP协议自动获取DNS服务器的IP地址。

4、Nslookup

nslookup 这个古老的命令,(name server lookup) ,用于查询DNS记录,查看域名解析是否正常。支持 Linux、Windows 系统。

nslookup 有两种工作模式,即“交互模式”和“非交互模式”。其实就是查一次还是查多次的一个效果。个人感觉用着不咋好用,还不如 host 简单省事,也不如 dig 强大。Windows 下自带 nslookup 命令,用着也不错。

  • 在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。
  • 在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息,此时也可以指定查询的DNS服务器。

4.1 nslookup 使用文档

4.1.1 nslookup 文档

更多文档参考 man nslookup

命令:
    nslookup -qt=type domain [dns-server]

参数:
    -qt :
      A       地址记录(IPV4)
      AAAA    地址记录(IPV6)
      CNAME    别名记录
      MX    邮件服务器记录
      PTR    反向记录

4.1.2 nslookup 使用

示例1:直接请求域名
~ # nslookup www.baidu.com
Server:        114.114.114.114
Address:    114.114.114.114#53

Non-authoritative answer:
www.baidu.com    canonical name = www.a.shifen.com.
Name:    www.a.shifen.com
Address: 14.119.104.189
Name:    www.a.shifen.com
Address: 14.119.104.254
Name:    www.a.shifen.com
Address: 240e:ff:e020:38:0:ff:b06d:569b
Name:    www.a.shifen.com
Address: 240e:ff:e020:37:0:ff:b08c:124f
示例2:指定 DNS Server 请求
~ #  nslookup www.baidu.com 8.8.8.8
Server:        8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
www.baidu.com    canonical name = www.a.shifen.com.
Name:    www.a.shifen.com
Address: 157.148.69.80
Name:    www.a.shifen.com
Address: 157.148.69.74
Name:    www.a.shifen.com
Address: 2408:8756:c52:5013:0:ff:b03b:239c
Name:    www.a.shifen.com
Address: 2408:8756:c52:5016:0:ff:b09d:48ab
示例3:-q 指定查询的类型
~ # nslookup -q=AAAA www.baidu.com
Server:        114.114.114.114
Address:    114.114.114.114#53

Non-authoritative answer:
www.baidu.com    canonical name = www.a.shifen.com.
Name:    www.a.shifen.com
Address: 240e:ff:e020:37:0:ff:b08c:124f
Name:    www.a.shifen.com
Address: 240e:ff:e020:38:0:ff:b06d:569b

5、Dig

dig 新生代强大的命令,域信息探索器, 相比 nslookupdig 的显着优势之一是它能够提供有关 DNS 记录的详细而广泛的信息。

DIG 命令的工作原理是从设备对目标 IP 地址或主机名执行 DNS 查询。

  • 查看 dig 命令版本
    • dig -v
~ # dig -v
DiG 9.11.13-RedHat-9.11.13-6.el8_2.1

5.1 dig 使用文档

5.1.1 如何查找网站的IP地址?

~ # dig www.baidu.com +short
www.a.shifen.com.
14.119.104.254
14.119.104.189

5.1.2 如何找到域的名称服务器?

~ # dig NS www.baidu.com +short
www.a.shifen.com.

5.1.3 域的负责邮件服务器是哪个?

~ # dig MX www.baidu.com +short
www.a.shifen.com.

5.1.4 顶级根域名服务器查看?

~ # dig NS . +short
g.root-servers.net.
h.root-servers.net.
i.root-servers.net.
j.root-servers.net.
k.root-servers.net.
l.root-servers.net.
m.root-servers.net.
a.root-servers.net.
b.root-servers.net.
c.root-servers.net.
d.root-servers.net.
e.root-servers.net.
f.root-servers.net.
~ # dig NS . +short | wc -l
13

5.1.5 指定 DNS Server 请求

~ # dig NS www.baidu.com @8.8.8.8

; <<>> DiG 9.11.13-RedHat-9.11.13-6.el8_2.1 <<>> NS www.baidu.com @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19807
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com.            IN    NS

;; ANSWER SECTION:
www.baidu.com.        951    IN    CNAME    www.a.shifen.com.
www.a.shifen.com.    20    IN    CNAME    www.wshifen.com.

;; AUTHORITY SECTION:
wshifen.com.        289    IN    SOA    ns1.wshifen.com. baidu_dns_master.baidu.com. 2310300001 60 30 2592000 3600

;; Query time: 191 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Oct 30 17:03:52 CST 2023
;; MSG SIZE  rcvd: 152

5.1.6 dig 显示 DNS 解析全过程

  • dig www.baidu.com +trace
~ # dig www.baidu.com +trace

# 根域名服务器开始的域名解析过程

# 查询得到根域名服务器(g.root-servers.net)的 NS 记录
; <<>> DiG 9.11.13-RedHat-9.11.13-6.el8_2.1 <<>> www.baidu.com +trace
;; global options: +cmd
.            442565    IN    NS    i.root-servers.net.
.            442565    IN    NS    j.root-servers.net.
.            442565    IN    NS    k.root-servers.net.
.            442565    IN    NS    l.root-servers.net.
.            442565    IN    NS    m.root-servers.net.
.            442565    IN    NS    a.root-servers.net.
.            442565    IN    NS    b.root-servers.net.
.            442565    IN    NS    c.root-servers.net.
.            442565    IN    NS    d.root-servers.net.
.            442565    IN    NS    e.root-servers.net.
.            442565    IN    NS    f.root-servers.net.
.            442565    IN    NS    g.root-servers.net.
.            442565    IN    NS    h.root-servers.net.
;; Received 239 bytes from 10.59.218.193#53(10.59.218.193) in 0 ms

# 查询得到 .com 顶级域名服务器的 NS 记录
com.            172800    IN    NS    b.gtld-servers.net.
com.            172800    IN    NS    l.gtld-servers.net.
com.            172800    IN    NS    h.gtld-servers.net.
com.            172800    IN    NS    c.gtld-servers.net.
com.            172800    IN    NS    a.gtld-servers.net.
com.            172800    IN    NS    d.gtld-servers.net.
com.            172800    IN    NS    f.gtld-servers.net.
com.            172800    IN    NS    e.gtld-servers.net.
com.            172800    IN    NS    m.gtld-servers.net.
com.            172800    IN    NS    g.gtld-servers.net.
com.            172800    IN    NS    j.gtld-servers.net.
com.            172800    IN    NS    k.gtld-servers.net.
com.            172800    IN    NS    i.gtld-servers.net.
com.            86400    IN    DS    30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.            86400    IN    RRSIG    DS 8 1 86400 20231112050000 20231030040000 46780 . yk3P3qRXpYMusFdbDHvCoAN9Oo91aXGzFILIdX8XFBNa5YlwwRda9sId DQNfbpk1DHipPV3HgK+5pygwlpn8NP/JXSAReHcq4gLMWxIPY3lIy4Ss OXFaApqqLo1DxBo//BWe8NAI0cPYsNdj6kl0EWrGMwVY67uR2wzx2VAI JFnm0ECnJAWOElP7DdIc1ZIsTm5B5uwuXZLVPH8wQtW8ktjgysD2wQuI ymy34fHzXdvOahcIqepFTGVEqnOlKhXFA3F9xvFzeIx+3Mqh3moW1Q+u AIsPVT0RuWI18/oeh7RBKmK5uVS+lKCcxR/n+OdDB0PTvwJB9nz32ybN TvEzaw==
;; Received 1204 bytes from 192.112.36.4#53(g.root-servers.net) in 199 ms

# 查询得到 baidu.com 域名的 NS 记录
baidu.com.        172800    IN    NS    ns2.baidu.com.
baidu.com.        172800    IN    NS    ns3.baidu.com.
baidu.com.        172800    IN    NS    ns4.baidu.com.
baidu.com.        172800    IN    NS    ns1.baidu.com.
baidu.com.        172800    IN    NS    ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20231106042531 20231030031531 63246 com. by2gChG0+OuaUcL7k3qEETnCdufK+4enUXSUGMGSbsSpFNhRdI2LL0un 9RcF30qXptD2rix1dFX610YQYOIIwHSsBAlMm/M+YV8zbrYut7JyDtwf 4YqrVKZ+Am157gF5wdTn5plIH9ifV59vn0FnF4vRTPhiNgWzyeCFeqUi Dav7YSzi7rI5M/C7AvErjrnWkO+Iadnhbd/T+Q4aH1wSIA==
HPVV0C47Q7CQMTAJM90K1FBFJBRP4B4D.com. 86400 IN NSEC3 1 1 0 - HPVVAN8CFKHHHMEIDVJHFNQEOI5G6C89 NS DS RRSIG
HPVV0C47Q7CQMTAJM90K1FBFJBRP4B4D.com. 86400 IN RRSIG NSEC3 8 2 86400 20231105061118 20231029050118 63246 com. GOeryRYQcoW1l3Oyii5NzmciAvMm/mw15WBOY5RC8h9fuA4Kujpdgu8F YOoFzAr3UmOqzN1h4jPfvU82LCpgOtWqvfMIjSE9Mw6nqAWRURzYNZDw T3bTE1Os3cJa5bxA7gXSGzi6LigSfnpSUa5rs2FBis9lhZBBtLJeiH/s 4OVKzFhc+VCX3K/VT0MFLM3VPGyL+LBhXBCVrJCr7XWkAw==
;; Received 849 bytes from 192.33.14.30#53(b.gtld-servers.net) in 261 ms

# 显示了查询结果,即 www.baidu.com 的 CNAME 记录,指向了 www.a.shifen.com
www.baidu.com.        1200    IN    CNAME    www.a.shifen.com.
;; Received 100 bytes from 14.215.178.80#53(ns4.baidu.com) in 4 ms

5.1.7 dig 显示 DNS 主从关系

~ # dig -t soa www.baidu.com

; <<>> DiG 9.11.13-RedHat-9.11.13-6.el8_2.1 <<>> -t soa www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36437
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com.            IN    SOA

;; ANSWER SECTION:
www.baidu.com.        86    IN    CNAME    www.a.shifen.com.


# 可以看到主 DNS 
;; AUTHORITY SECTION:
a.shifen.com.        595    IN    SOA    ns1.a.shifen.com. baidu_dns_master.baidu.com. 2310300018 5 5 2592000 3600

;; Query time: 3 msec
;; SERVER: 10.59.218.193#53(10.59.218.193)
;; WHEN: Mon Oct 30 17:07:31 CST 2023
;; MSG SIZE  rcvd: 126

6、命令总结

  • ping 是最简单直接的方式,判断网络是否通常,适用于 IP、域名
  • hostnslookupdig 很多功能是相同的, 向特定名称服务器询问特定 DNS 问题
  • DNS 故障排查,dig 命令是首选,输出内容更加详细,更加原始; host 命令输出更加简单,显示格式更加友好
本作品采用《CC 协议》,转载必须注明作者和本文链接
明天我们吃什么 悲哀藏在现实中 Tacks
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!