【网络基础】探索 NAT 技术:IP 转换、NAPT、NAT穿越及代理服务器

news2024/11/26 1:55:58

文章目录

  • 1. 前言
  • 2. IP 转换过程
  • 3. NAPT
    • ① 基本概念
    • ② 工作原理
    • ③ 优缺点
    • ④ 实际应用
  • 4. 缺陷
  • 5. NAT 穿越
    • ① 概述
    • ② 示例
  • 6. NAT 与 代理服务器
    • ① 代理服务器与NAT的区别:
    • ② 正向代理 / 反向代理 服务器

1. 前言

NAT(网络地址转换)是一种常见的网络技术,用于将私有网络中的内部 IP 地址转换为公共 IP 地址,以实现与外部网络的通信。

  • NAT能够将私有IP对外通信时转为全局IP。 也就是就是一种将私有IP和全局IP相互转化的技术方法;
  • 一些学校、家庭、公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP
  • 全局IP要求唯一,但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的。

2. IP 转换过程

在这里插入图片描述

  • NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37
  • NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10
  • 在NAT路由器内部, 有一张自动生成的,用于地址转换的表
  • 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系。

对于IP转换的过程:

  1. 进行源地址替换时,不一定只替换IP,部分情况下 源端口也要被替换
  2. 路由器在NAT替换时,除了替换,还会根据报文请求的四元组,构建映射关系
  3. 由于源IP表示唯一的一台主机,源端口表示该主机上唯一的进程;则源IP + 源端口表示唯一的一个进程 —— 在内网中的唯一性;
  4. 无论从内向外或从外向内,都能在各自的网络中表示唯一性,即该映射关系是“互为KEY值”
  5. 如果主机从未访问到外网,外网能够直接访问内网(主机)吗?
    • 理论上不能;
    • 实际上有很多基于NAT原理的软件可以进行外网访问内网的过程,即内网穿透。

3. NAPT

NAPT(Network Address PortTranslation,网络地址端口转换) 是一种网络技术,用于在网络设备(如路由器或防火墙)上进行地址和端口的转换。NAPT 是NAT(Network Address Translation,网络地址转换)的一个变种,其主要功能是允许多个内部设备共享一个公共 IP地址,同时通过不同的端口号来区分它们的流量。这种技术也被称为端口地址转换(PAT)。

① 基本概念

  1. 私有与公共 IP 地址

    • 私有 IP 地址:这是分配给内部网络中设备的地址,通常是私有的,不直接暴露在互联网上。私有 IP 地址的范围包括 192.168.x.x、10.x.x.x172.16.x.x172.31.x.x
    • 公共 IP 地址:这是分配给外部网络的地址,能在互联网上被识别和路由。
  2. 端口号

    • 每个网络连接都有一个源端口号和目标端口号,NAPT 使用这些端口号来跟踪和管理不同的流量。

② 工作原理

  1. 出站流量

    • 当内部设备(如计算机、手机或打印机)通过 NAT 设备发送数据包到外部网络时,NAPT 设备会将数据包的源 IP 地址和源端口号替换为公共 IP 地址和一个唯一的端口号。
    • NAPT 设备会维护一个映射表,记录内部设备的私有 IP 地址和端口号与公共 IP 地址和端口号之间的对应关系。
  2. 入站流量

    • 当外部网络响应数据包时,这些数据包的目标 IP 地址和目标端口号会匹配 NAPT 设备中的映射表。NAPT 设备将数据包的目标 IP 地址和端口号转换回相应的内部设备的私有 IP 地址和端口号。
    • 数据包被转发到内部设备,使其能够正确地接收和处理响应数据。

③ 优缺点

优点:

  1. 节省 IP 地址

    • NAPT 允许多个内部设备共享一个公共 IP 地址,从而减少对公共 IP 地址的需求。
  2. 支持多个并发连接

    • 通过不同的端口号,NAPT 可以支持多个内部设备同时与外部网络上的不同服务进行通信。

缺点(局限性):

  1. 端口冲突

    • 如果多个内部设备使用相同的端口号进行通信,可能会导致端口冲突。尽管 NAPT 设备会尝试管理这些冲突,但某些应用可能会遇到问题。
  2. 某些协议和应用问题

    • 一些协议和应用(如 VOIP、P2P 网络、某些游戏)可能在 NAT 环境下遇到问题,因为它们依赖于对端口的直接访问。需要额外的技术(如 NAT 穿越、UPnP)来解决这些问题。

④ 实际应用

  • 家庭网络:家庭路由器通常使用 NAPT 技术,让多个家庭设备通过一个公共 IP 地址访问互联网。
  • 企业网络:在企业中,多个员工的设备可以通过 NAT 设备共享一个公共 IP 地址进行互联网访问。
  • VPN:在某些虚拟私人网络(VPN)实现中,NAPT 用于处理内部客户端与 VPN 服务器之间的连接。

4. 缺陷

由于NAT依赖NAPT转换表, 所以有诸多限制:

  • 无法从NAT外部向内部服务器建立连接
  • 装换表的生成和销毁都需要额外开销;
  • 通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开;

看下面的问题:

  • 如果局域网内, 多个主机都访问同一个外网服务器,对于服务器返回的数据中,目的IP都是相同的。NAT路由器如何判定将该数据包要转发给哪个局域网的主机?
    - 由NAPT来解决;使用IP+port来建立这个关联关系。

在这里插入图片描述
这种关联关系也是由NAT路由器自动维护的

  • 例如在TCP的情况下:
    • 建立连接时会生成该表项;
    • 在断开连接后, 就会删除这个表项。

5. NAT 穿越

NAT穿越 是指在网络地址转换环境下,确保不同网络或设备之间能够进行通信的技术。NAT 穿越技术旨在解决 NAT 可能导致的一些通信问题(尤其涉及到外部网络的通信),以实现端对端的连接。

① 概述

  1. NAT 的问题

    • 对等连接NAT 会阻止外部网络直接访问内部网络设备,因为内部设备使用私有 IP 地址。
    • 端口限制NAT 通常对外部设备的访问进行限制,只允许特定的流量通过 NAT 设备的端口。
  2. NAT 穿越技术

    • 端口转发:在 NAT 设备上配置端口转发规则,将特定的端口流量转发到内部设备。这对于从外部访问内部服务非常有效,但需要手动配置。

    • UPnP(Universal Plug and Play):允许设备自动在 NAT 路由器上设置端口转发规则。UPnP 使得设备可以动态地打开和关闭端口,但可能存在安全风险。

    • STUN(Session Traversal Utilities for NAT):用于在 NAT 环境下发现公共 IP 地址和 NAT 类型。STUN 协议帮助客户端确定如何与 NAT 设备通信。

    • TURN(Traversal Using Relays around NAT):当直接连接不可行时,通过 TURN 服务器中继流量。TURN 提供了一个中继点,将流量从一个 NAT 环境转发到另一个 NAT 环境。

    • ICE(Interactive Connectivity Establishment):综合了 STUN 和 TURN,提供了一种机制来发现和使用 NAT 设备间的连接。ICE 通常用于 SIP(Session Initiation Protocol)和 WebRTC 等实时通信协议中。

  3. NAT 穿越在应用中的使用

    • VoIP 和视频会议:需要端对端的连接来保证通话质量和稳定性,常用 STUN、TURN 和 ICE 来解决 NAT 问题。

    • 在线游戏:游戏客户端使用 NAT 穿越技术来实现玩家之间的直接连接。

    • P2P(Peer-to-Peer)文件共享:使用 NAT 穿越技术来实现对等网络的文件传输。

② 示例

假设有一个内部网络设备(例如,家庭网络中的计算机),想从外部网络(如互联网)访问它。可以通过以下方法实现 NAT 穿越:

  1. 配置端口转发:在你的路由器上设置端口转发规则,将特定端口的流量转发到内部设备的 IP 地址上。这允许外部设备通过公共 IP 地址访问内部设备的服务。

  2. 使用 UPnP:启用 UPnP 功能,让设备自动请求路由器打开所需的端口。

  3. 使用 STUN 服务器:客户端通过 STUN 服务器发现其公共 IP 地址和 NAT 类型,并通过这些信息进行配置。

  4. 使用 TURN 服务器:如果直接连接失败,客户端通过 TURN 服务器中继流量,以便实现通信。


6. NAT 与 代理服务器

路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程。

代理服务器看起来和NAT设备有些类似:

  • 客户端向代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器
  • 服务器返回结果后, 代理服务器又把结果回传给客户端

① 代理服务器与NAT的区别:

  • 从应用上看, NAT设备是网络基础设备之一, 解决的是IP不足的问题。代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 加速器等,也是使用代理服务器。
  • 从底层实现上看,NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层。
  • 从使用范围上看, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网。
  • 从部署位置上看,NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上。

代理服务器是一种应用比较广的技术.

  • 翻墙: 广域网中的代理;
  • 负载均衡: 局域网中的代理;

② 正向代理 / 反向代理 服务器

  • 正向代理代表客户端访问互联网。客户端首先连接到正向代理服务器,然后由代理服务器转发请求到目标服务器。正向代理通常用于隐藏客户端的真实 IP 地址、访问被封锁的网站或缓存内容以提高访问速度。

在这里插入图片描述

  • 反向代理代表服务器接受客户端的请求。客户端不直接连接到目标服务器,而是连接到反向代理服务器,后者将请求转发给内部服务器。反向代理常用于负载均衡、提高安全性(如隐藏内部网络结构)和缓存内容以提升性能。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

路由策略工具

1.产生背景 a.保证数据访问的安全性 b.提高链路带宽利用率 c.流量路径不优 2.解决方案: 解决方案一:路由策略:可通过修改路由条目(即对接收和发布的路由进行过滤)来控制流量可达性 解决方案二:流量过滤:可使用Traffic-Filter工具对数据直接进行过滤 3.路由策略工具 a.可利…

登录究竟有多少种花样?

写在最前面: 大家好,我是小....小白不黑,现在的app以及任何一个系统,都离不开登录。其中最常见的估计就是密码登录,二维码登录,第三方账号登录以及单点登录了。 现在,让我们来捋一捋&#xff…

【virtuoso】INV 原理图+前仿真 + 版图 + 后仿真

采用SMIC工艺,不同工艺版图窗口可能有差异 1. 原理图&前仿真 1.1 绘制原理图 PMOS: NMOS宽长比2:1 PMOS开启导通电阻大一点,这样设置,可以使得阈值电压是VDD/2 按 i,可以插入器件按p,可以放置端口 1.2…

AXIS接口教程

免责声明: 本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济…

Unity3D安卓游戏第三方SDK接入

PS:持续更新... 什么是SDK? SDK(Software Development Kit,软件开发工具包)是一个用于构建应用程序的工具集,包含开发特定软件的必要工具、库、文档和示例代码。SDK通常由软件或硬件厂商提供,帮…

MySQL高阶练习题1- 寻找面试候选人

目录 题目 准备数据 分析数据 实现代码 总结 题目 返回 所有面试候选人 的姓名 name 和邮件 mail 。当用户满足以下两个要求中的 任意一条 ,其成为 面试候选人 : 该用户在 连续三场及更多 比赛中赢得 任意 奖牌。该用户在 三场及更多不同的 比赛中赢得 金牌&…

Linux——用户和权限

root用户(超级管理员) root用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的。 ****************** 使用普通用户在根目录下创建文件夹 切换到root用户后,继续尝试 普通用户的权限,一般在其HOME目录…

【linxu】虚拟环境中Python 版本错乱:深入探究 Linux 虚拟环境的识别问题

【linxu】虚拟环境中Python 版本错乱:深入探究 Linux 虚拟环境的识别问题 问题描述:在服务器上,我配置了一个虚拟环境,明确指定使用 Python 3.8 版本。然而,当我激活该环境并检查 Python 版本时,意外地发现…

IO练习--随机点名

随机点名器1 需求: 有一个文件里面存储了班级同学的信息,每一个信息占一行。 格式为:张三-男-23 要求通过程序实现随机点名器。 运行效果: 第一次运行程序:随机同学姓名1(只显示名字) 第二次运行程序:随机同学姓名2(只显示名字) 第三次运行程序:随机同学姓名3(只显…

数学建模强化宝典(2)linprog

一、介绍 linprog 是 MATLAB 中用于解决线性规划问题的函数。线性规划是一种优化方法,它尝试在满足一组线性等式或不等式约束的条件下,找到一个线性目标函数的最大值或最小值。linprog 函数适用于求解形如以下问题的线性规划问题: minimizecT…

Native开发与逆向第六篇 -字符串加密与hook

开发demo 写一个简单的字符串加密处理&#xff0c;将字符串字符转成ASCII十六进制值 std::string StrToHex(std::string str){unsigned char c;char buf[3];std::string result "";std::stringstream ss;ss << str;while (ss.read((char *)(&c), sizeof…

Python数据类型转换背后的逻辑

文末赠免费精品编程资料~~ 今天让我们深入浅出地探索Python数据类型转换的奥秘。Python&#xff0c;作为一门灵活的编程语言&#xff0c;其强大的数据类型转换能力是日常编码中不可或缺的一部分。今天&#xff0c;我们将一步步揭开类型转换背后的逻辑&#xff0c;让你从新手进…

【wsl2】从C盘迁移到G盘

参考大神 C盘的ubuntu22.04 非常大&#xff0c;高达30g 迁移后就只有几百M了&#xff1a; 右键有一个move没有敢尝试 迁移过程 Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved.Install the latest PowerShell for new features and improveme…

HCCL集合通信算法开发Hello World示例(超详细)

本文给读者介绍了HCCL算法开发所涉及的概念和流程&#xff0c;并通过一个样例将前文介绍的内容串联起来。本文定位为HCCL算法开发的入门介绍&#xff0c;读者读完后&#xff0c;可结合HCCL开放代码仓中的算法样例&#xff0c;做深入研究。 1 什么是集合通信 集合通信定义了一…

Http的get请求中的URL中的占位符参数和查询参数有什么区别

Http的GET请求中的URL中的占位符参数和查询参数在功能、位置和用途上存在明显的区别。 占位符参数&#xff08;Path Variables&#xff09; 定义与位置&#xff1a;占位符参数是通过URL模板中的{}定义的&#xff0c;它们位于URL的路径&#xff08;path&#xff09;部分。例如…

C#文件的输入和输出

一个文件是一个存储在磁盘中带有指定名称和目录路径的数据集合.当打开文件进行读写时,它变成一个流.从根本上说,流是通过通信路径传递的字节序列.有两个主要的流:输入流和输出流.输入流用于从文件读取数据,输出流用于向文件写入数据. C#I/O类 System.IO命名空间有各种不同的类…

带权重的随机算法

假设有10名学生&#xff0c;其中5个男生&#xff0c;5个女生。 要求点到男生的概率为70%&#xff0c;女生的概率为30%。 给男生和女生设置权重&#xff0c;其中男生权重为7&#xff0c;女生权重为3。 public class Test02_case2 {public static void main(String[] args) th…

Expected expression after operator

这个错误直译过来就是:运算符号后没有预期的表达式 这个错误通常出现在编程语言中&#xff0c;尤其是在编写C或C等类型语言的时候&#xff0c;它意味着在源代码中遇到了一个操作符&#xff08;比如 , -, *, /, , 等等&#xff09;&#xff0c;但在该操作符后面没有紧跟相应的表…

【最新华为OD机试E卷】最大利润-贪心的商人(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

Dolphinscheduler 3.2.0版本参数传递并使用switch任务进行判断

原文阅读&#xff1a;【巨人肩膀社区博客分享】3.2.0版本参数传递并使用switch任务进行判断 目标&#xff1a;根据日期判断执行哪项子任务 &#xfeff; 调度器版本&#xff1a;3.2.0 在这个版本中官方支持的参数传递任务类型有6中&#xff0c;分别为shell,sql,procedure,py…