网络基础扫盲第二弹:DNS、DHCP、ARP、NAT、TCP/IP,从原理到实践

本文面向有一定基础但希望系统理解网络原理的读者。每个概念都会从以下几个方面展开:

  • 解决什么问题

  • 工作原理

  • 关键技术细节

  • 常见问题与排查方法

  • 实操验证命令

建议收藏后阅读。

一、DNS:域名系统

1.1 问题背景

人类易记的是域名(如www.baidu.com),但网络通信依赖的是IP地址(如110.242.68.66)。DNS(Domain Name System)的作用就是在两者之间建立映射关系。

核心功能:将域名解析为IP地址。

1.2 DNS的层次化结构

DNS采用树状层次结构,从根到叶子依次为:

text

复制代码
根域(.)
    │
    ├── 顶级域(TLD):.com, .cn, .org, .net 等
    │       │
    │       └── 二级域:baidu.com, google.com 等
    │               │
    │               └── 主机名:www.baidu.com, mail.baidu.com 等

各级DNS服务器职责

层级 服务器类型 职责
根域 根DNS服务器 返回顶级域服务器的地址(全球13组)
顶级域 TLD DNS服务器 返回权威域名服务器的地址
二级域 权威DNS服务器 返回具体的域名解析结果

1.3 递归查询与迭代查询

以客户端访问www.baidu.com为例:

递归查询(客户端→本地DNS服务器):

客户端只发一次请求,本地DNS服务器负责完成整个查询过程,最终返回结果。

迭代查询(本地DNS服务器→各级DNS服务器):

本地DNS服务器依次向根、TLD、权威服务器发起查询,每次返回下一级服务器的地址。

text

复制代码
客户端               本地DNS服务器           根DNS            .com DNS         baidu DNS
   │                      │                  │               │                 │
   │─── 递归查询 ─────────→│                  │               │                 │
   │                      │── 迭代查询 ──────→│               │                 │
   │                      │←─ 返回.com地址 ───│               │                 │
   │                      │─────────────────→│               │                 │
   │                      │←─ 返回baidu地址 ─────────────────│                 │
   │                      │─────────────────────────────────→│                 │
   │                      │←─ 返回IP地址 ─────────────────────────────────────│
   │←──── 返回IP地址 ─────│                  │               │                 │

1.4 DNS缓存机制

为提高效率,DNS采用多级缓存:

缓存位置 缓存内容 生效时间
浏览器 域名解析结果 几十秒到几分钟
操作系统 DNS缓存 由TTL决定
本地DNS服务器 递归查询结果 由TTL决定

查看操作系统DNS缓存

Windows:

cmd

复制代码
ipconfig /displaydns          # 查看缓存
ipconfig /flushdns             # 清除缓存

Mac/Linux:

bash

复制代码
sudo dscacheutil -flushcache   # Mac
sudo systemd-resolve --flush-caches  # Linux (systemd)

1.5 常见DNS记录类型

记录类型 用途 示例
A 域名→IPv4地址 baidu.com → 110.242.68.66
AAAA 域名→IPv6地址 baidu.com → 2400:da00:2::29
CNAME 域名别名 www.baidu.combaidu.com
MX 邮件交换器 baidu.commx.baidu.com
NS 域名服务器 baidu.comns.baidu.com
TXT 文本记录 常用于验证
PTR IP地址→域名 反向解析

1.6 常用DNS诊断工具

nslookup(Windows/Linux通用):

cmd

复制代码
nslookup www.baidu.com
nslookup -type=MX baidu.com    # 查询MX记录
nslookup 8.8.8.8               # 反向解析

dig(Linux/Mac功能更强):

bash

复制代码
dig www.baidu.com
dig +trace www.baidu.com       # 显示完整解析路径
dig @8.8.8.8 www.baidu.com     # 指定DNS服务器

1.7 经典故障:能上网但打不开网页

现象:即时通讯软件能登录,但浏览器打不开任何网页。

原因:DNS解析失败。

排查步骤

cmd

复制代码
ping 114.114.114.114           # 1. 测试网络连通性
nslookup www.baidu.com         # 2. 测试DNS解析
nslookup www.baidu.com 8.8.8.8 # 3. 使用公共DNS测试

解决方案:将DNS修改为公共DNS。

修改DNS的方法

Windows:

  • 控制面板 → 网络和共享中心 → 更改适配器设置

  • 右键网卡 → 属性 → Internet协议版本4(TCP/IPv4)

  • 手动填入DNS服务器地址

Linux(Ubuntu):

bash

复制代码
sudo nano /etc/resolv.conf
nameserver 114.114.114.114
nameserver 8.8.8.8

二、DHCP:动态主机配置协议

2.1 问题背景

如果没有DHCP,每台设备需要手动配置IP地址、子网掩码、网关、DNS。在大型网络中,手动配置不仅繁琐,还容易出错(如IP冲突)。

DHCP(Dynamic Host Configuration Protocol)自动为网络设备分配IP地址及相关配置信息。

2.2 DHCP的DORA四步交互

DHCP客户端和服务器之间的交互被称为DORA:

步骤 名称 方向 内容
1 Discover 客户端→广播 "谁有IP地址可以给我?"
2 Offer 服务器→广播/单播 "我可以给你192.168.1.101"
3 Request 客户端→广播 "我请求使用这个IP"
4 Ack 服务器→广播/单播 "确认,这个IP归你了"

抓包验证(需在DHCP获取IP时抓取):

bash

复制代码
tcpdump -i eth0 -n port 67 or port 68

2.3 DHCP消息类型详解

消息类型 代码 发送方 说明
DHCPDISCOVER 1 客户端 寻找DHCP服务器
DHCPOFFER 2 服务器 提供IP地址
DHCPREQUEST 3 客户端 请求使用提供的IP
DHCPACK 5 服务器 确认分配
DHCPNAK 6 服务器 拒绝请求
DHCPRELEASE 7 客户端 释放IP地址
DHCPINFORM 8 客户端 请求其他配置信息

2.4 租期与续租机制

DHCP分配的IP地址有租期(lease time),通常为24小时到7天。

续租时间点

  • 租期的50%:客户端尝试续租(发送DHCPREQUEST)

  • 租期的87.5%:如果前次续租失败,再次尝试

租期计算

text

复制代码
租期到期时间 = 分配时间 + lease_time

2.5 DHCP分配的信息

选项编号 参数 说明
1 子网掩码 255.255.255.0
3 默认网关 192.168.1.1
6 DNS服务器 114.114.114.114, 8.8.8.8
12 主机名 设备名称
15 域名 localdomain
42 NTP服务器 时间同步
51 租期 86400秒

2.6 查看DHCP信息

Windows:

cmd

复制代码
ipconfig /all                    # 查看DHCP信息
ipconfig /release                # 释放IP
ipconfig /renew                  # 重新获取IP

Mac/Linux:

bash

复制代码
ipconfig getpacket en0           # Mac
dhclient -v eth0                 # Linux

# 查看租约文件(Linux)
cat /var/lib/dhcp/dhclient.leases

2.7 DHCP中继代理

当DHCP客户端和服务器不在同一个广播域时,需要在路由器上配置DHCP中继(DHCP Relay)。中继将广播的DHCPDISCOVER转换为单播转发给DHCP服务器。

配置示例(以某品牌设备为例):

text

复制代码
interface vlan 10
 ip helper-address 192.168.100.10

三、ARP:地址解析协议

3.1 问题背景

IP地址工作在网络层(第三层),但局域网内数据帧的转发依赖MAC地址(第二层)。ARP(Address Resolution Protocol)的作用是通过IP地址解析出对应的MAC地址

3.2 ARP工作原理

以主机A(192.168.1.1)访问主机B(192.168.1.2)为例:

  1. 检查ARP缓存:主机A查找本地ARP表

  2. 发送ARP请求:如果没有,发送广播帧

    • 源MAC:A的MAC

    • 目标MAC:FF:FF:FF:FF:FF:FF(广播)

    • 内容:"谁有192.168.1.2?请告诉192.168.1.1"

  3. 目标响应:主机B收到广播后回复单播

    • 源MAC:B的MAC

    • 目标MAC:A的MAC

    • 内容:"192.168.1.2的MAC是xx:xx:xx:xx:xx:xx"

  4. 更新缓存:主机A将映射关系存入ARP缓存

3.3 ARP报文格式

字段 长度 说明
硬件类型 2字节 1=以太网
协议类型 2字节 0x0800=IPv4
硬件地址长度 1字节 6(MAC地址长度)
协议地址长度 1字节 4(IPv4地址长度)
操作码 2字节 1=请求,2=应答
源MAC地址 6字节 发送方硬件地址
源IP地址 4字节 发送方IP地址
目标MAC地址 6字节 请求时为0
目标IP地址 4字节 目标IP地址

3.4 ARP缓存管理

查看ARP缓存

Windows:

cmd

复制代码
arp -a                         # 查看所有
arp -a | findstr "192.168"     # 过滤

Mac/Linux:

bash

复制代码
arp -a
ip neigh                       # 使用ip命令

手动添加静态ARP条目

Windows:

cmd

复制代码
arp -s 192.168.1.100 00-11-22-33-44-55

Linux:

bash

复制代码
arp -s 192.168.1.100 00:11:22:33:44:55

清除ARP缓存

Windows:

cmd

复制代码
arp -d                         # 清除所有
arp -d 192.168.1.100          # 清除单个

Mac/Linux:

bash

复制代码
sudo arp -a -d                 # Mac
sudo ip neigh flush all        # Linux

3.5 ARP欺骗与防御

ARP欺骗原理

某些恶意程序发送伪造的ARP应答,声称自己是网关(或目标主机),导致流量被重定向到该程序。

防御方法

方法 原理 适用场景
静态ARP 手工绑定IP-MAC 小型网络
DAI 交换机验证ARP包 企业网络
端口安全 限制端口MAC地址数量 接入层
网关防护 网关定期发送免费ARP 通用

四、NAT:网络地址转换

4.1 问题背景

IPv4地址空间有限(约42.9亿个),无法满足全球设备需求。NAT(Network Address Translation)允许多个设备共享一个公网IP地址。

核心功能:将私有IP地址转换为公网IP地址。

4.2 NAT地址类型

地址类型 范围 特点
公网IP 除私有地址外的所有 全球唯一,可在互联网路由
私有IP 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 局域网内使用,不可路由

4.3 NAT的三种模式

模式 映射关系 适用场景
静态NAT 1个私有IP ↔ 1个公网IP 需要对外提供服务的服务器
动态NAT 多个私有IP ↔ 地址池中的公网IP 较少使用
PAT 多个私有IP ↔ 1个公网IP + 端口 最常见(家庭/企业上网)

PAT原理图解

text

复制代码
内网                    NAT设备                   互联网
192.168.1.101:12345 ──→ 123.123.123.123:54321 ──→ 百度
192.168.1.102:12345 ──→ 123.123.123.123:54322 ──→ 百度
192.168.1.103:12345 ──→ 123.123.123.123:54323 ──→ 百度

NAT表:
┌─────────────────┬──────────────────┐
│ 内网地址:端口    │ 公网地址:端口     │
├─────────────────┼──────────────────┤
│ 192.168.1.101:12345 │ 123.123.123.123:54321 │
│ 192.168.1.102:12345 │ 123.123.123.123:54322 │
│ 192.168.1.103:12345 │ 123.123.123.123:54323 │
└─────────────────┴──────────────────┘

4.4 端口转发(Port Forwarding)

当外部需要主动访问内网服务器时,需要在路由器上配置端口转发。

示例:外网访问内网Web服务器

text

复制代码
外网用户访问 123.123.123.123:80
        ↓
路由器查表:80端口 → 192.168.1.100:80
        ↓
内网Web服务器(192.168.1.100)响应

4.5 查看NAT映射(Linux)

bash

复制代码
# 查看NAT表(iptables)
iptables -t nat -L -n -v

# 查看连接跟踪表
conntrack -L

五、TCP/IP协议族

5.1 TCP/IP四层模型

层级 名称 协议示例 数据单位
4 应用层 HTTP, FTP, DNS, SSH 消息
3 传输层 TCP, UDP 段/数据报
2 网络层 IP, ICMP, ARP
1 网络接口层 以太网, WiFi

5.2 TCP:传输控制协议

核心特点

特性 说明
面向连接 通信前需建立连接(三次握手)
可靠传输 确认重传机制
流量控制 滑动窗口协议
拥塞控制 慢启动、拥塞避免、快速重传
有序传输 序列号保证顺序

TCP头部格式

text

复制代码
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         源端口               |          目的端口              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        序列号                                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       确认号                                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据偏移 | 保留 |U A P R S F|           窗口大小              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         校验和               |           紧急指针              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        选项(可选)                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            数据                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

控制位:
U:URG(紧急)
A:ACK(确认)
P:PSH(推送)
R:RST(重置)
S:SYN(同步,用于建立连接)
F:FIN(结束,用于断开连接)

5.3 三次握手详解

text

复制代码
客户端(主动打开)                    服务器(被动打开)
       │                                    │
       │─────── SYN (seq=x) ───────────────→│  (1) 客户端请求连接
       │                                    │
       │←───── SYN+ACK (seq=y, ack=x+1) ────│  (2) 服务器确认并请求连接
       │                                    │
       │─────── ACK (seq=x+1, ack=y+1) ───→│  (3) 客户端确认
       │                                    │
       │←───────── 数据传输 ────────────────→│

序列号的作用

  • 保证数据有序到达

  • 去重(丢弃重复包)

  • 确认机制的基础

为什么不是两次:防止历史连接请求突然到达服务器。如果只有两次握手,服务器会直接建立连接,占用资源。

5.4 四次挥手详解

text

复制代码
客户端                                  服务器
   │                                      │
   │─────── FIN (seq=u) ────────────────→│  (1) 客户端发送关闭请求
   │                                      │
   │←─────── ACK (ack=u+1) ──────────────│  (2) 服务器确认
   │                                      │
   │         (此时客户端不能再发数据,但可以接收)         │
   │                                      │
   │←─────── FIN (seq=v) ────────────────│  (3) 服务器发送关闭请求
   │                                      │
   │─────── ACK (ack=v+1) ──────────────→│  (4) 客户端确认
   │                                      │
   │         (进入TIME_WAIT状态,等待2MSL)              │

TIME_WAIT的作用

  • 确保最后一个ACK能被正确接收

  • 确保旧连接的数据包在网络中超时消失

  • 持续时间:2倍MSL(最大报文生存时间),通常1-4分钟

5.5 滑动窗口机制

TCP的滑动窗口用于流量控制。接收方通告自己的可用窗口大小,发送方根据窗口限制未确认数据量。

text

复制代码
发送方                                   接收方
   │                                      │
   │←─────── window=4096 ─────────────────│  接收方告知窗口大小
   │                                      │
   │─────── 发送4096字节 ────────────────→│
   │                                      │
   │←─────── ACK, window=2048 ───────────│  接收方处理了部分数据

窗口缩放 :TCP选项Window Scale可将窗口从16位扩展至30位(最大1GB)。

5.6 拥塞控制

TCP拥塞控制算法(以CUBIC为例):

阶段 行为 标志
慢启动 指数增长(每RTT翻倍) cwnd < ssthresh
拥塞避免 线性增长(每RTT +1) cwnd ≥ ssthresh
快速重传 收到3个重复ACK立即重传 丢包检测
快速恢复 进入拥塞避免而非慢启动 避免过度降速

查看当前拥塞控制算法

bash

复制代码
# Linux
sysctl net.ipv4.tcp_congestion_control
# 查看支持的算法
sysctl net.ipv4.tcp_available_congestion_control

5.7 UDP:用户数据报协议

核心特点

特性 说明
无连接 不需要握手
不可靠 不确认不重传
无序 不保证顺序
轻量 头部仅8字节

UDP头部格式

text

复制代码
 0      7 8     15 16    23 24    31
+--------+--------+--------+--------+
|    源端口    |   目的端口    |
+--------+--------+--------+--------+
|    长度      |    校验和     |
+--------+--------+--------+--------+
|              数据               |
+----------------------------------+

5.8 TCP vs UDP 对比

对比维度 TCP UDP
连接性 面向连接 无连接
可靠性 确认重传 尽力而为
有序性 序列号保证 不保证
流量控制 滑动窗口
拥塞控制
头部大小 20-60字节 8字节
速度 较慢 较快
适用场景 网页、邮件、文件、SSH 直播、DNS、语音、游戏

5.9 查看TCP连接状态

bash

复制代码
# 查看所有TCP连接
netstat -an

# 查看监听的端口
netstat -an | grep LISTEN

# 查看已建立的连接
netstat -an | grep ESTABLISHED

# 查看连接统计(ss命令更高效)
ss -tan

TCP状态说明

状态 说明
LISTEN 正在监听(服务端)
SYN-SENT 发送SYN(客户端)
SYN-RECEIVED 收到SYN,发送SYN+ACK
ESTABLISHED 连接已建立
FIN-WAIT-1 主动关闭,已发FIN
FIN-WAIT-2 主动关闭,收到ACK
CLOSE-WAIT 被动关闭,收到FIN
TIME-WAIT 等待2MSL
CLOSED 关闭

六、综合验证示例

以下是一个完整的网络验证脚本,可用于排查基础网络问题:

bash

复制代码
#!/bin/bash
# 网络连通性测试脚本

# 1. 测试本地协议栈
echo "=== 测试本地协议栈 ==="
ping -c 4 127.0.0.1

# 2. 查看IP配置
echo "=== 查看IP配置 ==="
ip addr show

# 3. 查看路由表
echo "=== 查看路由表 ==="
ip route show

# 4. 测试网关连通性
GATEWAY=$(ip route | grep default | awk '{print $3}')
echo "=== 测试网关 $GATEWAY ==="
ping -c 4 $GATEWAY

# 5. 测试外网连通性
echo "=== 测试外网连通性 ==="
ping -c 4 114.114.114.114

# 6. 测试DNS解析
echo "=== 测试DNS解析 ==="
nslookup www.baidu.com

# 7. 查看ARP表
echo "=== 查看ARP表 ==="
arp -a

# 8. 查看NAT连接(需要root)
echo "=== 查看NAT连接 ==="
sudo conntrack -L 2>/dev/null | head -20

七、总结对照表

概念 全称 层级 核心作用 关键协议/端口
DNS Domain Name System 应用层 域名↔IP解析 UDP/TCP 53
DHCP Dynamic Host Configuration Protocol 应用层 自动分配IP UDP 67/68
ARP Address Resolution Protocol 网络层 IP→MAC 以太类型0x0806
NAT Network Address Translation 网络层 地址转换 -
TCP Transmission Control Protocol 传输层 可靠传输 -
UDP User Datagram Protocol 传输层 不可靠传输 -

八、最后

本文详细讲解了DNS、DHCP、ARP、NAT、TCP/IP五个核心网络概念:

  • DNS:域名解析,互联网的通讯录

  • DHCP:自动分配IP,避免手动配置

  • ARP:IP找MAC,局域网通信的关键

  • NAT:地址转换,一个宽带养全家

  • TCP/IP:互联网的交通规则

加上上一篇文章的五个概念(子网掩码、网关、端口、MAC地址、VLAN),你已经具备了阅读网络知识的基础。

相关推荐
z9209810232 小时前
常用的改机软件 MTK 高通 展讯 紫光展锐 改串 一键新机 怎么做?修改SN NV数据 qcn
网络
Dynadot_tech2 小时前
掘金优质中文域名——Nameclub中文IDN交易板块重磅上线
网络·域名·中文域名·dynadot·域名管理·域名交易
Bobolink_2 小时前
海外拍卖直播风控数据上报:跨境网络加密传输方案设计实践
网络·数据传输·跨境直播·直播网络
梦想的旅途22 小时前
企业微信自动化系统从 0 到 1:架构设计与踩坑实录
网络·机器人·自动化·企业微信·rpa
2501_941982052 小时前
# 企业微信群管理机器人的技术实现:从创建到解散的完整方案
网络·机器人·自动化·企业微信·rpa
酉鬼女又兒2 小时前
零基础入门计算机网络:集线器与交换机区别、以太网交换机自学习转发流程及生成树协议STP全解析
服务器·网络·网络协议·tcp/ip·计算机网络·考研·职场和发展
大棉花哥哥2 小时前
Cybellum 固件包上传扫描流程操作手册
网络·安全性测试
七夜zippoe2 小时前
OpenClaw 节点通知:推送消息到设备
运维·服务器·网络·ai·openclaw·nodes
网络与设备以及操作系统学习使用者2 小时前
三层交换机实现PC互通方案
运维·网络·学习·华为