目录
[ICMP 报文类型(差错报文 和 查询报文)](#ICMP 报文类型(差错报文 和 查询报文))
[1. 差错报文(Error Messages)](#1. 差错报文(Error Messages))
[2. 查询报文(Query Messages)](#2. 查询报文(Query Messages))
DNS
为什么需要域名解析?
我们在上网的时候,通常使用的方式是域名,而不是 IP 地址,因为域名方便人类记忆。 那么实现这一技术的就是 DNS 域名解析,DNS 可以将域名网址自动转换为具体的 IP 地址。
DNS 中的域名都是用句点来分隔的,比如 www.server.com ,这里的句点代表了不同层次之间的界限。 在域名中,越靠右的位置表示其层级越高。 毕竟域名是外国人发明,所以思维和中国人相反,比如说一个城市地点的时候,外国喜欢从小到大的方 式顺序说起(如 XX 街道 XX 区 XX 市 XX 省),而中国则喜欢从大到小的顺序(如 XX 省 XX 市 XX 区XX 街道)。
根域是在最顶层,它的下一层就是 com 顶级域,再下面是 server.com。
所以域名的层级关系类似一个树状结构: 根 DNS 服务器 顶级域 DNS 服务器(com) 权威 DNS 服务器(server.com)

域名解析的工作流程
浏览器首先看一下自己的缓存里有没有,如果没有就向操作系统的缓存要,还没有就检查本机域名解析 文件 hosts ,如果还是没有,就会 DNS 服务器进行查询,查询的过程如下:
-
客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。
-
本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:"老大, 能告诉我 www.server.com 的IP 地址吗?" 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
-
根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说:"www.server.com 这个域名归.com 区域管理",我给你 .com 顶级域名服务器地址给你,你去问问它吧。"
-
本地 DNS 收到顶级域名服务器的地址后,发起请求问"老二, 你能告诉我 www.server.com 的 IP地址吗?"
-
顶级域名服务器说:"我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该 能问到"。
-
本地 DNS 于是转向问权威 DNS 服务器:"老三,www.server.com对应的IP是啥呀?" server.com的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
-
权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
-
本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。 至此,我们完成了 DNS 的解析过程。现在总结一下,整个过程我画成了一个图。

面试时精简介绍DNS
"DNS,即域名系统,其核心作用是将人类易于记忆的域名(如 www.google.com
)转换为机器能够识别的IP地址。
一个完整的解析流程如下:
-
本地多级缓存查询 :客户端首先会依次查询浏览器缓存 、操作系统缓存 和本地 Hosts 文件 ,如果命中则直接返回结果。
-
发起递归查询 :若本地无缓存,客户端的解析器(Resolver)会向配置的本地DNS服务器 (通常由ISP提供或为公共DNS)发起一个递归查询 。
-
执行迭代查询 :本地DNS服务器收到请求后,会代替客户端进行一系列的迭代查询 。它会先询问根域名服务器 ,根服务器会引导它去找对应的顶级域名(TLD)服务器 ;TLD服务器再引导它去找负责该域名的权威域名服务器 。
-
获取并缓存结果 :最终,本地DNS服务器从权威服务器处获得域名与IP地址的映射关系,然后将这个结果返回给客户端,并将结果缓存起来 以备后续使用。
-
协议选择 :在协议层面,DNS查询为了追求速度,主要使用 UDP/53 端口。但当响应报文大于512字节,或在进行主备DNS服务器间的区域传输 时,会切换到 TCP/53 端口以保证数据的完整性和可靠性。"
关于递归查询和迭代查询的解释
客户端向 本地DNS服务器(也就是递归DNS) 发出的请求,是一个 递归查询 。意思是:"我把域名给你,你必须给我最终的IP地址,中间过程我不管。"
本地DNS服务器 为了完成任务,向外(根、顶级、权威)发出的一系列请求,是 迭代查询 。意思是:"请告诉我下一步该问谁。"
ARP
在传输一个 IP 数据报的时候,确定了源 IP 地址和目标 IP 地址后,就会通过主机「路由表」确定 IP 数 据包下一跳。然而,网络层的下一层是数据链路层,数据链路层数据的传输必须依赖MAC地址,所以我们还要知道「下一跳」的 MAC 地址。
由于主机的路由表中可以找到下一跳的 IP 地址,所以可以通过 ARP 协议,求得下一跳的 MAC 地址。
那么 ARP 又是如何知道对方 MAC 地址的呢?
简单地说,ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的。

ARP解析过程是广播和单播相结合的。
- ARP请求:ARP请求报文是一个广播报文。这意味着局域网内的所有设备都会收到这个请求。
- ARP响应:只有IP地址与请求匹配的设备会发送一个单播报文作为响应,将自己的MAC地址回复给发起请求的设备。
广播发出,单播返回!!!
RARP(被DHCP取代了)
ARP 协议是已知 IP 地址求 MAC 地址,那 RARP 协议正好相反,它是已知 MAC 地址求 IP 地址。
RARP协议的工作方式也是广播发出,单播返回。
RARP协议的设计初衷与ARP正好相反。
-
ARP :已知设备的IP地址 ,请求其对应的MAC地址。
-
RARP :已知设备的MAC地址 ,请求其对应的IP地址。
这个协议主要用于那些没有硬盘存储IP地址的无盘工作站。当这些工作站启动时,它们只知道自己的MAC地址,但不知道自己的IP地址。为了能够连接到网络,它需要向网络中的RARP服务器请求分配一个IP地址。
-
RARP请求(广播) :无盘工作站会向网络发送一个广播请求,内容大致是:"我的MAC地址是AA:BB:CC:DD:EE:FF,请告诉我我的IP地址是多少?"
-
RARP响应(单播) :网络中的RARP服务器收到这个广播后,会查询其配置表中与该MAC地址对应的IP地址,然后发送一个单播响应,告诉无盘工作站:"你的IP地址是192.168.1.10。"
无盘工作站收到这个单播响应后,就会配置自己的IP地址,从而能够正常地接入网络。

RARP协议的局限性
虽然RARP在过去发挥了重要作用,但它有几个明显的局限性:
-
需要专门的服务器:网络中必须有一台RARP服务器来响应请求。
-
只能获取IP地址:RARP只能提供IP地址,无法提供子网掩码、网关IP等其他网络配置信息。
正是因为这些局限性,RARP协议在今天已经被更强大、更全面的协议所取代,主要是DHCP(动态主机配置协议)。DHCP不仅能够动态分配IP地址,还能同时提供子网掩码、默认网关、DNS服务器地址等所有必要的网络配置信息,并且可以跨子网工作,因此成为了现代网络中主流的动态IP分配协议。
DHCP
DHCP主要用来为局域网中的主机动态分配IP地址和其他网络参数(如网关、DNS服务器),避免人工配置,DHCP在我们日常生活中使用的很多。
DHCP的基本过程(DORA流程)
DHCP的核心过程一般被总结为 DORA 四个阶段:
(Discover -- Offer -- Request -- Acknowledge)
记住这四个字母!!!DORA!!!
-
Discovery(发现)
-
当一台主机(客户端)刚接入网络,没有IP地址时,会发送一个 DHCP Discover 广播包(目的地址
255.255.255.255
,源地址0.0.0.0
)。 -
作用:向局域网内寻找DHCP服务器,请求网络配置信息。
-
-
Offer(提供)
-
网络中的DHCP服务器收到Discover后,会从其地址池中挑选一个可用IP地址,并返回 DHCP Offer 报文给客户端(通常仍然是广播)。
-
其中包含:
-
提议的IP地址
-
子网掩码
-
默认网关
-
DNS服务器地址
-
租约期限(lease time)
-
-
-
Request(请求)
-
客户端收到多个DHCP Offer时,会选择其中一个(一般是第一个响应的),然后向网络发送一个 DHCP Request 报文,表示接受该服务器提供的配置,并拒绝其他服务器。
-
这个报文同样是广播的,目的是让所有DHCP服务器都知道该客户端选择了哪一个。
-
-
Acknowledge(确认)
-
被选中的DHCP服务器收到Request后,会返回一个 DHCP ACK 报文,正式确认租约并提供完整的配置信息。
-
客户端收到ACK后,就可以配置自己的IP地址、网关和DNS,开始正常通信。
-
客户端: DHCP Discover ---> 广播 ---> 服务器
服务器: DHCP Offer ---> 广播 ---> 客户端
客户端: DHCP Request ---> 广播 ---> 服务器
服务器: DHCP ACK ---> 广播 ---> 客户端
可以看到就是有些步骤可以是单播,有些必须是广播,不过四个步骤全部都是广播是一定可行的。至于为什么有几步可以是单播,是因为DHCP报文中的broadcast这个字段设置的值不同罢了。

租约续订过程
DHCP分配的IP不是永久的,而是有 租约期(lease time)。在租约期到期前,客户端需要向DHCP服务器请求续约:
-
T1 定时器(通常为租约时间的 50%)
-
客户端会向原DHCP服务器发送 DHCP Request,请求续约。
-
如果服务器回应 DHCP ACK,则续约成功。
-
-
T2 定时器(通常为租约时间的 87.5%)
- 如果T1未能成功,客户端会广播发送续约请求,向任意DHCP服务器申请续约。
-
租约到期
- 如果没有任何服务器响应,客户端必须放弃当前IP,并重新进入DORA流程。
ICMP
ICMP 全称是 Internet Control Message Protocol,也就是互联网控制报文协议。
ICMP 是 IP 协议族的一部分,主要用于在 IP 主机、路由器之间传递控制信息和错误报告。它运行在 网络层(严格来说是 IP 的附属协议)。不用于传输用户数据,而是用于 网络诊断、错误提示、状态反馈。
当遇到问题的时候,总不能死个不明不白,没头没脑的作风不是计算机网络的风格。所以需要传出消 息,报告遇到了什么问题,这样才可以调整传输策略,以此来控制整个局面。
ICMP 主要的功能包括:
- 确认 IP 包是否成功送达目标地址、报告发送过程中 IP 包被废弃的原因和改 善网络设置等。
- 在 IP 通信中如果某个 IP 包因为某种原因未能达到目标地址,那么这个具体的原因将由 ICMP 负责 通知。
Ping和Traceroute
常见的网络工具 ping、traceroute 就依赖 ICMP 报文。
Ping 的作用是测试主机的连通性。它通过发送一个特殊的网络数据包(ICMP Echo Request)到目标主机,并等待对方的响应(ICMP Echo Reply)。
工作原理:它像是在问"你在吗?"。如果收到回复,就表示网络通畅。
主要功能:
连通性测试:确认你的设备与目标主机之间是否能够互相通信。
丢包率检测:统计发送和接收的数据包数量,计算丢包率。高丢包率通常意味着网络不稳定或拥堵。
延迟测量:计算数据包往返所需的时间(RTT,Round-trip Time),以此评估网络延迟。延迟越低,网络速度越快。
Traceroute 的作用是追踪数据包的路径。它能显示数据包从你的设备到目标主机所经过的所有中间路由器,并记录每一跳的延迟。
工作原理:它像是在问"你是第几站?"。通过发送一系列特殊的数据包,并利用 TTL(生存时间)机制,它能逐一发现数据包经过的所有路由器。
主要功能:
路径追踪:显示数据包在网络中的完整传输路径。
故障定位:当你访问某个网站很慢时,Traceroute 可以帮助你找出是哪一跳(哪个路由器)出现了问题,是延迟高还是丢包严重。
IP 数据包传输时,一旦发生错误(如目标不可达、超时、路由失败等),相关设备会向源主机发送 ICMP 报文。报文包含错误类型和相关的 IP 数据包信息,方便源主机定位问题。
ICMP 报文类型(差错报文 和 查询报文)
1. 差错报文(Error Messages)
用于报告传输中出现的异常:
-
目标不可达(Destination Unreachable,Type 3)
例如网络不可达、主机不可达、端口不可达等。
-
超时(Time Exceeded,Type 11)
IP 数据包 TTL 减为 0 时触发,
traceroute
就是利用这一机制。 -
参数问题(Parameter Problem,Type 12)
报文头字段有错误。
-
源抑制(Source Quench,Type 4,已弃用)
早期用于拥塞控制,现代网络中已废弃。
2. 查询报文(Query Messages)
用于网络诊断和信息请求:
-
回显请求与应答(Echo Request / Echo Reply,Type 8/0)
ping
使用,用来测试主机是否可达。 -
时间戳请求与应答(Timestamp Request / Reply,Type 13/14)
用于测量时延和同步时间。
-
路由器通告与请求(Router Advertisement / Solicitation,Type 9/10)
路由器发现机制。
本文很多内容来自:小林coding