扩展—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超时报文。

相关推荐
且从容.2 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道2 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
讯捷蓝达4 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
且从容.5 小时前
ubuntu安装flink
linux·ubuntu·flink
数字新视界7 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
爱和冰阔落7 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨7 小时前
WSL2的安装与使用
linux·wsl
微小的鱼7 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng7 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
严肃小白兔8 小时前
Cloudflare 更新 API Token 管理:从最小权限到自动化凭据安全
网络·安全·自动化