扩展—DNS与ICMP

一、DNS

1.1 从hosts文件到DNS

TCP/IP网络中,使用IP地址和端口号确定一台主机上的某个程序。但IP地址不便于记忆,于是人们发明了主机名------一个字符串,并通过 hosts 文件 描述主机名与IP的对应关系。

最初,由互联网络信息中心统一管理hosts文件:新计算机入网或IP变更都需要到信息中心申请变更,其他计算机也要定期下载新版本的hosts文件才能正确联网。这种方式维护成本极高,于是DNS系统应运而生。

DNS是一整套从域名映射到IP的分布式系统:

  • 各组织的系统管理机构维护本组织内主机的IP与主机名对应关系

  • 新计算机入网时,将信息注册到数据库中

  • 用户输入域名时,系统自动查询DNS服务器,由服务器检索数据库返回对应IP

至今,计算机上仍保留着hosts文件,且域名解析时会优先查找hosts文件的内容:

bash 复制代码
cat /etc/hosts

1.2 域名结构

域名使用 . 连接,采用分层结构。以 www.baidu.com 为例:

层级 名称 说明
顶级域 com 表示企业域名,同级还有net、org等
二级域 baidu 公司名,由企业自行注册和管理
三级域 www 习惯用法,早期用于标识主机支持的协议

域名整体呈树状结构:

树的最顶端是根服务器,根的下一层是 .com、.net、.cn 等通用域和国家域,再往下是企业注册的二级域,以及三级、四级域名。

1.3 域名解析

以查询 www.baidu.com 为例,DNS递归解析的流程如下:

  1. 客户端向本地DNS服务器发起查询:"www.baidu.com的IP地址是多少?"

  2. 本地DNS服务器向根服务器查询

  3. 根服务器返回:"这个域名归.com服务器管理,这是它的地址"

  4. 本地DNS服务器向.com顶级域服务器查询

  5. .com服务器返回:"这个域名归baidu.com服务器管理,这是它的地址"

  6. 本地DNS服务器向baidu.com权威服务器查询

  7. 权威服务器返回百度一下,你就知道的IP地址,本地DNS服务器将结果返回给客户端

整个过程中,本地DNS服务器扮演了"代查"的角色,客户端只需等待最终结果。

1.4 使用dig工具分析DNS

dig是Linux下常用的DNS查询工具,安装:

bash 复制代码
yum install bind-utils

查询域名:

bash 复制代码
dig www.baidu.com

输出示例:

bash 复制代码
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41628
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; 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

解读:

  • status: NOERROR:查询成功

  • QUESTION SECTION:要查询的域名

  • ANSWER SECTION:查询结果

  • Query time:查询耗时

  • SERVER:使用的DNS服务器地址

缓存:

  • Windows系统可使用 ipconfig /displaydns 查看系统级DNS缓存

  • 浏览器也有独立的DNS缓存,可在浏览器开发者工具中查看


二、ICMP

2.1 协议功能

ICMP是一个网络层协议,基于IP协议工作。

新搭建好的网络,往往需要先进行测试来验证连通性。但IP协议本身不提供可靠传输------丢包了,IP层不会通知传输层,也不会说明丢包原因。

功能:

  • 确认IP包是否成功到达目标地址

  • 通知发送过程中IP包被丢弃的原因

注意:ICMP虽然基于IP协议,但不属于传输层功能,仍归类为网络层协议。IPv4使用ICMP,IPv6则使用ICMPv6。

当目标主机不可达时,路由器会通过ICMP通知源主机:

主机B电源关闭,路由器2多次发送ARP请求均无响应,最终向主机A返回一个 ICMP Destination Unreachable 报文。

2.2 格式与类型

ICMP报文格式:

前4字节为固定头部:类型、代码、校验和,后续内容根据类型和代码的不同而变化。

ICMP报文大致分为两类:通知出错原因 和 用于诊断查询。

常见类型:

类型(十进制) 内容
0 回送应答
3 目标不可达
4 原点抑制
5 重定向或改变路由
8 回送请求
9 路由器公告
10 路由器请求
11 超时
17 地址子网请求
18 地址子网应答

2.3 ping命令

ping是最常用的网络连通性测试工具,基于ICMP协议实现。

工作原理:

源主机发送一个 ICMP Echo Request(类型8)给目标

目标接收到后,返回一个 ICMP Echo Reply(类型0)

ping不仅能验证连通性,还会统计响应时间和TTL。

示例:

分析输出:

注意:ping的是域名,不是URL。一个域名可以通过DNS解析成IP地址,而URL包含协议、路径等更多信息。

2.4 traceroute命令

traceroute同样基于ICMP协议实现,能够打印出从当前主机到目标主机之间经过的每一跳路由器。

工作原理: traceroute依次发送TTL从1开始递增的IP包,每经过一个路由器TTL减1;当TTL变为0时,路由器返回 ICMP Time Exceeded(类型11)报文,从而获知该跳路由器的IP。

输出中 * * * 表示该跳路由器未返回ICMP超时报文。

相关推荐
圆圆讲门店5 小时前
挑选同城获客服务机构时需要考量的核心因素都有哪些?
大数据·网络·人工智能·python
筝筝ba6 小时前
openBMC功耗封顶GUI测试
服务器
制造业的搬运工6 小时前
扫地机器人主板 PCB 选型:深圳线路板与普通板的 8 项工艺指标对比与参数清单
网络·科技·制造·科普·pcb工艺
顺顺 尼6 小时前
linux 进程信号(上)
linux·c++·算法
niuTaylor7 小时前
飞腾 FT-2000/4 Ubuntu 内存卡 / NVMe SSD 系统制作完整指南
linux·服务器·人工智能·驱动开发·单片机
傲世仙尊8 小时前
信号量环形队列与线程池起步-把临界资源拆成很多份
linux
Huangjin007_8 小时前
【Linux 系统篇(二十五)】文件(二) 系统文件I/O详解
linux·运维·服务器
XiaoMaqqqq8 小时前
目前知名的IP驱动产业新场景新工具有哪些
网络·python·网络协议·tcp/ip
李永奉9 小时前
中科蓝讯SDK开发-BT897X、BT891X、AB573X、AB572X 系列 触摸按键提示音功能实现
网络·单片机·嵌入式硬件·mcu·物联网
ShineWinsu9 小时前
对于ProtoBuffer:ProtoBuffer的介绍以及安装
linux·网络·google·协议·序列化·反序列化·protobuffer