DNS
DNS(Domain Name System,域名系统) 是一种将域名(例如 www.example.com)转换为 IP 地址(例如 192.0.2.1)的系统。由于计算机在互联网上通过 IP 地址进行通信,而人类使用的是域名,DNS 就是为了桥接这两者,提供域名与 IP 地址之间的转换功能。
DNS 使得用户可以通过易于记忆的域名来访问网站,而不需要记住复杂的 IP 地址。它就像互联网的“电话簿”,记录了所有域名到 IP 地址的映射。
DNS 的工作原理基于层次化的结构,分为多个层级的服务器和缓存机制。当你输入一个域名时,DNS 会根据以下步骤来解析并返回相应的 IP 地址。
在域名中,越靠右的位置表示其层级越高。
根域是在最顶层,它的下一层就是 com 顶级域,再下面是 server.com。
所以域名的层级关系类似一个树状结构:
- 根 DNS 服务器
- 顶级域 DNS 服务器(com)
- 权威 DNS 服务器(server.com)
DNS(域名系统)解析的详细流程可以分为多个步骤,涉及到从用户发起请求到最终返回 IP 地址的过程。以下是 DNS 解析的详细流程:

1. 用户发起请求
用户在浏览器中输入一个域名(例如 www.example.com)。浏览器需要将这个域名转换为 IP 地址才能访问服务器。
2. 本地 DNS 缓存查询
操作系统会首先检查本地的 DNS 缓存中是否有该域名对应的 IP 地址。如果缓存中有结果,则直接返回 IP 地址,还没有就检查本机域名解析文件 hosts,如果还是没有,就会对 DNS 服务器进行查询。
3. 本地 DNS 服务器查询
如果本地没有缓存,操作系统会向本地 DNS 服务器(通常是路由器或操作系统配置的 DNS 服务器,也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)发送查询请求。
4. 递归查询过程
如果本地 DNS 服务器无法直接解析该域名,它会向更高层次的 DNS 服务器进行递归查询。以下是递归查询的详细过程:
- 根域名服务器查询: 本地 DNS 解析器首先会向根域名服务器发送查询请求。根域名服务器是 DNS 层次结构的最上层,负责管理顶级域服务器的地址。根服务器的 IP 地址通常是预配置在本地 DNS 解析器中的。 根域名服务器会返回该域名所属(如
.com、.org)顶级 DNS 服务器的 IP 地址。 - 顶级 DNS 服务器查询: 接下来,本地 DNS 服务器会向顶级 DNS 服务器(例如,
.com域的服务器)发送查询请求。 顶级 DNS 服务器会返回该域名的权威 DNS 服务器的 IP 地址。 - 权威 DNS 服务器查询: 本地 DNS 解析器最终向权威 DNS 服务器(即负责管理特定域名的 DNS 服务器)发送查询请求。权威 DNS 服务器存储着域名的真实记录,如 A 记录、CNAME 记录等。权威 DNS 服务器会返回该域名对应的 IP 地址(A 记录)。
5. 返回 IP 地址
DNS 解析器将从权威 DNS 服务器获得的 IP 地址返回给用户的操作系统,操作系统再将其传递给浏览器。
6. 浏览器访问服务器
最后,浏览器通过返回的 IP 地址向目标服务器发起请求,建立连接并获取网页内容。
7. DNS 缓存
为了提高后续访问效率,操作系统和本地 DNS 服务器会缓存此域名与 IP 地址的映射,缓存会在一定时间后过期(通常由 TTL 值控制),以减少后续解析的延迟。
ARP
ARP(地址解析协议,Address Resolution Protocol) 是一种用于将网络层地址(如 IPv4 地址)映射到数据链路层地址(如 MAC 地址)的协议。ARP 主要用于局域网(LAN)内,确保设备能够找到彼此的物理地址以进行数据包的发送。
ARP 的具体流程
1. 设备发起 ARP 请求
假设设备 A(源设备)要向设备 B(目标设备)发送数据包,但设备 A 只知道设备 B 的 IP 地址,而不知道其 MAC 地址。此时,设备 A 会发送一个ARP 请求广播包到网络中,内容包括目标设备的 IP 地址,并询问 “谁拥有这个 IP 地址?请告知我你的 MAC 地址。” ARP 请求包格式:
- 目标 IP 地址:设备 B 的 IP 地址
- 目标 MAC 地址:全零(因为设备 A 还不知道目标 MAC 地址),
00:00:00:00:00:00 - 源 IP 地址:设备 A 的 IP 地址
- 源 MAC 地址:设备 A 的 MAC 地址
2. 设备接收 ARP 请求
网络中的所有设备都会收到这个广播包,但只有目标设备 B 会检查包中的目标 IP 地址是否与自身 IP 地址匹配。如果匹配,设备 B 会返回自己的 MAC 地址。
3. 设备返回 ARP 响应:
设备 B 向设备 A 发送一个 ARP 响应 包,包中包含设备 B 的 MAC 地址,并且是单播发送给设备 A 的。 ARP 响应包格式:
- 目标 IP 地址:设备 A 的 IP 地址
- 目标 MAC 地址:设备 A 的 MAC 地址
- 源 IP 地址:设备 B 的 IP 地址
- 源 MAC 地址:设备 B 的 MAC 地址
4. 设备 A 更新 ARP 缓存:
当设备 A 接收到 ARP 响应后,它会将设备 B 的 IP 地址和 MAC 地址的映射关系保存到 ARP 缓存中。这样,如果设备 A 需要再次与设备 B 通信,就可以直接使用缓存中的 MAC 地址,而不需要重新发起 ARP 请求。
5. 数据传输:
设备 A 现在知道设备 B 的 MAC 地址,便可以将数据包发送到设备 B 的 MAC 地址,数据就能够在局域网中正确传输。
ARP 缓存
- 为了减少每次通信时都要发送 ARP 请求,设备会将 ARP 映射关系保存到本地的 ARP 缓存中。ARP 缓存会定期过期,过期后需要重新发送 ARP 请求来更新映射关系。
- 缓存中包含了 IP 地址和对应的 MAC 地址的映射,每个条目都有生存时间(TTL,Time to Live),TTL 到期后,缓存会被清除。
ARP 的类型
- ARP 请求:设备发起查询,询问目标设备的 MAC 地址。
- ARP 响应:目标设备回应请求,提供自己的 MAC 地址。
ARP 的安全性问题
- ARP 欺骗(ARP Spoofing):恶意攻击者可以向局域网中的设备发送虚假的 ARP 响应,使得设备误认为攻击者的 MAC 地址与某个合法设备的 IP 地址绑定,从而实现中间人攻击、数据窃听或拒绝服务攻击。
- ARP 缓存中毒:由于 ARP 请求和响应是不加密的,攻击者可以伪造 ARP 响应,导致目标设备缓存了错误的 MAC 地址,从而让攻击者拦截或篡改数据。
总的来说,ARP 是一个非常基础但至关重要的协议,确保设备在同一局域网内能够正确地找到彼此并进行数据通信。
DHCP
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种网络协议,主要用于为网络中的设备(如计算机、手机、打印机等)自动分配 IP 地址及其他网络配置信息。它使得网络管理员无需手动为每个设备分配静态 IP 地址,从而简化了网络管理。
DHCP 的工作流程
DHCP 工作流程可以分为以下几个阶段,通常是一个四步过程(称为 DORA):
1. DHCP Discover(客户端广播请求)
- 目的:客户端设备(如电脑、手机等)在启动时,并不知晓网络中是否有可用的 IP 地址,因此,它会向网络广播一个 DHCP Discover 消息,向 DHCP 服务器请求分配 IP 地址。
- 信息:该消息是一个广播包,目的地址是
255.255.255.255,表示发送给网络中的所有设备,主要用于查找可用的 DHCP 服务器。
2. DHCP Offer(DHCP 服务器响应)
- 目的:网络中所有的 DHCP 服务器接收到客户端的 DHCP Discover 消息后,会为客户端提供一个可用的 IP 地址,并将此信息发送回客户端。
- 信息:DHCP 服务器发送的 Offer 消息中包含:
- 服务器为客户端提供的 IP 地址。
- 子网掩码。
- 默认网关地址。
- DNS 服务器地址(如果有配置)。
- 租约时间(该 IP 地址的有效期)。
- 这时,客户端收到了来自 DHCP 服务器的响应,但并没有确定分配的 IP 地址。
3. DHCP Request(客户端选择响应)
- 目的:客户端选择其中一个服务器提供的 IP 地址,并向该服务器发出 DHCP Request 消息,表示自己接受此 IP 地址。
- 信息:DHCP Request 消息是广播发送的,意味着网络中的所有 DHCP 服务器都会收到此请求,但只有客户端选择的那台 DHCP 服务器会被最终确认。
- 在这一步,客户端会通知所有 DHCP 服务器其已选择的 IP 地址,并且告知其他服务器其不再需要提供该地址。
4. DHCP Acknowledge(服务器确认)
- 目的:当 DHCP 服务器接收到客户端的 Request 消息时,确认并分配 IP 地址。服务器发送一个 DHCP Acknowledge(ACK)消息,表示 IP 地址分配已成功。
- 信息:此确认消息中会再次包含:
- 客户端分配的 IP 地址。
- 子网掩码、默认网关、DNS 等网络配置信息。
- 租约时间(即 IP 地址的使用期限)。

其他细节
- 租约(Lease):DHCP 分配的 IP 地址是有时间限制的,这个时间称为“租约”。租约到期前,客户端可以发送续约请求(DHCP Request)来延长租约。
- DHCP NAK(Negative Acknowledgment):如果 DHCP 服务器无法满足客户端的请求(比如某个 IP 地址已经被分配给其他设备),它会发送一个 DHCP NAK 消息,告知客户端重新请求一个新的 IP 地址。
- 重新获取(Rebinding):当客户端使用的 IP 地址租约快到期时,客户端会尝试重新从 DHCP 服务器获取一个新的 IP 地址或者延长租约。如果客户端不能联系到原来的 DHCP 服务器,它会尝试联系其他 DHCP 服务器。
-
DHCP 交互中,全程都是使用 UDP 通信。
-
DHCP 中继代理是解决跨子网 DHCP 请求的关键技术,它可以将客户端的 DHCP 请求从一个子网转发到不同子网的 DHCP 服务器,确保客户端能够正常获取 IP 地址。
总结
- Discover:客户端广播请求 IP 地址。
- Offer:DHCP 服务器响应提供可用的 IP 地址。
- Request:客户端选择并请求确认提供的 IP 地址。
- Acknowledge:DHCP 服务器确认并分配 IP 地址给客户端。
这个过程确保了客户端可以自动配置网络设置,无需手动配置 IP 地址、子网掩码、网关等信息。
ICMP
ICMP(Internet Control Message Protocol,互联网控制消息协议)是一种用于网络设备之间发送控制消息的协议,主要用于诊断和错误报告。它通常与 IP 协议一起使用,并且是一种网络层协议。ICMP 的主要功能是帮助网络设备(如路由器)报告错误信息或传达控制信息,比如不可达主机、网络或端口等。
ICMP 的常见用途
- 错误报告:当一个数据包无法到达目的地时,ICMP 会发送错误报告。例如,当目的主机不可达或路由不可达时,ICMP 就会生成一个消息。
- 诊断工具:ICMP 通常用于网络诊断工具,如
ping和traceroute。ping通过发送 ICMP 回显请求消息并等待回显应答来测试网络连通性。
ICMP 的基本工作流程
1. 发送 ICMP 请求
- 发送方生成一个 ICMP 请求消息并将其封装到 IP 数据包中。
- 这可以是如
ping命令所使用的**回显请求(Echo Request)**消息。
2. 通过网络传输
- ICMP 请求消息像其他 IP 数据包一样通过网络传输,经过中间路由器或其他设备。
3. 接收 ICMP 请求:
- 目标主机收到 ICMP 请求消息后,会检查消息类型,并根据请求类型做出相应处理。
4. 返回 ICMP 应答
- 如果目标主机正常工作并能接收请求,它会生成相应的 ICMP 应答消息并将其封装到 IP 数据包中发送回发送方。
- 例如,收到回显请求时,目标会发送回显应答(Echo Reply)消息。
5. ICMP 错误报告
- 如果数据包传输过程中发生了错误(如目的地不可达、TTL 过期等),路由器会生成相应的 ICMP 错误消息(如目的不可达消息或时间超过消息)并返回给源主机。
ICMP 消息类型
ICMP 消息可以分为几类,每种类型有不同的功能,最常见的包括:
- Echo Request(回显请求):用于测试目标主机是否可达,通常通过
ping命令发起。 - Echo Reply(回显应答):用于响应回显请求,告诉发送者目标主机正常。
- Destination Unreachable(目的不可达):当路由器无法将数据包送到目标时,发送给发送方的错误消息。
- Time Exceeded(时间超过):当数据包的 TTL(生存时间)值为 0 时,路由器会发送此消息,通常用于
traceroute工具。 - Redirect(重定向):当路由器发现发送方应该使用另一个路由时,发送此消息来指引发送方。
ICMP 消息的格式
每个 ICMP 消息都由以下几个部分组成:
- 类型(Type):消息的类型标识符,表示消息的目的。比如回显请求的类型是 8,回显应答的类型是 0。
- 代码(Code):类型下的细分信息,用于提供更多的上下文。例如,
Destination Unreachable消息的代码表示不同的不可达原因(网络不可达、主机不可达等)。 - 校验和(Checksum):用于检测消息在传输过程中是否被损坏。
- 其他数据:根据不同的消息类型,这部分的内容会有所不同,比如回显请求和回显应答消息会包含一个“标识符”和“序列号”来匹配请求和应答。
ICMP 的应用
- 网络诊断:通过工具如
ping、traceroute来检查网络的连通性和路径。 - 路由调整:某些路由器会根据 ICMP 重定向消息来调整数据包的路由。
- 错误报告:帮助发送方识别传输过程中出现的问题。
总之,ICMP 在网络中起到了非常重要的控制和反馈作用,尤其是在网络故障检测和调试过程中。
NAT
NAT(网络地址转换,Network Address Translation)是一种网络技术,用于在不同的 IP 地址空间之间转换数据包的源 IP 或目的 IP 地址。通常,NAT 用于将私有网络地址(通常是内部网络中的地址)转换为公共网络地址(例如互联网的地址),或者将公共地址转换回私有地址。这项技术广泛应用于路由器、防火墙和网关设备中,以便实现网络地址复用和提高安全性。
原理
NAT 的工作原理基于以下几个步骤:
- 私有网络到公共网络的转换:
- 当内部设备(如本地网络中的计算机)发起与外部网络(如互联网)的通信时,NAT 设备(通常是路由器)会将数据包的源 IP 地址从私有 IP 地址转换为一个公共 IP 地址。
- 例如,内部网络中的一台计算机的 IP 地址可能是
192.168.1.10,而 NAT 设备会将该 IP 地址转换为公共 IP 地址,如203.0.113.1。
- 端口映射(如果使用 PAT 时):
- 如果多个内部设备共享同一个公共 IP 地址,NAT 会使用端口号来区分不同的会话,这个过程叫做端口地址转换(PAT,Port Address Translation)。每个从内部网络发出的请求都会分配一个唯一的端口号,这样即使多个设备共享同一个公共 IP 地址,也能通过不同的端口号来区分不同的连接。
- 外部网络返回数据时的反向转换:
- 当外部网络(例如互联网)发送数据包到 NAT 设备时,NAT 会根据预设的规则或转换表,将数据包的目的 IP 地址转换回相应的私有 IP 地址,并将其转发到相应的内部设备。
示例
假设内部网络有一台设备192.168.1.10,NAT 设备的公共 IP 地址是203.0.113.1:
- 内部设备发起请求:设备
192.168.1.10向互联网发送 HTTP 请求。 - NAT 转换:NAT 设备将源 IP 地址
192.168.1.10转换为公共 IP 地址203.0.113.1,并为该请求分配一个端口号(例如,203.0.113.1:10001)。 - 互联网响应:互联网服务器将响应数据包发送到
203.0.113.1:10001。 - NAT 反向转换:NAT 设备根据端口号将目标地址转换回私有 IP 地址
192.168.1.10,并将数据转发给该设备。
常见的 NAT 类型
- 静态 NAT:
- 每个私有 IP 地址都映射到一个固定的公共 IP 地址。这种映射是永久性的,适用于需要直接访问外部网络的设备。
- 动态 NAT:
- 私有 IP 地址池会动态地映射到公共 IP 地址池中的地址,这样可以在多个设备之间共享公共 IP 地址。
- 端口地址转换(PAT):
- 也叫 NAT 过载。它允许多个私有 IP 地址共享一个公共 IP 地址,使用不同的端口号来区分不同的连接。PAT 是最常用的 NAT 类型,适用于家庭和小型办公室的网络。
优势
- 节省 IP 地址:NAT 可以让多个私有网络中的设备共享一个公共 IP 地址,从而缓解 IPv4 地址不足的问题。
- 安全性:NAT 通过隐藏内部网络的真实 IP 地址,使得外部攻击者难以直接访问内部网络。
- 简化网络配置:NAT 允许内部网络使用私有 IP 地址,网络管理员无需为每个设备分配公共 IP 地址。
NAT 是现代网络中不可或缺的一部分,尤其是在 IPv4 地址匮乏的情况下,它使得大规模部署私有网络变得可能。