Linux网络DNS与ICMP
DNS
DNS(Domain Name System,域名系统)是将人类可读的域名(如 example.com)转换为机器可识别的 IP 地址(如 93.184.216.34)的分布式数据库系统。它是互联网的核心基础设施之一。
TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序. 但是 IP 地址不 方便记忆. 于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用 hosts 文件来描述主机 名和 IP 地址的关系.

最初, 通过互连网信息中心(SRI-NIC)来管理这个 hosts 文件的.
• 如果一个新计算机要接入网络, 或者某个计算机 IP 变更, 都需要到信息中心申请变更 hosts 文件.
• 其他计算机也需要定期下载更新新版本的 hosts 文件才能正确上网.
这样就太麻烦了, 于是产生了 DNS 系统.
• 一个组织的系统管理机构, 维护系统内的每个主机的 IP 和主机名的对应关系.
• 如果新计算机接入网络, 将这个信息注册到数据库中;
• 用户输入域名的时候, 会自动查询DNS 服务器, 由 DNS 服务器检索数据库, 得到对应的 IP 地址.
域名简介
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称.
• com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.
• baidu: 二级域名, 公司名.
• www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似ftp.xxx.xxx/www.xxx.xxx 这样的格 式, 来表示主机支持的协议.
域名解析过程

- 本地缓存查询:先查浏览器、操作系统的本地缓存,有对应 IP 直接返回。
- 递归查询 DNS 服务器:本地无缓存时,向本地 DNS 服务器(如运营商提供)发起请求。
- 迭代查询根 / 顶级 / 权威 DNS:本地 DNS 依次查询根服务器、顶级域服务器(如.com)、权威 DNS 服务器,最终获取目标 IP。
- 返回结果并缓存:权威 DNS 将 IP 返回给本地 DNS,本地 DNS 缓存后再返回给用户设备,后续查询可直接用缓存。
域名结构是树状结构,树的最顶端代表根服务器,根的下一层就是由我 们所熟知的.com、.net、.cn 等通用域和.cn、.uk 等国家域组成,称为顶级域。网上注 册的域名基本都是二级域名,比如 http://baidu.com、http://taobao.com 等等二级域 名,它们基本上是归企业和运维人员管理。接下来是三级或者四级域名。
使用dig工具分析DNS过程
使用:
dig www.baidu.com
1. 开头位置是 dig 指令的版本号
2. 第二部分是服务器返回的详情, 重要的是 status 参数, NOERROR 表示查询成功
3. QUESTION SECTION 表示要查询的域名是什么
4. ANSWER SECTION 表示查询结果是什么. 这个结果先将 www.baidu.com 查询成了 www.a.shifen.com, 再将 www.a.shifen.com 查询成了两个 ip 地址.
5. 最下面是一些结果统计, 包含查询时间和 DNS 服务器的地址等.
更多 dig 的使用方法, 参见 https://www.imooc.com/article/26971?block_id=tuijian_wz

windows的dns缓存查询:

ICMP协议
CMP(Internet Control Message Protocol,互联网控制报文协议)是TCP/IP协议族的核心协议之一,用于在IP主机、路由器之间传递控制消息。它通常用于报告错误、诊断网络状态或执行网络管理任务(如Ping和Traceroute)。
ICMP不是用来传递用户数据!
ICMP是一个网络层协议一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是 IP 协议并不提供可靠传输. 如果丢包了, IP 协议并不能通知传输层是否丢包以及丢包的原因.
功能:
• 确认 IP 包是否成功到达目标地址.
• 通知在发送过程中 IP 包被丢弃的原因.
• ICMP 也是基于 IP 协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
• ICMP 只能搭配 IPv4 使用. 如果是 IPv6 的情况下, 需要使用 ICMPv6;
正常报文发送对方,如果对方无法工作,则会什么都收不到,但是ICMP可以,允许距离故障地最近的由路由器返回ICMP包给发送方。
报文格式

分为两类报文:通知出错原因和诊断查询报文。

ping命令就是基于ICMP的!
traceroute命令也是基于ICMP实现的,能打印出可执行程序的主机,一直到目标主机之前经历多少路由器。
基于ICMP的报文解包时不会向上发,也就说不会到达传输层,所以不关心端口这样信息。
