admin 发表于 2024-10-17 06:49:16

域名解析那些事儿

0x00 背景
今年三四月份,主管交给我一项任务,研究 Linux/AIX 环境下的 gethostbyname 和 getaddrinfo 域名解析函数。虽然当时做了深入研究,但没有记录下来。最近学习 Java 网络编程时,想起了一些片段,加上想写博客的想法,遂将这些内容整理成文。
0x01 概念
为了更好地理解域名解析,首先介绍几个相关概念:

[*]
IP 地址:网络设备的唯一标识符,用于网络定位和通信。常见版本包括 IPv4(32 位,例如 192.168.0.1)和 IPv6(128 位,例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334)。

[*]
主机名:网络设备的名称,通常用于内部网络标识设备,例如 server1。

[*]
域名:互联网上标识一组服务器或服务的名称,由域名系统解析为 IP 地址,方便用户访问。

[*]
完全限定域名 (FQDN):包含主机名和域名的完整名称,唯一标识互联网上的设备,例如 www.example.com,其中 www 是主机名,example.com 是域名。


通常,域名解析是指将完全限定域名转换为 IP 地址的过程。
0x02 域名解析 (宏观视角)
域名解析需要将域名映射到 IP 地址,这个过程由域名解析服务器 (DNS) 完成。假设没有本地 DNS 缓存,解析过程如下:

[*]
客户端发送 DNS 请求:客户端发送 DNS 查询请求,例如询问 www.163.com 的 IP 地址,请求会发送到本地 DNS 服务器。

[*]
本地 DNS 服务器查询缓存:本地 DNS 服务器首先检查缓存,如果存在该域名的 IP 地址,则直接返回;否则继续查询外部 DNS 层次结构。

[*]
本地 DNS 服务器查询根 DNS 服务器:本地 DNS 服务器向全球 13 个根 DNS 服务器之一发起查询,根 DNS 服务器提供特定顶级域名(例如 .com、.org)服务器的地址。

[*]
根 DNS 服务器响应:根 DNS 服务器返回负责顶级域名服务器的地址。

[*]
本地 DNS 服务器查询顶级域名服务器:本地 DNS 服务器根据根 DNS 提供的地址,向顶级域名服务器发起查询。

[*]
顶级域名服务器响应:顶级域名服务器返回负责二级域名(例如 163.com)的权威 DNS 服务器的地址。

[*]
本地 DNS 服务器查询权威 DNS 服务器:本地 DNS 服务器向权威 DNS 服务器发起查询,该服务器存储域名与 IP 地址的映射。

[*]
权威 DNS 服务器返回 IP 地址:权威 DNS 服务器返回 www.163.com 的 IP 地址给本地 DNS 服务器。

[*]
本地 DNS 服务器响应客户端:本地 DNS 服务器将 IP 地址返回给客户端,客户端完成与目标服务器的连接。



https://linux.do/uploads/default/optimized/3X/7/8/787cd10b58250cb17c6577cc24d5246f527dec5f_2_572x500.png
页: [1]
查看完整版本: 域名解析那些事儿