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

相关推荐
MC皮蛋侠客1 小时前
DNP3 系列(三):伪传输层——分段、重组与可靠传输
网络·dnp3
筝筝ba1 小时前
linux 查询当前登录的用户数量
linux·服务器·网络
ShiXZ2132 小时前
网络调试四剑客:ping / telnet / nc / netstat 速查指令集
运维·开发语言·网络·php
woniu_buhui_fei2 小时前
日常工作常用的命令(Linux+JDK)
linux·运维·服务器
snow@li2 小时前
Telnet 全景教程:全平台安装、命令使用、故障排查与安全规范
运维·网络
coward912 小时前
全志T507 (sun50iw9p1)sunxi pinctrl 子系统实现分析
linux·嵌入式硬件
OnlineProxy2 小时前
如何在无需手机号的情况下创建 Google 账号:高信任度代理(High Trust Score Proxy)如何取代短信验证
运维·服务器·facebook
imaol13 小时前
文件编程--标准IO
linux·运维·算法
随风而飘1863 小时前
罗德与施瓦茨 FSP13 中高端频谱分析仪
网络·功能测试·测试工具