%% # 纲要 > 主干纲要、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