【网络】:DNS协议、ICMP协议、NAT技术
目录
DNS协议
DNS的发展进程
域名的概念
ICMP协议
ICMP协议格式
ping命令
traceroute命令
NAT技术
为什么需要 NAT技术
NAT 核心工作原理
NAT 主要类型
NAPT
NAT 的局限性
代理服务器
NAT和代理服务器区别
网络协议总结
DNS协议
DNS(Domain Name System,域名系统)协议,是一个用来将域名转化为IP地址的应用层协议。
DNS的发展进程
互联网前身ARPANET 中通过IP地址和端口号的方式,来确定网络中一个主机上的一个程序。但IP地址是一长串数字,并不便于人们记忆,于是人们发明了一种叫做主机名的东西,并用hosts文件夹来描述主机名和IP地址之间的对应关系。
互联网前身ARPANET只有少量主机(1971年仅23台),单一文件HOSTS.TXT
由斯坦福研究所(SRI)维护,管理员通过FTP手动下载更新,但是有着致命缺陷:
-
扩展性问题:主机数达213台时(1982年),文件更新冲突频发
-
单点故障:SRI服务器宕机导致全网解析瘫痪
-
一致性难题:新主机注册需人工审批,更新延迟达数天
-
命名冲突:主机名全局唯一性难以保证
所以诞生了DNS协议,1983年,Paul Mockapetris提出DNS概念(RFC 882/883)
- 由一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系。
- 如果新计算机要接入网络,或者某个计算机IP变更,就需要将对应信息注册到数据库中。
- 当用户通过域名访问互联网服务时,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址。
至今,我们的计算机上仍然保留了hosts文件,这个hosts文件当中一般存储的是主机名与IP地址之间的映射,用户也可以在hosts文件中自主添加域名和IP映射关系,在域名解析的过程中会优先查找hosts文件的内容。
cat /etc/hosts # 可以查看hosts文件当中的内容
域名的概念
域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称,例如 www.baidu.com
- 根域 :示例:
www.baidu.com.
(末尾的点表示根域,通常省略) - com:顶级域,表示这是一个工商企业域名。同级的还有.net(网络提供商)和.org(开源组织或非盈利组织)等。
- baidu:二级域名,一般对应的就是公司名。
- www:主机名/子域名 (Hostname/Subdomain),
www
本质是子域名(三级域),www
:Web服务(HTTP/HTTPS),mail
/smtp(
邮件服务),ftp(
文件传输),api(
应用程序接口)
域名的解析过程
在浏览器中输入url后,如果url当中包含域名,则需要进行域名解析。
- 首先会在浏览器的DNS缓存中去查询是否有对应的记录,如果查询到记录就可以直接得到对应的IP地址,完成解析。
- 如果在浏览器的DNS缓存中没有找到,就会去查询操作系统中的DNS缓存,如果查询到对应的IP地址则完成解析。
- 如果在操作系统的DNS缓存中没有找到,就会去查找本地的hosts文件,如果查询到对应的IP地址则完成解析。
- 如果在本地的hosts文件中也没有找到,就会去本地DNS服务器中查找。本地DNS服务器IP地址一般由本地网络服务商提供,如电信、移动等公司,一般通过DHCP自动分配。目前使用的比较多的是谷歌提供的公用NDS 8.8.8.8和国内公用DNS 114.114.114.114。如果在本地DNS服务器中有对应域名的缓存,则直接返回对应的IP地址,完成解析。
- 如果本地DNS服务器中仍然没有找到,那么本地DNS服务器就会拿着域名去根DNS服务器中询问,根DNS服务器会告诉本地DNS顶级域名服务器的IP地址。
- 本地DNS拿到顶级域名服务器的IP地址后,就会拿着域名去找顶级DNS服务器,顶级域名服务器会告诉本地DNS权威域名服务器的IP地址。
- 本地DNS服务器拿着域名去权威域名服务器中,查询域名对应的IP地址,最终将该域名对应的IP地址返回给浏览器,此时整个域名解析过程就完成了。
ICMP协议
ICMP(Internet Control Message Protoco)Internet控制报文协议,用于在IP主机、路由器之间传递控制信息,是一个TCP/IP协议。ICMP的主要功能包括:
- 确认IP包是否成功到达目标地址。
- 通知在发送过程中IP包丢弃的原因。
- ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要使用ICMPv6。
ICMP协议的定位
在TCP/IP四层模型中,网络协议栈自顶向下分为应用层、传输层、网络层和数据链路层。
其中应用层最典型的协议有HTTP、HTTPS和DNS等,传输层最典型的协议有TCP和UDP,网络层最典型的协议就是IP,数据链路层最典型的协议就是MAC帧协议,但实际网络层还有两种协议叫做ICMP和IGMP。
在TCP/IP四层模型中,协议的分层设计并非严格的“垂直分层”,同一层内的协议可能承担不同功能模块,形成逻辑上的层级关系。
- ICMP、IGMP和IP协议虽然都属于网络层的协议,但ICMP协议和IGMP协议属于IP的上层协议。
- 也就是说,IP的上层协议不一定就直接是传输层的协议,IP的上层协议有可能也属于网络层的协议,但就是位于IP的上层。
- 在OSI模型中,ARP协议属于链路层。但在TCP/IP模型中,ARP协议属于网络层。
ICMP协议格式
ICMP协议格式如下:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 不同的类型不同 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段意思如下:
字段 | 长度 | 作用 | 示例值 |
---|---|---|---|
Type | 1 字节 | 报文类型(决定报文功能) | 8=Echo Request |
Code | 1 字节 | 类型子分类(提供详细信息) | 0=标准Echo请求 |
Checksum | 2 字节 | 整个ICMP报文的校验和 | 0x3A7F |
ICMP大概分为两类报文,如下:
- 一类是通知出错原因的。
- 一类是用于诊断查询的。
ICMP包常见类型如下:
- 0:回送应答
- 3:目标不可达
- 4:原点抑制
- 5:重定向或改变路由
- 8 :回送请求
- 9 :路由器公告
- 10:路由器请求
- 11:超时
- 17:地址子网请求
- 18:地址子网应答
ping命令
ping命令是基于ICMP协议实现的,通常用于测试本地主机与另一台主机之间的通信信道是否正常通过 IP 网络进行通信。它的工作原理是向目标主机发送 ICMP Echo Request 数据包,并等待对方返回 ICMP Echo Reply 数据包。
ping www.baidu.com # 测试本地主机与百度服务器之间的通信信道是否正常
- 注意,此处ping的是百度的域名,该域名会由DNS解析成IP地址。
- ping命令不仅能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存时间)。
- ping命令会先发送一个ICMP Echo Request给对端。
- 对端接收到之后,会返回一个ICMP Echo Reply。
traceroute命令
traceroute命令也是基于ICMP协议实现的,traceroute命令可以遍历数据包传送到目标主机所经过的所有路由器。traceroute
(在 Windows 中为 tracert
)是一个网络诊断工具,用于追踪数据包从源主机到目标主机所经过的路径(路由器跳数)。它通过显示数据包经过的每个中间节点(路由器)的响应时间和 IP 地址,帮助识别网络路径中的瓶颈或故障点。
traceroute www.baidu.com # 遍历数据包传送到百度服务器所经过的所有路由器
TTL(Time To Live)机制:每个 IP 数据包都有 TTL 值(生存时间),表示最多能经过的路由器数量。每经过一个路由器,TTL 值减 1。当 TTL=0 时,路由器丢弃数据包并返回 ICMP Time Exceeded 消息。
工作流程:
traceroute
先发送 TTL=1 的数据包。- 第一跳路由器将 TTL 减为 0,返回 ICMP Time Exceeded 消息(包含路由器 IP)。
- 接着发送 TTL=2 的数据包,到达第二跳路由器后 TTL=0,返回响应。
- 重复此过程,TTL 逐次 +1,直到数据包到达目标主机(目标返回 ICMP Echo Reply 或 Port Unreachable)。
NAT技术
NAT(Network Address Translation,网络地址转换) 是一种在 IP 网络中广泛使用的技术,主要用于解决 IPv4 地址短缺问题,并增强网络安全性。其核心思想是通过重写 IP 数据包的源或目标地址,实现私有网络与公网之间的地址映射。
为什么需要 NAT技术
- IPv4 地址枯竭:IPv4 仅有约 42 亿个地址,无法满足全球设备需求。
- 解决方案:在局域网(LAN)内部使用私有 IP 地址(如
192.168.x.x
、10.x.x.x
),通过 NAT 将其映射到少量公网 IP 地址上。 - 安全隔离:NAT 隐藏了内网设备的真实 IP,外部网络无法直接访问内网主机(需主动发起连接),相当于一道基础防火墙。
- 很多学校、家庭、公司内部每个终端设置的IP都是私有IP,而只在路由器或必要的服务器上设置全局IP。
- 全局IP要求唯一,但是私有IP不需要,在不同的局域网中出现相同的私有IP是完全不影响的。
NAT 核心工作原理
以家用路由器为例(最常见的 NAT 设备):
1.内网设备(如手机)访问公网服务器(如 203.0.113.5
):
源IP: 192.168.1.100 (私有IP) | 目标IP: 203.0.113.5
2.路由器执行 SNAT(源地址转换):
-
将源 IP 替换为路由器的公网 IP(如
198.51.100.1
)。 -
同时记录映射关系(IP + 端口)到 NAT 表:
转换后:源IP: 198.51.100.1:5000 | 目标IP: 203.0.113.5:80
└─ 映射关系:192.168.1.100:1234 → 198.51.100.1:5000
3.服务器响应:
源IP: 203.0.113.5:80 | 目标IP: 198.51.100.1:5000
4.路由器通过 NAT 表反向转换:
将目标 IP 还原为内网设备的私有 IP:
目标IP: 192.168.1.100:1234
NAT 主要类型
类型 | 说明 | 应用场景 |
---|---|---|
SNAT | 源地址转换(内网→外网) | 家用路由器、企业出口 |
DNAT | 目标地址转换(外网→内网) | 端口映射、内网服务暴露 |
静态 NAT | 一对一固定映射(如 192.168.1.100 ↔ 198.51.100.100 ) | 托管服务器 |
动态 NAT | 从公网 IP 池动态分配映射(多对多) | 企业多用户上网 |
PAT/NAPT | 端口转换(多对一) 通过不同端口区分内网主机(最常用类型) | 家庭宽带 |
NAPT
NAPT(Network Address Port Translation) 是 NAT 的升级版,通过复用端口号实现「多对一」的地址转换(多个内网设备共享一个公网 IP)。其核心是 NAPT 地址转换表,该表动态记录每个会话的映射关系。
- 当局域网当中的主机要访问外网时,NAT路由器会将这些数据包的源IP地址替换成自己的WAN口IP地址。
- 当外网发来响应数据时,NAT路由器又会将响应数据包的目的IP地址替换成局域网中对应主机的IP地址。
那NAT路由器是如何判断,应该将从外网收到的响应数据包转发给局域网中的哪一台主机呢?
- 实际在NAT路由器内部,有一张自动生成的,用于地址转换的表。
- 该转换表中维护的就是局域网中主机的私有IP,与其对应访问的外网当中的某个公网IP之间的映射关系。
- 局域网中的主机第一次向外网发起数据请求时,就会生成表中的映射关系。
- 比如在TCP建立连接时,会建立对应的映射关系,在TCP断开连接后,就会删除对应的映射关系。
NAPT 工作流程示例
假设内网两台主机访问同一公网服务器:
1.PC1 (192.168.1.100
) 访问 203.0.113.5:80
:
发送数据包:SRC:192.168.1.100:54321 → DST:203.0.113.5:80
2.NAPT 路由器动态分配端口并记录:
转换后包:SRC:203.0.113.10:60001 → DST:203.0.113.5:80新增表项:192.168.1.100:54321 ↔ 203.0.113.10:60001
3.PC2 (192.168.1.101
) 访问同一目标:
转换后包:SRC:203.0.113.10:60002 → DST:203.0.113.5:80新增表项:192.168.1.101:12345 ↔ 203.0.113.10:60002
4.服务器响应时,NAPT 通过端口号反向定位内网主机。
如果没有端口号那NAT路由器是无法判断应该将从外网收到的响应数据包转发给局域网中的哪一台主机的。
NAT 的局限性
NAT技术进行私有IP和公网之间的替换,主要就是依赖NAT路由器当中维护的网络地址转换表,但这张转换表也体现出了NAT的一些缺陷:
- 无法从NAT外部向内部服务器建立连接,因为外部无法知道内部的私网IP,也就无法主动与内部服务器建立连接。
- 转换表的生成和销毁都需要额外开销。
- 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。
代理服务器
代理服务器(Proxy Server)是位于客户端和目标服务器之间的中间服务器,作为网络流量的"中介"。它接收客户端请求,代表客户端与目标服务器通信,并将响应返回给客户端。
按部署位置分类
类型 | 工作位置 | 典型应用 |
---|---|---|
正向代理 | 客户端侧 | 企业员工上网管理 |
反向代理 | 服务器侧 | 网站负载均衡 |
透明代理 | 网络网关 | ISP内容过滤 |
(1)正向代理
正向代理,是一个位于客户端和目标服务器之间的服务器,客户端并不直接访问目标服务器,而是先访问代理服务器,由代理服务器代替客户端去访问对应的目标服务器,并将目标服务器的响应结果返回给客户端。
比如公司内部一般都会有自己的服务器,当我们使用公司内网上网时。
- 我们对外网发起的数据请求,首先会转发到公司的这台服务器上,然后由公司的这台服务器代替你对外网进行访问。
- 当公司的服务器收到对应外网的响应数据后,再由公司的这台服务器将数据转发给你。
正向代理的好处:
- 正向代理最大的一个好处就是可以加速资源访问。
- 比如公司中大量员工都要访问外网的同一个资源,那么正向代理服务器就可以将对应的资源缓存到本地,此时当其他人要访问该资源时,直接在正向代理服务器就可以获取,而不需要再次进行外网访问。
(2)反向代理
反向代理,也是一个位于客户端和目标服务器之间的服务器,对于客户端而言,反向代理服务器就相当于目标服务器,用户不需要知道目标服务器的地址,用户只需要访问反向代理服务器就可以获得目标服务器提供的服务。
比如域名www.baidu.com对应的服务器实际就是一个反向代理服务器:
- 百度内部实际并不是只有一台服务器,但不同地区的人们都可以通过访问www.baidu.com享受到百度提供的服务,实际我们访问的就是百度的反向代理服务器。
- 当这台反向代理服务器收到客户端的数据请求后,就会将我们的数据请求转发给百度内部的某台服务器进行数据处理,然后再将数据处理的结果返回给客户端。
反向代理的好处:
-
智能负载均衡:通过算法动态分配用户请求至后端服务器集群,消除单点压力,最大化资源利用率。
-
安全屏障:隐藏服务器真实信息,拦截恶意流量(如DDoS/SQL注入),构筑业务系统防火墙。
-
高效扩展:仅转发流量不处理业务逻辑,支持多节点集群部署,自身无性能瓶颈风险。
NAT和代理服务器区别
特性 | NAT | 代理服务器 |
---|---|---|
工作层级 | 网络层/传输层(L3/L4) | 应用层(L7) |
核心功能 | IP/端口重写,地址复用 | 内容转发、缓存、过滤、审计 |
透明度 | 对终端设备透明(无需配置) | 需客户端显式配置或流量劫持 |
协议支持 | 通用(所有IP流量) | 仅支持特定应用协议(如HTTP/S) |
性能影响 | 较低(硬件加速) | 较高(深度解析数据包) |
典型场景 | 家庭/企业出口共享IP | 企业安全管控、内容缓存 |
网络协议总结
应用层
-
核心作用:应用程序间通信协议,定义业务数据处理规则
-
协议设计:自定义Header/Body结构
-
HTTP协议:请求/响应模型、方法(GET/POST)、状态码
-
DNS系统:域名分级结构、递归/迭代查询流程、记录类型(A/CNAME/MX)
传输层
-
核心职责:端到端进程通信
-
端口号:进程标识(0-65535)
-
TCP协议:
-
可靠性机制:三次握手/四次挥手、确认应答、超时重传
-
性能优化:滑动窗口、流量控制、拥塞控制(慢启动/AIMD)、延迟应答
-
特性:面向字节流、粘包解决方案(长度头/分隔符)
-
-
UDP协议:无连接传输、UDP可靠传输实现要素、MTU影响
网络层
-
核心任务:跨网络路由寻址
-
IP地址:IPv4结构、子网掩码、CIDR表示法
-
地址管理:
-
网段划分:子网划分/VLSM
-
地址不足方案:NAT转换(SNAT/DNAT)、IPv6
-
-
路由过程:路由表查询、跨网段转发、TTL机制
-
辅助协议:
-
ARP:IP→MAC解析
-
ICMP:网络诊断(ping/traceroute)
-
IP分片:MTU限制与重组
-
数据链路层
-
核心功能:局域网帧传输
-
以太网协议:
-
MAC地址:48位物理地址
-
帧结构:目的MAC/源MAC/类型/数据/FCS
-
-
关键机制:
-
CSMA/CD:冲突检测(传统以太网)
-
MTU限制:1500字节标准值
-
ARP协议:本地IP-MAC映射
-