055 其他重要协议和技术

055 其他重要协议和技术
小米里的大麦其他重要协议和技术
1. DNS
1. DNS 背景与作用
DNS(Domain Name System,域名系统) 是互联网中 负责把域名转换为 IP 地址 的系统。人记域名(如
www.baidu.com),机器识别 IP(如110.242.69.21)。DNS 就是充当这两者之间的“翻译官”。
为什么需要 DNS?
- IP 地址难记、会变动,而域名容易记。
- 访问网站、发邮件、请求 API 时都依赖域名解析到具体主机。
2. 域名简介
域名是分层结构(从右往左层级递减):
1 | www.example.com. |
说明:
- 根域:隐藏的 “.”,由全球 13 组根 DNS 服务器管理。
- 顶级域(TLD):如
.com:商业类;.net:网络服务类;.org:开源组织或非盈利组织。 - 二级域:企业或组织自行注册(如 baidu.com)。
- 子域(三级及以下):如
www.baidu.com、api.baidu.com。
3. DNS 解析过程(简化说明)
DNS 查询是一个“从根到叶”的 分层查找过程,递归服务器负责一层层问下去,直到拿到最终结果。
假设用户访问 www.baidu.com:
浏览器缓存查询: 先查本地浏览器缓存,看是否已有 IP。
操作系统缓存查询: 若浏览器无,则查 OS 缓存(Linux 可看
/etc/hosts)。本地 DNS 服务器查询:(通常是自己所在网络的 DNS,如 8.8.8.8)本地 DNS 会缓存常见记录,若命中则直接返回。
递归查询(若本地 DNS 未命中):
向 根 DNS 请求:谁管
.com?根 DNS 返回顶级域服务器地址。
向 .com 顶级域 DNS 请求:谁管
baidu.com?返回
baidu.com的权威 DNS 地址。向 baidu.com 权威 DNS 请求:
www的 IP 是多少?最终得到
110.242.69.21。
4. dig 工具简介与安装
dig(Domain Information Groper)是 DNS 调试利器,用于查询域名解析信息。linux dig 命令使用方法 | 慕课网。
安装命令:
1. CentOS 7.6
1 | sudo yum install bind-utils -y |
2. Ubuntu 22.04
1 | sudo apt update |
5. 浏览器输入 URL 后发生的事情(核心)
整体流程可以概括为五个阶段:输入域名 → DNS 解析 → 建立连接 → 请求响应 → 页面渲染。其中 DNS 是从域名到 IP 的入口,TCP 是可靠通信的保障,HTTP/HTTPS 是传输层的协议规范,最后浏览器负责把字节变成视觉结果。
DNS 解析:浏览器 → 操作系统 → 本地 DNS→ 根 →TLD→ 权威 DNS → 得到服务器 IP。
建立 TCP 连接:通过三次握手(SYN → SYN+ACK → ACK)。若是 HTTPS,会在 TCP 之后进行 TLS 握手(证书校验 + 加密协商)。
发送 HTTP 请求:浏览器发出请求报文:
1
2GET /
Host: www.baidu.com服务器处理请求:Web 服务器(如 Nginx)解析请求,调用后端逻辑,生成响应。
返回 HTTP 响应:返回状态码、响应头、HTML 正文等。
浏览器渲染页面
- 解析 HTML → 构建 DOM 树。
- 解析 CSS → 构建 CSSOM 树。
- 执行 JS、合成渲染树、布局、绘制页面。
建立持久连接(Keep-Alive):用于减少后续请求的延迟。
2. ICMP 协议
ICMP 是 IP 协议的辅助协议,主要用于网络诊断与错误报告。常见命令有 ping(检测连通性)和 traceroute(追踪路由路径)。ICMP 不属于传输层,没有端口号,而是直接封装在 IP 报文中。它让网络具备了‘自我反馈’能力,帮助发现问题所在。
1. ICMP 是什么?
ICMP(Internet Control Message Protocol)是 IP 协议的“信使”,负责在主机和路由器之间传递网络错误与状态信息。它不传输用户数据,只传递“控制消息”,用来检测、诊断和报告网络问题。
2. ICMP 的位置和关系
| 层级 | 常见协议 |
|---|---|
| 应用层 | HTTP、DNS |
| 传输层 | TCP、UDP |
| 网络层 | IP、ICMP、IGMP |
| 数据链路层 | MAC 帧、ARP、RARP |
ICMP 属于 网络层协议,但它是 IP 的上层协议(使用 IP 封装),IP 报文中 Protocol 字段 = 1 时,就表示这是一个 ICMP 报文。类比理解:
- IP:送快递的司机。
- ICMP:告诉司机“路堵了 / 地址不存在 / 包送到了”的消息员。
3. ICMP 的功能
错误报告: → 通知发送方网络中出现的问题。常见错误:
目标不可达(Destination Unreachable)
超时(Time Exceeded)
重定向(Redirect)
诊断查询: → 用于检测网络状态,典型命令:
ping、traceroute。
4. ICMP 常见类型
我们记几个关键的就行:
| 类型值 | 含义 | 应用场景 |
|---|---|---|
| 0 | Echo Reply | ping 回复 |
| 3 | Destination Unreachable | 目标不可达 |
| 5 | Redirect | 路由重定向 |
| 8 | Echo Request | ping 请求 |
| 11 | Time Exceeded | TTL 超时(用于 traceroute) |
5. ICMP 报文格式(了解)
| 字段 | 说明 |
|---|---|
| Type | 报文类型(例如 8 表示 Echo Request) |
| Code | 进一步说明原因 |
| Checksum | 校验和 |
| 其他字段 | 根据类型不同变化 |
6. 两个典型工具:Ping 与 Traceroute
1. ping 命令工作流程
ping www.baidu.com。- DNS 解析 →
110.242.69.21。 - 构造 IP 包:
Protocol=1,ICMP 头Type=8。 - 发送 → 目标主机收到后,自动返回
Type=0。 - 统计:往返时间(RTT)、TTL、丢包率。
常见面试陷阱:Q: ping 使用哪个端口?
A: 没有端口!ICMP 工作在网络层,绕过 TCP/UDP,不涉及端口号。
2. traceroute 命令
功能: 追踪数据包经过的路径(每一跳路由器),也是基于 ICMP 协议实现,能够打印出可执行程序主机,一直到目标主机之前经历多少路由器。
工作原理: 发送多个 IP 包,从 TTL=1 开始逐步递增,每经过一个路由器,TTL 就减 1,当 TTL 减为 0 时,该路由器丢弃包并返回 ICMP Time Exceeded,traceroute 收集所有返回的 IP → 得出路径。
示例:
1 | traceroute www.baidu.com |
返回:
1 | root@hcss-ecs-be68:~# traceroute www.baidu.com |
解释:
- 1-4 跳:均显示 * * *,表示这些跳数的路由器未返回响应(可能因防火墙屏蔽或网络配置限制)。
- 第 5 跳:首次出现响应的节点(11.87.210.128 等),延迟约 1-1.7 毫秒,推测为本地网络内部的网关或交换机。
- 第 9-13 跳:连续出现响应的节点(如 172.16.65.70、180.163.107.161 等),延迟逐渐增加到 26 毫秒左右,这些是运营商骨干网的路由节点,逐步向百度服务器靠近。
- 14-30 跳:再次出现连续 * * *,说明到达目标前的最后几跳路由未响应,或目标服务器本身不返回 ICMP 响应。
网络路径在经过 13 跳后未能完全到达目标服务器(百度可能屏蔽了追踪响应),前几跳的屏蔽通常是网络安全策略导致,属于正常现象,从响应节点的延迟来看,本地网络到运营商骨干网的连接正常(延迟较低)。
3. NAT 技术
NAT(网络地址转换)是什么?一个视频带你看懂它 | B 站
[[网络知识] NAT 是什么?它有什么作用?一个视频带你了解清楚 NAT! | B 站](https://www.bilibili.com/video/BV1rN89zCE1r/?share_source = copy_web&vd_source = 872e5e3ccf44874c39edaf42e30ab0de)
【虚拟机网络模式】NAT | NAT 网络 | 桥接 Bridged | 内部网络 Internal | 仅主机(Host-Only) | B 站
摘自《趣味网络图解 —— 从基础到应用》46 页:
- IPv4 地址有限,但通过 NAT 路由器,可以使得整个内网的多台机器对外只使用一个公网 IP 地址,大大节省了 IP 地址资源。
- 内网机器主动连接公网 IP 地址,中间的 NAT 会将内网机器的内网 IP 地址转换为公网 IP 地址,从而实现内网和外网的数据交互。
- 普通的 NAT 技术只会修改网络包中的发送端和接收端 IP 地址,当内网设备较多时,将有可能导致冲突。因此一般会使用 NAPT 技术,同时修改发送端和接收端的 IP 地址和端口。
- 由于 NAT 的存在,公网 IP 地址是无法访问内网服务的,但通过内网穿透技术,就可以让公网 IP 地址访问内网服务。一拨操作下来,就可以在公司的网络里访问家里的计算机。
1. NAT 技术背景
1. 问题来源
IPv4 的地址是 32 位,最多支持约 43 亿个地址,随着网络设备爆炸式增长,公网 IP 远远不够用。
2. 解决思路
NAT(Network Address Translation,网络地址转换):通过 “让多个内网设备共享一个公网 IP 上网”,解决 IP 不足问题。简单说:NAT 就是让一整个局域网看起来像只有一台主机在上网。
3. 关键前提
- 私有 IP:仅内网有效(如
192.168.x.x),可重复使用。 - 公网 IP:全球唯一,由 ISP 分配。
本质:NAT 是 IPv4 时代的“地址复用”技术,不是协议升级,而是“ workaround”。
4. 补充价值
除了节省公网 IP,NAT 还能:
- 隐藏内网结构(提升安全性)。
- 阻止外部主动访问内网主机(除非端口映射)。
2. NAT IP 转换过程(理解核心)
假设局域网有三台主机:A、B、C,它们都通过一台 NAT 路由器 上网。
1. 局域网 → 公网(出站)
| 阶段 | 源 IP | 目的 IP | 说明 |
|---|---|---|---|
| 主机 A 发包 | 192.168.1.10 | 8.8.8.8 | 源为私有 IP |
| 路由器 NAT 转换 | 203.0.113.5 | 8.8.8.8 | 源地址改为路由器公网 IP |
| 公网传输 | 203.0.113.5 | 8.8.8.8 | 已是公网间通信 |
2. 公网 → 局域网(入站)
| 阶段 | 源 IP | 目的 IP | 说明 |
|---|---|---|---|
| 服务器发回 | 8.8.8.8 | 203.0.113.5 | 目标为 NAT 公网 IP |
| 路由器查表 | 8.8.8.8 | 192.168.1.10 | 查 NAT 表反向转换 |
| 转发给主机 A | 8.8.8.8 | 192.168.1.10 | 主机 A 收到数据 |
NAT 路由器维护一张 “转换表”,记录了私网 IP ↔ 公网 IP 的映射关系。
3. NAPT(端口转换) —— NAT 的升级版
1. 为什么需要 NAPT?
如果 A、B 两台主机同时访问同一个公网服务器:它们的源 IP 都被改成了同一个公网 IP(NAT 路由器的 IP),服务器返回时,路由器无法区分响应该转给谁,于是需要引入端口号。
2. 核心思路:IP + 端口共同唯一标识一次通信
| 局域网主机 | 源 IP: 端口 | 映射后公网 IP: 端口 |
|---|---|---|
| 主机 A | 192.168.1.10:1025 | 203.0.113.5:1025 |
| 主机 B | 192.168.1.11:1025 | 203.0.113.5:1026 |
当服务器返回时:数据包目的地址 = 203.0.113.5,端口号 = 1025 或 1026,路由器查表即可知道数据属于谁。这样既能让多台主机共享一个公网 IP,又能通过端口区分不同连接。
4. NAT 技术的缺陷
- 无法从外网主动访问内网主机: 因为公网只看到 NAT 的一个 IP,不知道内部真实 IP,如果想访问内部服务器,需做“端口映射”。
- 转换表有性能消耗: 每个连接都要建立 / 查找 / 维护映射表。
- 连接中断问题: NAT 路由器重启或切换时,表清空 → 所有 TCP 连接断开。
- 破坏端到端原则: 原本 IP 层应是“点到点”通信,NAT 插入其中,导致某些协议(如 P2P、IPsec)无法直接使用。
5. 内网穿透
内网穿透就是把位于私有网络、被 NAT 隐藏的内网服务暴露到公网,从而让公网客户端能访问内网主机。常见方法有端口映射、VPN、点对点打洞和中继/反向代理等。NAT 把内网地址隐藏在路由器后面,若无公网地址或无端口映射,外部无法主动连入,内网穿透要么打洞(利用 NAT 的出站连接建立返向通路),要么中继/代理(内网主动连到公网服务器,由公网服务器转发流量)。常见技术分类:
- 端口映射/端口转发:在路由器上手动映射端口。最简单但需路由器权限。
- UDP/TCP Hole Punching(打洞):借助公服协调,让双方同时发起出站连接实现直连。适用于对称 NAT 以外的场景,不保证总能成功。
- VPN / 专线:把内网主机加入到公网可路由的虚拟网段,复杂但稳定。
- 中继/反向代理(Relay/Reverse Proxy):内网客户端主动与公网中继服建立长连接,公网客户端连中继服由中继转发到内网。最稳健但需要公网服务器带宽。
HTTP 隧道技术:在 HTTP 请求正文中携带加密的有效载荷数据,绕过运营商检测,实现外网访问,响应也进行加密处理后返回,还可套着 HTTP 壳子携带其他数据,如游戏数据。
6. NAT 与代理服务器的区别(很容易混淆)
| 对比维度 | NAT | 代理服务器(Proxy) |
|---|---|---|
| 工作层次 | 网络层 | 应用层 |
| 处理对象 | IP、端口 | 应用数据(HTTP、FTP 等) |
| 主要目的 | 节省 IP、隐藏内网 | 缓存、访问控制、负载均衡 |
| 部署位置 | 路由器、防火墙设备 | 软件部署在服务器上 |
| 示例 | 家用无线路由器 | Nginx、Squid、Apache |
| 连接方向 | 双向透明 | 客户端或服务器主动配置 |
| 是否缓存内容 | 否 | 可缓存网页、资源 |
NAT 是 IP 层的代理,Proxy 是 应用层的代理。
7. 正向代理 vs 反向代理
正向代理原理:利用国内可访问外网的服务器,将请求交给该服务器,经外网访问目标服务器,再将响应返回,服务器充当正向代理角色。
1. 正反向代理
| 类型 | 位置 | 谁在用 | 作用 |
|---|---|---|---|
| 正向代理 | 客户端侧 | 客户端搭建 | 访问受限网站、缓存内容 |
| 反向代理 | 服务端侧 | 服务端搭建 | 负载均衡、安全防护(如 Nginx) |
正向代理:客户端 用的(如公司上网代理,帮用户访问服务器)→ 隐藏客户端。
反向代理:服务端 用的(如帮服务器服务用户:Nginx 做负载均衡)→ 隐藏服务器。
2. FRP 的介绍
FRP(Fast Reverse Proxy)属于 反向代理 / 中继型内网穿透工具。主要特点:分为 frps(部署在有公网 IP 的服务器)和 frpc(部署在内网主机),内网的 frpc 主动与 frps 建立并维持长连接,公网客户端连接 frps 的某个公网端口或域名,frps 将流量通过已建立的连接反向代理到对应的 frpc,支持 TCP/UDP/http/https/websocket 等协议和多路复用。
注意:FRP 不是纯打洞工具,它通过“内网发起出站连接到公服,然后公服中转”来实现穿透,适合不能修改路由器或无法打洞的场景。
3. FRP 的工作流程(简短步骤)
- 在公网主机运行
frps,监听公网端口。 - 在内网主机运行
frpc,主动与frps建立持久连接并注册要暴露的服务。 - 公网用户访问
frps的公网端口。 frps把流量通过frpc的长连接转发到内网服务。
4. 网络协议总结
1. 应用层
- 应用层的作用:负责应用程序间沟通,完成一系列业务处理所需服务。
- 能够根据自己的需求,设计对应的应用层协议。
- 了解 HTTP 协议。
- 理解 DNS 的原理和工作流程。
2. 传输层
- 传输层的作用:负责为两个网络通信进程之间的通信提供服务,更多的是为数据的传输提供一些策略。
- 理解端口号的概念。
- 认识 TCP 协议,理解 TCP 协议的可靠性,理解 TCP 协议的状态转化。
- 掌握 TCP 的连接管理、确认应答、超时重传、滑动窗口、流量控制、拥塞控制、延迟应答、捎带应答特性。
- 理解 TCP 面向字节流,理解粘包问题和解决方案。
- 能够基于 UDP 实现可靠传输。
- 理解 MTU 对 UDP/TCP 的影响。
3. 网络层
- 网络层的作用:在复杂的网络环境中确定一条合适的路径。
- 理解 IP 地址,理解 IP 地址和 MAC 地址的区别。
- 理解 IP 协议格式。
- 理解如何解决 IP 数目不足的问题,掌握网段划分的两种方案,理解私有 IP 和公网 IP。
- 理解网络层的 IP 地址路由过程,理解一个数据包如何跨网段到达最终目的地。
- 理解 IP 数据包分片的原因。
- 了解 ICMP 协议。
- 了解 NAT 设备的工作原理。
4. 数据链路层
- 数据链路层的作用:负责局域网内两个设备之间的数据传递。
- 理解以太网通信原理
- 以太网帧格式。
- 理解 MAC 地址。
- 理解 ARP 协议。
- 理解 MTU。

















