【学习VPN之路】NET技术

1. 为什么要学习NET技术?

因为在VPN服务端需要使用NET技术做IP包转发,所以要学习。

2. NET是什么?

NET (通常指的是 网络技术 )是与 路由 、地址转换 、数据包转发 和 网络流量管理 相关的技术集合。它解决的是如何将数据包从源设备送到目标设备,如何处理网络中的地址转换(如 NAT ),以及如何优化网络中的数据流量(如 QoS)。简而言之,NET 技术就是用来确保网络数据可以有效、安全地在设备间传输,并提供路由、地址管理和流量控制等功能。

听起来和没说一样,看下面NET技术是如何工作的。

3. NAT 技术是如何工作的?

NAT 技术的核心工作原理是通过 地址转换 将私有网络中的设备的私有 IP 地址转换为公共 IP 地址,这样私有网络中的设备才能访问互联网。当互联网响应请求时,NAT 会根据一些规则(如端口号)将返回的数据包重新路由到正确的私有设备。

我们可以分解这个过程,明确数据包如何从公网回到私有网络中的主机。

NAT 过程详解:

  1. 发送请求:
    • 假设设备 A 在私有网络中,IP 地址为 192.168.1.100,它想要访问一个外部网站 http://example.com。
    • 当设备 A 发送数据包时,它的 源 IP 地址 是 192.168.1.100,但是为了让数据包能够穿越 NAT 路由器,它的 源 IP 地址 会被 NAT 转换为路由器的公共 IP 地址,假设公共 IP 为 203.0.113.5。
    • 同时,NAT 路由器会为这个请求分配一个临时的 源端口 (如 50001),然后将数据包的源地址修改为 203.0.113.5:50001,目标地址是网站 http://example.com。
  1. 请求到达互联网:
    • 现在,设备 A 的数据包已经被 NAT 路由器转发出去,目标服务器(example.com)收到的请求来源是 203.0.113.5:50001。
    • 目标服务器返回响应时,它将数据包发送到 203.0.113.5:50001,而 NAT 路由器并不直接把这个数据包发到外部设备,它需要根据端口和映射来判断最终数据包的目标。
  1. 响应回到 NAT 路由器:
    • 目标服务器(example.com)将响应发送到 NAT 路由器的公共 IP 地址和端口 203.0.113.5:50001。
    • NAT 路由器接收到返回的数据包后,检查该端口号是否存在于其 NAT 转发表中。在这个表中,记录了外部端口号(50001)和对应的 内部设备 IP 地址 (192.168.1.100)以及 内部端口号。
  1. 数据包转发回私有网络:
    • NAT 路由器根据 端口映射 查找到原始请求的私有 IP 地址(192.168.1.100),并将响应数据包的目标 IP 地址修改为 192.168.1.100 ,目标端口号保持不变(即 50001)。
    • 然后,NAT 路由器将数据包转发给设备 A(192.168.1.100),这样设备 A 就收到了互联网响应的包。
  1. 设备 A 接收响应:
    • 最终,设备 A 收到从外部服务器返回的数据包,它的 目标地址 是 192.168.1.100,端口号是之前分配的 50001,NAT 路由器根据这个端口号和 IP 地址,准确地将数据包转发到设备 A。

如何回到主机的关键:端口映射

在整个过程中,NAT 通过维护 端口映射表 来管理进出数据流。这个表的作用是:

  • 外部请求到达时,根据源 IP 和端口号将请求转发到内部的正确设备。
  • 返回响应时 ,NAT 根据 目标端口号 找到原始请求的私有 IP 地址,并将响应数据包正确转发回去。

NAT 在解决以下问题上非常有效:

  • 私有网络与公网地址的转换:它允许多个设备共享同一个公网 IP 地址。
  • 防火墙功能:NAT 隐藏了私有网络设备的 IP 地址,有效地避免了外部设备直接访问内部设备。

总结:

  • 当设备发起请求时,NAT 会改变其源 IP 地址和源端口,将请求发送到外部网络。
  • 当外部服务器响应时,NAT 路由器根据端口号查找映射表,将数据包正确路由回内部设备。
  • 端口映射 是 NAT 工作的核心,确保数据包能够在响应回来的时候,准确地找到原始的私有设备。
相关推荐
应用市场17 分钟前
不用一张图片的像素小游戏:小人是字符串,房间是矩形,平衡靠两千个假玩家
android·kotlin·游戏开发
stevenzqzq1 小时前
android 对渠道的理解
android
QEasycloud1 小时前
BOM接口抛转失败钉钉通知策略实战教程:MySQL异常日志到钉钉消息的端到端配置
android·mysql·钉钉
大龄秃头程序员1 小时前
Flutter 最少代码验证:为什么子 Isolate 调原生,一定要先回到主 Isolate?
flutter
AIsoft_86892 小时前
医患交流内容如何做好记录?
android·iphone
蒸鱼Yuzheng2 小时前
Android Native 崩溃证据链:Tombstone、Build ID 与 Trace 如何联合归因
android·ndk·tombstone·调试符号·崩溃分析
事圆则缓2 小时前
Kotlin 变量与函数:把页面状态和行为写成清楚的契约
android·开发语言·kotlin
hunterandroid2 小时前
MVVM 迁移到 MVI:复杂页面状态如何收敛
android
FungLeo2 小时前
成为全栈·Flutter App 篇·分类、标签与搜索:移动端内容发现
flutter·移动开发·标签·搜索·分类管理·成为全栈
妖星3 小时前
Android 开机动画定制:从 bootanimation.zip 到源码编译
android