DNS 是一整套从域名映射到 IP 的系统
TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序,但是 IP 地址不方便记忆,于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用 hosts 文件来描述主机 名和 IP 地址的关系.
最初,通过互连网信息中心(SRI-NIC
)来管理这个 hosts
文件的.
hosts
文件.这样就太麻烦了, 于是产生了 DNS 系统.
至今, 我们的计算机上仍然保留了 hosts 文件. 在域名解析的过程中仍然会优先查找 hosts 文件的内容.
lighthouse@VM-8-10-ubuntu:~$ cat /etc/hosts
#
127.0.1.1 localhost.localdomain VM-8-10-ubuntu
127.0.0.1 localhost
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。
比如:www.baidu.com
性质 | 内容 | 解释 |
---|---|---|
一级域名 | com | 表示这是一个企业域名,同级的还有"net"网络提供商),“org”(非盈利组织)等 |
二级域名 | baidu | 域名 |
前缀 | www | 只是一种习惯用法,之前人们在使用域名时, 往往命名成类似于 ftp.xxx.xxx/www.xxx.xxx 这样的格式,来表示主机支持的协议 |
关于域名补充:提问 AI 的问题列表,非技术问题,但是有助于理解域名解析
浏览器首先看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析文件 hosts
,如果还是没有,就会 DNS 服务器进行查询,查询的过程如下:
DNS
请求报文,问 www.baidu.com
的IP 是啥,并发给本地 DNS 服务器www.baidu.com
,则它直接返回 IP 地址。www.baidu.com
的 IP 地址吗?"根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。.com
区域管理”。将对应的顶级域名服务器 .com
的IP地址返回给本地域名服务器。.com
发出解析请求报文。.com
收到请求后,判断该域名属于 baidu.com
域,然后将对应域名返回。dns.baidu.com
的IP地址返回给本地域名服务器。dns.badiu.com
发起解析请求报文。dns.baidu.com
收到请求后,将查询结果返回给本地域名服务器。注意:上面的整个过程用的是 UDP 协议,简单不需要建立连接 如果是 TCP 的话,本地 DNS 是将 IP 地址返回客户端,客户端和目标建立连接。
那是不是每次解析域名都要经过那么多的步骤呢?
🐟 浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「DNS 服务器」。 👎 数据包表示:“DNS 老大哥厉害呀,找到了目的地了!我还是很迷茫呀,我要发出去,接下来我需要谁的帮助呢?”
注意:上面的整个过程
举个例子,🌐 域名解析的"城市导航系统"(场景化案例)
假设小明在浏览器输入www.abc.com
,就像游客要去"数字城市"中的某栋大楼:
chrome://net-internals/#dns
可查看缓存
ipconfig /displaydns
可查看系统DNS缓存
127.0.0.1 localhost
和一些公司测试地址,但就是没有www.abc.com
。”
典型路径:Windows→C:\Windows\System32\drivers\etc\hosts
114.114.114.114
或8.8.8.8
)。导航员小蓝开始工作:
❓ 小蓝先查本地缓存记录:‘三天前有人查过这个地址,IP是1.1.1.1
…但缓存有效期只剩10秒了,必须重新确认!’”
.com
区的导航站怎么走?’
👮 根导航员秒答:‘去东区198.41.0.4
,那里有管理所有.com
地址的顶级导航站!’”
.com
区导航大厦(顶级域名服务器):
🗣️ ‘我要找abc.com
区域的详细导航处’
👔 工作人员查册后回应:‘请前往203.0.113.1
,那是abc.com
专属的导航分站’”
abc.com
专属导航分站(权威域名服务器),小蓝终于得到明确答案:
📍 ‘www.abc.com
的精确坐标是1.1.1.1
,有效期24小时(TTL=86400秒)’”
1.1.1.1
记在本子(本地DNS缓存)上,标注24小时后失效
📞 回电小明:‘目标地址已确认,请保存好这个坐标!’
小明拿到IP后,终于成功访问网站!”
🎯 关键机制强化
www.taobao.com
时:
.com
服务器taobao.com
权威服务器140.205.220.96
)域名的层级关系
在域名中,越靠右的位置表示其层级越高。
毕竟域名是外国人发明,所以思维和中国人相反,比如说一个城市地点的时候,外国喜欢从小到大的方式顺序说起(如 XX 街道 XX 区 XX市 XX 省),而中国则喜欢从大到小的顺序(如 XX省 XX市 XX 区 XX街道)。
实际上域名最后还有一个点,比如 www.server.com.
,这个最后的一个点代表根域名。
也就是说:.根域
是在最顶层,它的下一层就是 .com
顶级域,再下面是 server.com
。
所以域名的层级关系类似一个树状结构:
树的最顶端代表根服务器,根的下一层就是由我 们所熟知的 .com
、.net
、.cn
等通用域和 .cn
、.uk
等国家域组成,称为顶级域。
http://baidu.com
、http://taobao.com
等等二级域名,它们基本上是归企业和运维人员管理。接下来是三级或者四级域名为什么是这样的结构呢?
安装 dig 工具,如下:
yum install bind-utils # Centous
sudo apt install dnsutils # Ubuntu
现在我们就可以使用 dig
指令来查看域名的解析过程了,如下:
lighthouse@VM-8-10-ubuntu:~$ dig www.baidu.com
; <<>> DiG 9.18.28-0ubuntu0.22.04.1-Ubuntu <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27056
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1057 IN CNAME www.a.shifen.com.
www.a.shifen.com. 40 IN A 115.239.210.27
www.a.shifen.com. 40 IN A 115.239.211.112
;; Query time: 0 msec
;; SERVER: 100.100.2.136#53(100.100.2.136)
;; WHEN: Wed Sep 26 00:05:25 CST 2018
;; MSG SIZE rcvd: 90
结果解释:
dig
指令的版本号status
参数,NOERROR
表示查询成功QUESTION SECTION
:表示要查询的域名是什么www.baidu.com
查询 成了 www.a.shifen.com
, 再将 www.a.shifen.com
查询成了两个 ip 地址.补充 – 关于 DNS 缓存:
ipconfig /displaydns
命令来查看系统级别的 DNS 缓存这是一个经典的面试题,能牵扯到所有网络知识点,没有固定答案越细越好,可以参考:
下面我把整个过程比作成 “数字世界的快递系统”,来方便理解,如下:
🌐 第一阶段:地址翻译与导航(DNS解析)
场景:“快递员要找到收件地址”
chrome://net-internals/#dns
查记录。”ipconfig /displaydns
查看系统级缓存。”127.0.0.1
强行指向localhost
。”8.8.8.8
):“快递中心接线员开始打电话:‘根域名服务器吗?请问.com
区怎么走?’”198.41.0.4
找.com
管理局!”example.com
的权威服务器在199.254.0.1
!”93.184.216.34
,有效期2小时!”🔗 第二阶段:建立传输通道(TCP连接)
场景:“修建高速公路”
📦 第三阶段:请求与响应(HTTP交互)
场景:“发送订单与接收货物”
// 浏览器发送的"订单清单"(HTTP请求头示例)
GET /index.html HTTP/1.1
Host: www.example.com
Accept: text/html,application/xhtml+xml
Cookie: session_id=abc123
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
// 服务器返回的"快递包裹"(HTTP响应示例)
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Cache-Control: max-age=3600
Content-Length: 1256
<!DOCTYPE html>
<html>...</html>
🎨 第四阶段:货物拆箱与组装(浏览器渲染)
场景:“建筑工地施工”
display:none
的隐形建材。”<div>
的width:50%
需要重新测量!”z-index:999
的弹窗要最后喷涂!”transform
动画,像播放电影一样流畅展示。”⚡️ 关键性能优化点
DNS预读取
<!-- 提前解析其他域名的DNS -->
<link rel="dns-prefetch" href="//cdn.example.com">
TCP快速打开(TFO) “在第二次访问时,TCP握手可减少1个RTT时间,就像快递员记住常用路线后可以抄近道。”
HTTP/2多路复用 “所有资源通过一个TCP连接并行传输,告别HTTP/1.1的’车队拥堵’问题。”
关键渲染路径优化
🔧 异常处理流程图
结论:整个过程就像一场精密的交响乐演奏:DNS解析是乐谱准备,TCP连接是乐器调音,HTTP请求是乐章演奏,浏览器渲染是指挥家的最终呈现。每个环节的优化都能让这场"音乐会"更加流畅动听!
ICMP
协议是一个 网络层协议,全称是 Internet Control Message Protocol
,也就是互联网控制报文协议
所谓控制,就是通过下发指令来感知和控制网络环境,所以它一定是配合一个 无法感知网络环境 的协议来工作的,这个协议就是IP协议(包括IPv4和IPv6)
所以,ICMP通常被认为是IP协议的一部分,它封装在IP层中,使用IP协议进行传输。因此,严格来说,ICMP既不是一个网络层协议,也不是一个传输层协议,而是介于两者之间的一个协议。
它的主要功能是传输网络诊断信息,信息主要包括两类:
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;
这是 IP协议 的一个设计准则决定的,也就是 best effort
(尽力而为),这样的好处是让IP协议尽量保持简单的形态,只负责有效率的数据传输,而更多的可靠性保证交给上层协议实现(如 TCP)
但并不是所有上层协议都保证可靠性,所以需要有协议辅助IP完成必要的网络质量管理。ICMP协议 的缘由就是这样来的
⏰ 当IP数据包出现错误时,上层发送IP数据包的主机或路由器并不知下层发生了错误,这个时候下层的主机或路由器就可以通过发送ICMP数据包,将错误信息汇报给上层,从而让上层的主机或路由器进行调整。
ICMP
仅只能提供某些特定类型的错误信息汇报,并不能帮助IP协议成为可靠的协议,不过虽然错误信息有限,但用于基本的网络质量管理足够了ICMP本质就相当于IP层的“调试接口”,可从应用层直接访问IP层的功能,测试IP层代码的准确性。主要功能包括:
ICMP
也是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归为网络层。ICMP
只能搭配 IPv4
使用,IPv6需要用 ICMPv6
在 IP
通信中如果某个 IP
包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责通知。
如上图例子,主机 A 向主机 B 发送了数据包,由于某种原因,途中的路由器 2 未能发现主机 B 的存在,这时,路由器 2 就会向主机 A 发送一个 ICMP 目标不可达数据包,说明发往主机 B 的包未能成功。
因此,从路由器 2 返回的 ICMP 包会按照往常的路由控制先经过路由器 1 再转发给主机 A 。收到该 ICMP 包的主机 A 则分解 ICMP 的首部和数据域以后得知具体发生问题的原因。
① ping命令
$ ping localhost
PING localhost (127.0.0.1):56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 tt1=64 time=0.086 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.183 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.143 ms
--- Localhost ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.086/0.150/0.187/0.041 ms
ping
的是域名,而不是 URL
,一个域名可以通过 DNS
解析成 IP 地址
ping
命令会先发送一个ICMP Echo Request 给对端,对端接收到之后会返回一个 ICMP Echo Reply。
telnet
是23端口,ssh
是22端口, 那么 ping
是什么端口?
ping 命令基于网络层的ICMP,而端口号是传输层的概念,在网络层中根本就没有端口号 !!!
① traceroute 命令
安装 traceroute,如下:
sudo apt install -y traceroute # Ubuntu
也是基于 ICMP 协议实现,能够打印出可执行程序主机,一直到目标主机之前经历多少路由器.
【案例】
lighthouse@VM-8-10-ubuntu:~$ traceroute www.baidu.com
traceroute to www.baidu.com (183.2.172.177), 30 hops max, 60 byte packets
1 11.72.201.193 (11.72.201.193) 3.389 ms * 3.572 ms
2 * * *
3 * * 10.162.69.169 (10.162.69.169) 0.644 ms
4 10.196.2.101 (10.196.2.101) 0.652 ms 10.162.32.253 (10.162.32.253) 0.989 ms 10.196.93.230 (10
5 * * *
6 * * 121.14.206.169 (121.14.206.169) 4.097 ms
7 * 58.63.249.213 (58.63.249.213) 6.025 ms 121.14.50.5 (121.14.50.5) 8.911 ms
8 * 14.29.117.178 (14.29.117.178) 24.591 ms 14.29.117.170 (14.29.117.170) 5.078 ms
9 * * 14.29.117.170 (14.29.117.170) 4.974 ms
10 * * *
① 命令全局参数
traceroute to www.baidu.com (183.2.172.177), 30 hops max, 60 byte packets
www.baidu.com
(解析为IP 183.2.172.177
),这是百度服务器的IP地址30 hops max
,表示最多探测30个中间节点,若未达目标则终止60 byte packets
,包含IP头(20字节)和UDP头(8字节),有效载荷约32字节② 逐跳输出解析,格式说明如下
每行输出代表一个中间节点(路由器或网关),格式为: 跳数 [节点IP(反向解析域名)] 探测包1延迟 探测包2延迟 探测包3延迟
例如: 3 * * 10.162.69.169 (10.162.69.169) 0.644 ms
字段 | 含义 | 示例分析 |
---|---|---|
跳数 | 从源到目标的第N个中间节点(如第1跳是本地网关) | 1表示第一跳 |
节点IP与域名 | 中间节点的IP地址,括号内为反向DNS解析结果(若失败则仅显示IP) | 11.72.201.193可能是云服务器网关,14.29.117.178属于电信骨干网节点 |
延迟时间 | 三个探测包的往返时间(RTT),单位毫秒(ms) | 第8跳的24.591 ms表明跨运营商传输(如电信→联通)或链路拥塞 |
星号(*) | 探测包未收到响应(超时或过滤) | 第2跳* * *表示该节点完全丢弃探测包(运营商设备可能禁用ICMP响应) |
③输出中的特殊现象
(1) 星号(*)的成因
58.63.249.213
响应,其他探测包超时)。(2) 多IP地址的跳数
10.196.2.101
和 10.162.32.253
),表明流量通过不同路径传输(ECMP技术)14.29.117.178
和 14.29.117.170
)(3) 延迟波动
24.591 ms
显著高于其他节点,可能经过城际骨干网互联点。【★,°:.☆( ̄▽ ̄)/$:.°★ 】那么本篇到此就结束啦,如果有不懂 和 发现问题的小伙伴可以在评论区说出来哦,同时我还会继续更新关于【Linux】的内容,请持续关注我 !!