网络基础协议:IP、ARP、ICMP、NAT 与 TCP 流量控制
IP、ARP、ICMP、NAT、TCP 流量控制五大网络基础协议的综合整理。
#type / synthesis
#tech / network
#discipline / protocols
#status / growing
[!info] related notes
网络基础协议:IP、ARP、ICMP、NAT 与 TCP 流量控制
为什么放在一起理解
这五个概念构成了网络层和传输层的基础骨架。IP 负责寻址和路由,ARP 负责将 IP 地址解析为 MAC 地址,ICMP 负责错误报告和诊断,NAT 负责地址转换,TCP 流量控制负责端到端的可靠传输节奏。它们共同支撑了上层所有应用协议的运行。
IP(Internet Protocol,网际协议)
定义
TCP/IP 协议栈中最核心的协议之一,属于网络层。主要作用是定义数据包的格式、对数据包进行路由和寻址,使其能跨网络传播并到达正确的目的地。
IPv4 与 IPv6
| 维度 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位(4 字节) | 128 位(16 字节) |
| 地址数量 | 约 43 亿 | 约 3.4 x 10^38 |
| 地址格式 | 点分十进制(192.168.1.1) | 冒号十六进制(2001:db8::1) |
| 头部长度 | 可变(20-60 字节) | 固定 40 字节 |
| 分片 | 路由器和发送端均可 | 仅发送端 |
| 校验和 | 有(头部校验和) | 无(交给上层) |
| NAT | 普遍使用 | 不再需要(地址充足) |
| 状态 | 仍在广泛使用 | 逐步部署中 |
关键机制
- 分组转发:路由器根据目的 IP 地址查路由表,逐跳转发
- 分片与重组:当数据包超过链路 MTU 时分片,目的端重组
- TTL(Time To Live):每经过一跳减 1,防止环路中的无限转发
ARP(Address Resolution Protocol,地址解析协议)
定义
ARP 解决的是网络层地址(IP)和链路层地址(MAC)之间的转换问题。IP 数据报在物理传输时需要知道下一跳的 MAC 地址,但 IP 地址是逻辑地址,MAC 地址才是物理地址。
工作机制
- 主机 A 要发送数据给同一子网的主机 B,知道 B 的 IP 但不知道 MAC
- A 广播 ARP 请求:“谁的 IP 是 192.168.1.5?请告诉我你的 MAC”
- 子网内所有主机收到请求,只有 B 回复
- B 单播 ARP 响应:“192.168.1.5 的 MAC 是 xx:xx:xx:xx:xx:xx”
- A 将映射关系缓存到 ARP 表,后续直接查表
关键事实
- ARP 请求是广播,ARP 响应是单播
- ARP 缓存有超时时间(通常 20 分钟),过期后重新解析
- ARP 只在同一子网内工作;跨子网时,解析的是网关的 MAC 地址
- 免费 ARP(Gratuitous ARP):主机主动广播自己的 IP-MAC 映射,用于检测 IP 冲突
- ARP 没有认证机制,容易受到 ARP 欺骗攻击
ICMP(Internet Control Message Protocol,互联网控制报文协议)
定义
ICMP 用于在网络设备之间传输控制消息和错误报告,是网络诊断和故障排除的基础协议。
报文类型
| 类型 | 名称 | 方向 | 用途 |
|---|---|---|---|
| 0 | Echo Reply | 目标 -> 源 | ping 响应 |
| 3 | Destination Unreachable | 路由器/目标 -> 源 | 目标不可达(细分为多种代码) |
| 5 | Redirect | 路由器 -> 主机 | 建议使用更优网关 |
| 8 | Echo Request | 源 -> 目标 | ping 请求 |
| 11 | Time Exceeded | 路由器 -> 源 | TTL 超时(traceroute 原理) |
关键事实
- ICMP 运行在 IP 层之上(协议号 1),但不是传输层协议
- ping 使用 Echo Request/Reply 测试连通性和往返时间
- traceroute 利用 TTL 递增 + Time Exceeded 消息追踪路径
- ICMP 错误消息通常包含触发错误的原始数据包头部,便于诊断
- 部分防火墙会屏蔽 ICMP,导致 ping 不通但服务正常
NAT(Network Address Translation,网络地址转换)
定义
NAT 将内部网络(LAN)的私有 IP 地址转换为外部网络(WAN)的公有 IP 地址,使多个内网设备可以共享一个公网 IP 访问互联网。
工作机制
内网主机 192.168.1.10:12345
--> NAT 路由器(转换为 203.0.113.1:54321)
--> 目标服务器 93.184.216.34:80
NAT 路由器维护一张转换表,记录内网地址:端口与外网地址:端口的映射关系。回程数据包根据转换表反向还原。
NAT 类型
| 类型 | 行为 | 适用场景 |
|---|---|---|
| 静态 NAT | 一对一固定映射 | 服务器对外暴露 |
| 动态 NAT | 从地址池动态分配 | 中等规模网络 |
| PAT(端口地址转换) | 多对一,用端口区分 | 家庭/小型网络(最常见) |
关键事实
- NAT 是 IPv4 地址枯竭的临时解决方案,IPv6 理论上不再需要
- NAT 破坏了端到端通信模型,对 P2P、VoIP 等应用造成穿透难题
- NAT 穿透技术:STUN、TURN、ICE 用于解决 NAT 后的通信问题
- NAT 隐蔽性:外部无法直接访问内网主机,提供了一定的安全屏障
TCP 流量控制(Flow Control)
定义
TCP 通过滑动窗口机制调节发送方的发送速率,防止接收方因处理不过来而丢包。
滑动窗口机制
- 接收方在 ACK 中通告自己的 接收窗口(rwnd),告诉发送方”我还能接收多少字节”
- 发送方维护一个 发送窗口,大小不能超过接收方通告的 rwnd
- 窗口随 ACK 动态滑动:收到 ACK 后窗口前移,允许发送新数据
发送方视角:
[已确认] [已发送未确认] [可发送未发送] [不可发送]
|<--- 发送窗口 --->|
关键概念
- rwnd(Receive Window):接收方通告的可用缓冲区大小
- cwnd(Congestion Window):拥塞控制的窗口(与流量控制不同)
- 实际发送窗口 = min(rwnd, cwnd)
- 零窗口:接收方通告 rwnd=0 时,发送方暂停发送,定期发探测报文
- Nagle 算法:减少小包发送,等凑够一定数据量再发(可关闭)
流量控制 vs 拥塞控制
| 维度 | 流量控制 | 拥塞控制 |
|---|---|---|
| 目的 | 防止淹没接收方 | 防止淹没网络 |
| 调节依据 | 接收方通告的 rwnd | 网络拥塞信号(丢包、延迟) |
| 影响范围 | 点对点 | 全局网络 |
| 主要机制 | 滑动窗口 | 慢启动、拥塞避免、快重传、快恢复 |