055 其他重要协议和技术

其他重要协议和技术

DNS 协议、ICMP 协议、NAT 技术 | CSDN

1. DNS

1. DNS 背景与作用

DNS(Domain Name System,域名系统) 是互联网中 负责把域名转换为 IP 地址 的系统。人记域名(如 www.baidu.com),机器识别 IP(如 110.242.69.21)。DNS 就是充当这两者之间的“翻译官”。

为什么需要 DNS?

  • IP 地址难记、会变动,而域名容易记。
  • 访问网站、发邮件、请求 API 时都依赖域名解析到具体主机。

2. 域名简介

域名是分层结构(从右往左层级递减):

1
2
3
4
www.example.com.
│ │ └── 顶级域(TLD):.com / .org / .cn / .edu
│ └────────── 二级域(注册主体):example
└────────────── 主机名(子域):www(可省略)

说明:

  • 根域:隐藏的 “.”,由全球 13 组根 DNS 服务器管理。
  • 顶级域(TLD):如 .com:商业类;.net:网络服务类;.org:开源组织或非盈利组织。
  • 二级域:企业或组织自行注册(如 baidu.com)。
  • 子域(三级及以下):如 www.baidu.comapi.baidu.com

3. DNS 解析过程(简化说明)

DNS 查询是一个“从根到叶”的 分层查找过程,递归服务器负责一层层问下去,直到拿到最终结果。

假设用户访问 www.baidu.com

  1. 浏览器缓存查询: 先查本地浏览器缓存,看是否已有 IP。

  2. 操作系统缓存查询: 若浏览器无,则查 OS 缓存(Linux 可看 /etc/hosts)。

  3. 本地 DNS 服务器查询:(通常是自己所在网络的 DNS,如 8.8.8.8)本地 DNS 会缓存常见记录,若命中则直接返回。

  4. 递归查询(若本地 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
2
sudo apt update
sudo apt install dnsutils -y

5. 浏览器输入 URL 后发生的事情(核心)

整体流程可以概括为五个阶段:输入域名 → DNS 解析 → 建立连接 → 请求响应 → 页面渲染。其中 DNS 是从域名到 IP 的入口,TCP 是可靠通信的保障,HTTP/HTTPS 是传输层的协议规范,最后浏览器负责把字节变成视觉结果。

当你在浏览器地址栏输入一个 URL 后回车,将会发生的事情? | CSDN

  1. DNS 解析:浏览器 → 操作系统 → 本地 DNS→ 根 →TLD→ 权威 DNS → 得到服务器 IP。

  2. 建立 TCP 连接:通过三次握手(SYN → SYN+ACK → ACK)。若是 HTTPS,会在 TCP 之后进行 TLS 握手(证书校验 + 加密协商)。

  3. 发送 HTTP 请求:浏览器发出请求报文:

    1
    2
    GET / HTTP/1.1
    Host: www.baidu.com
  4. 服务器处理请求:Web 服务器(如 Nginx)解析请求,调用后端逻辑,生成响应。

  5. 返回 HTTP 响应:返回状态码、响应头、HTML 正文等。

  6. 浏览器渲染页面

    • 解析 HTML → 构建 DOM 树。
    • 解析 CSS → 构建 CSSOM 树。
    • 执行 JS、合成渲染树、布局、绘制页面。
  7. 建立持久连接(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 的功能

  1. 错误报告: → 通知发送方网络中出现的问题。常见错误:

    • 目标不可达(Destination Unreachable)

    • 超时(Time Exceeded)

    • 重定向(Redirect)

  2. 诊断查询: → 用于检测网络状态,典型命令:pingtraceroute

4. ICMP 常见类型

PixPin_2025-10-10_13-40-34

我们记几个关键的就行:

类型值含义应用场景
0Echo Replyping 回复
3Destination Unreachable目标不可达
5Redirect路由重定向
8Echo Requestping 请求
11Time ExceededTTL 超时(用于 traceroute)

5. ICMP 报文格式(了解)

PixPin_2025-10-10_13-42-56

字段说明
Type报文类型(例如 8 表示 Echo Request)
Code进一步说明原因
Checksum校验和
其他字段根据类型不同变化

6. 两个典型工具:Ping 与 Traceroute

1. ping 命令工作流程

  1. ping www.baidu.com
  2. DNS 解析 → 110.242.69.21
  3. 构造 IP 包:Protocol=1,ICMP 头 Type=8
  4. 发送 → 目标主机收到后,自动返回 Type=0
  5. 统计:往返时间(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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
root@hcss-ecs-be68:~# traceroute www.baidu.com
traceroute to www.baidu.com (180.101.51.73), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 11.87.210.128 (11.87.210.128) 1.183 ms 11.87.111.128 (11.87.111.128) 1.284 ms 11.87.210.134 (11.87.210.134) 1.694 ms
6 * * *
7 * * *
8 * * *
9 172.16.65.70 (172.16.65.70) 3.104 ms 3.306 ms 180.163.107.161 (180.163.107.161) 4.342 ms
10 180.163.107.177 (180.163.107.177) 3.115 ms 3.309 ms 101.95.246.65 (101.95.246.65) 4.649 ms
11 101.95.224.125 (101.95.224.125) 5.762 ms 101.95.226.245 (101.95.226.245) 5.271 ms 101.95.219.21 (101.95.219.21) 4.961 ms
12 * 101.95.219.65 (101.95.219.65) 4.649 ms 202.97.52.222 (202.97.52.222) 10.990 ms
13 58.213.95.214 (58.213.95.214) 26.524 ms 202.97.101.54 (202.97.101.54) 7.736 ms 180.110.207.18 (180.110.207.18) 10.984 ms
14 * * *
15 58.213.96.50 (58.213.96.50) 10.689 ms * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *

解释:

  • 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.108.8.8.8源为私有 IP
路由器 NAT 转换203.0.113.58.8.8.8源地址改为路由器公网 IP
公网传输203.0.113.58.8.8.8已是公网间通信

2. 公网 → 局域网(入站)

阶段源 IP目的 IP说明
服务器发回8.8.8.8203.0.113.5目标为 NAT 公网 IP
路由器查表8.8.8.8192.168.1.10查 NAT 表反向转换
转发给主机 A8.8.8.8192.168.1.10主机 A 收到数据

NAT 路由器维护一张 “转换表”,记录了私网 IP ↔ 公网 IP 的映射关系。

3. NAPT(端口转换) —— NAT 的升级版

1. 为什么需要 NAPT?

如果 A、B 两台主机同时访问同一个公网服务器:它们的源 IP 都被改成了同一个公网 IP(NAT 路由器的 IP),服务器返回时,路由器无法区分响应该转给谁,于是需要引入端口号。

2. 核心思路:IP + 端口共同唯一标识一次通信

局域网主机源 IP: 端口映射后公网 IP: 端口
主机 A192.168.1.10:1025203.0.113.5:1025
主机 B192.168.1.11:1025203.0.113.5:1026

当服务器返回时:数据包目的地址 = 203.0.113.5,端口号 = 1025 或 1026,路由器查表即可知道数据属于谁。这样既能让多台主机共享一个公网 IP,又能通过端口区分不同连接。

4. NAT 技术的缺陷

  • 无法从外网主动访问内网主机: 因为公网只看到 NAT 的一个 IP,不知道内部真实 IP,如果想访问内部服务器,需做“端口映射”。
  • 转换表有性能消耗: 每个连接都要建立 / 查找 / 维护映射表。
  • 连接中断问题: NAT 路由器重启或切换时,表清空 → 所有 TCP 连接断开。
  • 破坏端到端原则: 原本 IP 层应是“点到点”通信,NAT 插入其中,导致某些协议(如 P2P、IPsec)无法直接使用。

5. 内网穿透

使用云服务器搭建内网穿透!纵享独属于个人的丝滑体验!| B 站

内网穿透就是把位于私有网络、被 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)
  • 正向代理客户端 用的(如公司上网代理,帮用户访问服务器)→ 隐藏客户端。

    PixPin_2025-10-10_16-44-42

  • 反向代理服务端 用的(如帮服务器服务用户:Nginx 做负载均衡)→ 隐藏服务器。

    PixPin_2025-10-10_16-45-37

2. FRP 的介绍

FRP(Fast Reverse Proxy)属于 反向代理 / 中继型内网穿透工具。主要特点:分为 frps(部署在有公网 IP 的服务器)和 frpc(部署在内网主机),内网的 frpc 主动与 frps 建立并维持长连接,公网客户端连接 frps 的某个公网端口或域名,frps 将流量通过已建立的连接反向代理到对应的 frpc,支持 TCP/UDP/http/https/websocket 等协议和多路复用。

注意:FRP 不是纯打洞工具,它通过“内网发起出站连接到公服,然后公服中转”来实现穿透,适合不能修改路由器或无法打洞的场景。

3. FRP 的工作流程(简短步骤)

  1. 在公网主机运行 frps,监听公网端口。
  2. 在内网主机运行 frpc,主动与 frps 建立持久连接并注册要暴露的服务。
  3. 公网用户访问 frps 的公网端口。
  4. 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。