目录
[一、DNS(Domain Name System)](#一、DNS(Domain Name System))
[1. DNS 的技术背景](#1. DNS 的技术背景)
[2. 域名结构简介](#2. 域名结构简介)
[3. DNS 域名解析的完整过程(⭐⭐⭐)](#3. DNS 域名解析的完整过程(⭐⭐⭐))
[3.1 本地缓存查询(递归查询)](#3.1 本地缓存查询(递归查询))
[3.2 全网迭代查询(如果 Local DNS 也没有缓存)](#3.2 全网迭代查询(如果 Local DNS 也没有缓存))
[二、ICMP 协议(网络的"听诊器")](#二、ICMP 协议(网络的“听诊器”))
[1. ICMP 的功能与定位](#1. ICMP 的功能与定位)
[2. ICMP 协议格式简述](#2. ICMP 协议格式简述)
[3. ping(⭐⭐⭐)](#3. ping(⭐⭐⭐))
[4. traceroute (Windows 下叫 tracert)](#4. traceroute (Windows 下叫 tracert))
[三、NAT 技术 (Network Address Translation)](#三、NAT 技术 (Network Address Translation))
[1. NAT 技术背景](#1. NAT 技术背景)
[2. NAT IP 转换过程 (Basic NAT)](#2. NAT IP 转换过程 (Basic NAT))
[3. NAPT (Network Address Port Translation)(⭐⭐⭐)](#3. NAPT (Network Address Port Translation)(⭐⭐⭐))
[4. NAT 技术的缺陷(⭐⭐⭐)](#4. NAT 技术的缺陷(⭐⭐⭐))
[1. 正向代理 :代表客户端的"代购"](#1. 正向代理 :代表客户端的“代购”)
[1.1 核心概念](#1.1 核心概念)
[1.2 关键特征](#1.2 关键特征)
[1.3 典型应用场景](#1.3 典型应用场景)
[2. 反向代理 :代表服务器的"前台客服"](#2. 反向代理 :代表服务器的“前台客服”)
[2.1 核心概念](#2.1 核心概念)
[2.2 关键特征](#2.2 关键特征)
[2.3 典型应用场景(Nginx 是此领域的绝对霸主)](#2.3 典型应用场景(Nginx 是此领域的绝对霸主))
[3. 正反向代理的核心差异(⭐⭐⭐)](#3. 正反向代理的核心差异(⭐⭐⭐))
[五、代理服务器 vs NAT](#五、代理服务器 vs NAT)
[1. 工作层次不同](#1. 工作层次不同)
[2. 处理开销不同](#2. 处理开销不同)
一、DNS(Domain Name System)
1. DNS 的技术背景
虽然 IP 地址对于路由器和计算机来说非常高效(直接进行二进制位运算),但对于人类来说极度反人类。
为了让人类能更直观地访问网络,工程师发明了域名(Domain Name) 。而 DNS 协议 的核心使命,就是充当互联网的"通讯录",负责将人类可读的域名,自动翻译成机器通信所需的 IP 地址。
2. 域名结构简介
域名并不是随便起的一个名字,它是一个有着严格等级的树状树状结构 。 一个完整的域名其实在最后都有一个"点",例如:www.baidu.com.
.(根域名):全网最高管理节点(全球只有13组根DNS服务器)。
.com(顶级域名 TLD) :代表商业机构(其他如.org,.cn,.edu)。
baidu.com(二级域名 SLD):企业或个人向域名提供商申请的专属名字。
www(三级/主机名) :企业内部自己划分的服务器名称(比如mail.baidu.com)。
3. DNS 域名解析的完整过程(⭐⭐⭐)
当你在浏览器输入 www.baidu.com 并按下回车时,在发起 TCP 三次握手之前,系统会先经历一次极其复杂的 DNS 解析长征。过程分为两大部分:本地查询 与 网络查询。
3.1 本地缓存查询(递归查询)
浏览器缓存:浏览器先看看自己有没有存过这个域名的 IP。
操作系统缓存 (hosts 文件) :查阅本地的
/etc/hosts或 Windows 的hosts文件。路由器缓存:询问家里的路由器有没有记录。
本地域名服务器 (Local DNS) :如果上面都没有,电脑会向你的网络运营商(电信/联通,或者是你手动配置的
8.8.8.8)的 DNS 服务器求助。通常 90% 的查询在这里就能命中缓存并返回。
3.2 全网迭代查询(如果 Local DNS 也没有缓存)
Local DNS 服务器会代替你,去互联网上进行"迭代查询"(也就是挨个敲门问):
问根域名服务器 :Local DNS 问根服务器:"你知道
www.baidu.com吗?"根服务器说:"我不知道具体的,但我知道.com的顶级域名服务器在哪,你去问它。"问顶级域名服务器 (TLD) :Local DNS 去问
.com服务器。.com服务器说:"我不知道具体 IP,但这个域名是归baidu.com的权威域名服务器管的,你去问它。"问权威域名服务器 :Local DNS 找到百度的权威服务器,权威服务器查了下自己的表格,给出准确答复:"
www.baidu.com的 IP 是39.156.66.10。"返回与缓存:Local DNS 把结果告诉你的电脑,并把这个结果缓存在自己这里,方便下一个问的人。
二、ICMP 协议(网络的"听诊器")
IP 协议只负责"尽力而为"地发数据,如果数据在半路路由器被丢弃了(比如 TTL 耗尽、网络不可达),发送方是完全不知道的。为了弥补这个缺陷,ICMP (Internet Control Message Protocol,互联网控制报文协议) 诞生了。
1. ICMP 的功能与定位
功能:用于在 IP 主机、路由器之间传递控制消息(包括网络通不通、主机是否可达、路由是否可用等错误诊断信息)。
定位(极易混淆) :ICMP 虽然是网络层的辅助协议,但它的报文是封装在 IP 数据报的有效载荷中发送的(IP 报头中的协议号为 1)。
2. ICMP 协议格式简述

ICMP 报文的前 4 个字节是统一的:
8 位类型 (Type) :标识这是什么类型的消息(例如
8代表请求,0代表回显应答,3代表目标不可达)。8 位代码 (Code) :进一步细化类型(例如在"目标不可达"类型中,代码
0表示网络不可达,代码1表示主机不可达,代码3表示端口不可达)。16 位校验和:校验整个 ICMP 报文。
3. ping(⭐⭐⭐)
ping 是基于 ICMP 协议开发的网络诊断工具。
工作原理 :它向目标主机发送一个 ICMP Echo Request (类型 8) 报文,如果目标主机网络正常且没开禁 ping 防火墙,就会返回一个 ICMP Echo Reply (类型 0) 报文。通过计算一来一回的时间差,就能判断网络延迟和丢包率。
【面试必考点】 :
ping命令是没有端口号 的!端口号是传输层(TCP/UDP)的概念,而ping直接使用网络层的 ICMP 协议,根本没到传输层。
4. traceroute (Windows 下叫 tracert)
这个命令用来追踪数据包到达目标主机所经过的每一个路由器。它的实现原理:
巧妙利用 IP 报头的 TTL (生存时间):
traceroute先发一个数据包,故意把 IP 报头里的 TTL 设置为 1 。包到达第一个路由器时,TTL 减为 0,路由器把包丢弃,并返回一个 ICMP 超时(Time Exceeded, 类型 11) 报文。这样我们就拿到了第 1 个路由器的 IP。接着发第二个包,TTL 设置为 2。包经过第一个路由器(TTL 减为 1),到达第二个路由器时 TTL 归 0,第二个路由器返回 ICMP 超时。我们拿到了第 2 个路由器的 IP。
如此循环递增 TTL,直到包最终到达目的主机,目的主机返回端口不可达的 ICMP 报文,追踪结束。
三、NAT 技术 (Network Address Translation)
1. NAT 技术背景
IPv4 地址只有约 43 亿个,早在多年前就被分配殆尽。为了让全球数百亿台设备都能上网,工程师划分了"私有 IP"和"公网 IP"。NAT 技术应运而生,它部署在路由器上,负责在这两种 IP 之间进行无缝转换,成功为 IPv4 续命了几十年。
2. NAT IP 转换过程 (Basic NAT)
最基础的 NAT 发生在家用路由器或企业网关上。 当内网主机(如 192.168.1.10)向公网发数据时,路由器会将 IP 报头中的源 IP 替换为路由器 WAN 口的公网 IP (如 203.0.113.1),并记录映射关系。等公网数据返回时,路由器再根据映射表,将目的 IP 替换回内网主机的私有 IP。
3. NAPT (Network Address Port Translation)(⭐⭐⭐)
基础 NAT 有个致命缺陷:如果只有一个公网 IP,内网十几台电脑同时上网,路由器怎么区分返回的数据该给谁? 这就需要 NAPT(网络地址端口转换) ,它不仅转换 IP,还转换传输层的端口号。
内网主机 A (IP_A : 端口 1111) 访问百度。
路由器将其转换为 (公网 IP : 分配新端口 60001)。
内网主机 B (IP_B : 端口 2222) 访问百度。
路由器将其转换为 (公网 IP : 分配新端口 60002)。
百度返回数据给公网 IP 的
60001端口时,路由器一查表,就知道这是属于主机 A 的数据。借助 65535 个端口,NAPT 实现了"一个公网 IP 带动全公司上网"的奇迹。
4. NAT 技术的缺陷(⭐⭐⭐)
虽然 NAT 是救星,但它也破坏了互联网设计的初衷:
破坏了端到端通信:公网无法主动发起连接访问躲在 NAT 后面的内网主机。这给 P2P 下载、内网穿透、联机游戏带来了巨大的麻烦。
性能开销:路由器不仅要查路由表,还要拆开传输层报头去修改端口号,重新计算校验和,消耗了设备性能,增加了网络延迟。
限制了某些协议:某些协议(如早期的 FTP)会在应用层的数据载荷里包含自己的 IP 地址,NAT 只改报头不管载荷,就会导致通信失败。
四、代理服务器
代理服务器的本质是一个"中间商 "。客户端不直接和目标服务器建立 TCP 连接,而是先和代理服务器建连,代理服务器再代替客户端去和目标服务器建连并拉取数据。
根据"代理服务器究竟代表谁的利益",我们可以将其分为正向代理和反向代理。
1. 正向代理 :代表客户端的"代购"
1.1 核心概念
正向代理位于客户端 和目标服务器 之间。客户端为了向目标服务器发送请求,必须先将请求发送给代理服务器,代理再将请求转发给目标服务器,最后将拿到的响应转交回客户端。 在正向代理模型中,代理服务器代表的是"客户端"。
生活类比:你想买一款国外的限量版球鞋,但因为地域限制买不到。于是你找了一个海外"代购"。你把钱和需求给代购,代购去店里买下来,然后再寄给你。鞋店老板只知道代购来买鞋,根本不知道背后真正的买家是你。
1.2 关键特征
隐藏了真实的客户端:目标服务器(如 Google 的服务器)只能看到代理服务器的 IP,无法获取真实客户端的 IP。
主动配置:通常需要客户端主动设置代理服务器的 IP 和端口(例如在浏览器网络设置中配置,或者使用某些客户端软件)。
1.3 典型应用场景
突破访问限制:由于某些原因,客户端无法直接访问特定网站。通过一个能访问该网站的海外代理服务器,就能实现间接访问。
企业/校园上网行为管理:公司内网所有电脑必须通过公司的正向代理服务器才能上网。网管可以在代理服务器上配置规则,屏蔽游戏网站或视频网站,甚至监控员工的上网记录。
内容缓存(节约带宽):如果局域网内有多台主机都要下载同一个几百兆的软件更新包,正向代理服务器可以在第一次下载时将其缓存在本地。后续其他主机再请求时,直接从代理服务器拿,极大节省了公网出口带宽。
2. 反向代理 :代表服务器的"前台客服"
2.1 核心概念
反向代理位于目标服务器 的前端。对于客户端而言,反向代理服务器就是 目标服务器。客户端直接将请求发送给反向代理,反向代理再根据某种路由规则,将请求分发给背后的多台真实服务器处理,最后将结果返回给客户端。 在反向代理模型中,代理服务器代表的是"服务端"。
生活类比:你拨打中国移动的 10086 客服热线。你并不知道,也不关心电话背后接听的是哪一个具体的客服小姐姐。10086 这个总机号码就是"反向代理",它负责把你分配给目前空闲的某个客服人员。
2.2 关键特征
隐藏了真实的服务端:客户端只能看到反向代理服务器的公网 IP,根本不知道背后真正提供计算和数据的服务器集群(可能是几十台内网机器)的 IP 是多少。
客户端无感知:客户端不需要进行任何额外配置,就像访问普通网站一样访问反向代理的地址。
2.3 典型应用场景(Nginx 是此领域的绝对霸主)
负载均衡 (Load Balancing):双十一期间,淘宝的并发流量极大,一台服务器根本扛不住。反向代理服务器(如 Nginx 或硬件负载均衡 F5)可以接收海量请求,并使用轮询、IP 哈希等算法,将流量均匀地分发给背后的 100 台业务服务器。
安全防护与隐藏 (WAF):因为真实服务器的 IP 没有暴露在公网上,黑客无法直接发起攻击。反向代理可以充当网络防火墙,统一清洗恶意流量、拦截 DDoS 攻击。
SSL/TLS 统一终结:HTTPS 的加解密过程非常消耗 CPU。可以让反向代理服务器统一负责处理 HTTPS 证书和加解密,解密后再用明文 HTTP 转发给后端的真实服务器,从而大幅减轻后端服务器的计算压力。
3. 正反向代理的核心差异(⭐⭐⭐)
| 维度 | 正向代理 (Forward Proxy) | 反向代理 (Reverse Proxy) |
|---|---|---|
| 代理对象 | 客户端(Client) | 服务端(Server) |
| 部署位置 | 靠近客户端所在的局域网或终端设备 | 靠近服务端所在的机房或数据中心 |
| 隐藏对象 | 隐藏了真实的客户端 | 隐藏了真实的服务端 |
| 主要目的 | 突破访问限制、上网行为管控、本地缓存 | 负载均衡、安全防护、分担服务器压力 |
| 客户端感知 | 通常需要主动配置,客户端明确知道代理的存在 | 不需要配置,客户端以为代理就是真实服务器 |
| 典型代表软件 | VPN 客户端、Squid | Nginx、HAProxy、Apache |
五、代理服务器 vs NAT
1. 工作层次不同
NAT 工作在网络层和传输层:它非常底层,只是像个无情的流水线工人,单纯地修改 IP 报头里的源/目的 IP,以及修改 TCP/UDP 报头里的端口号。数据包本身的有效载荷它看都不看。
代理服务器工作在应用层 :它是高层协议。代理服务器必须要彻头彻尾地参与 TCP 三次握手 。客户端和代理建连,代理再和目标服务器建连(这里是两个完全独立的 TCP 连接)。代理会解析应用层的数据(如 HTTP 请求头),根据里面的内容来决定下一步动作。
2. 处理开销不同
NAT 依靠路由器的硬件芯片转发,速度极快,开销极小;代理服务器通常是运行在通用服务器(如 Linux 机器)上的软件,需要占用大量的 CPU 和内存进行报文的重组和解析。