%%
# 纲要
> 主干纲要、Hint/线索/路标
# Q&A
#### 已明确
#### 待明确
> 当下仍存有的疑惑
**❓<font color="#c0504d"> 有什么问题?</font>**
%%
# 网络地址转换 NAT
> **==NAT==**(Network Address Translation,**网络地址转换**)
NAT 用于**实现 "局域网内的私有 IP 地址" 与 "公网 IP 地址" 之间的转换**,从而**实现局域网内设备与外部互联网的通信**。
NAT 是**路由器所具备的附加功能**。
> [!example] NAT 转换示意
> ![[_attachment/02-开发笔记/07-计算机网络/网络层/网络地址转换 NAT.assets/IMG-网络地址转换 NAT-553277B4AED0BEF25FA60C65127E847B.png|772]]
> 下图参见 [^1]
![[_attachment/02-开发笔记/07-计算机网络/网络层/网络地址转换 NAT.assets/IMG-网络地址转换 NAT-C8CF36D2D9F2D7145075921714E7A55A.png|658]]
> [!example] NAT 的应用场景
>
> 家庭局域网内的多台设备(手机、电脑等)在访问互联网时**数据包统一经由家庭路由器转发**,此过程中**家庭路由器就应用了 NAT 技术**,
> **将发送给外部网络的数据包中的 "==源地址==" 统一修改为==路由器 WLAN 端口的公共 IP 地址==(即 ISP 分配的互联网接入口的 IP 地址)**,
> 由此局域网内的**所有设备实际上共用了同一个公共 IP 地址来与外部进行通信**。
>
> ![[_attachment/02-开发笔记/07-计算机网络/网络层/网络地址转换 NAT.assets/IMG-网络地址转换 NAT-E66294F03D280BC6E17D5AF55AC8C2E2.png|504]]
>
<br><br>
# NAT 的工作原理
NAT的工作原理:**修改IP数据包中的 "源IP地址或目标IP地址",以及 "源端口号和目的端口号"**,从而实现私有IP和公共IP之间的转换。
- 当**局域网内设备**访问公网网络时,路由器应用 NAT 技术,将网络包中的:
- "**源 IP 地址**" 由 "**私有地址**" 修改为 "**路由器 WLAN 口的公有地址**""
- "**源端口号**" 修改为某一特定端口号(初次时从空闲端口中随机取用,随后记录在表,用以标识 "**内网中的不同终端及端口**")
- 当**公共网络**访问**局域网内设备**时,路由器**根据收到的网络包的 "==端口号==" 来判断具体发给那台内网设备** ,将网络包中的:
- "**目的 IP 地址**" 由 "**路由器 WLAN 口的公有地址**" 改为 "**私有地址**"
- "**目的端口号**" 修改为对应的**内网设备的端口号**。
这种同时修改 IP 地址和端口号的方式,也称为 "**PAT(Port Address Translation) 或 NPAT ==网络地址端口==转换**"。
> [!NOTE] NAT 转换过程说明
>
> NAT 设备(即路由器)内部维护有一张转换表,通过 "**转换后的==对外的不同端口号==**" 来区别 **==内网中的不同终端及其端口==**。
>
>
> ![[_attachment/02-开发笔记/07-计算机网络/网络层/网络地址转换 NAT.assets/IMG-网络地址转换 NAT-36B619AE36FCD61D32ADFB7B9770E1CC.png|622]]
>
<br><br>
# NAT 的缺点
1. **外部无法==主动==与 NAT 背后的主机建立连接**(因为 NAPT 转换表无记录)
2. 若 NAT 路由器重启,则**所有 TCP 连接都将被重置**(因为转换表中网络地址端口映射失效)
解决 NAT 潜在问题的方案:
1. **改用 IPv6**:IPv6 范围极大,足以为每台设备配置一个公有 IP 地址,故不再需要 NAT 转换;
2. **NAT 穿透**:
# NAT 穿透
NAT 穿透:**NAT 设备之后的主机**直接与**外部设备**建立通信的技术。
原理:借助一个第三方服务器(STUN/TURN 服务器)
实现方式:
- **STUN(Session Traversal Utilities for NAT):** 让 NAT 后的主机知道自己的公网 IP 和端口,以便与外部设备建立直连。
1. **NAT 后的主机**向该中间服务器发送 UDP 数据包,服务器返回 **==主机的公网 IP 与端口==**。
2. **NAT 后的主机**据此自身建立 "**端口映射条目**",发包时**直接设置源 IP 地址为公网 IP 地址及端口**。
- **TURN(Traversal Using Relays around NAT):**
- 如果直连失败,则通过 TURN 服务器中继数据(效率较低),适用于**对称 NAT** 情况
NAT 穿透的应用场景:
- P2P 软件(如 BT 下载、Skype)
- 游戏联机(如 Steam、Xbox Live)
- 远程桌面(如 TeamViewer、AnyDesk)
- WebRTC 视频通话
<br><br>
# Buffer
## 闪念
> sudden idea
## 候选资料
> Read it later
# ♾️参考资料
[5.1 IP 基础知识全家桶 | 小林coding](https://xiaolincoding.com/network/4_ip/ip_base.html#dhcp)
# Footnotes
[^1]: 《计算机网络—自顶向下方法》P226