【学习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 工作的核心,确保数据包能够在响应回来的时候,准确地找到原始的私有设备。
相关推荐
书弋江山10 分钟前
flutter 跨平台编码库 protobuf 工具使用
android·flutter
程序员老刘·12 分钟前
Flutter 3.35 更新要点解析
flutter·ai编程·跨平台开发·客户端开发
tangweiguo0305198712 分钟前
Flutter vs Android:页面生命周期对比详解
flutter
tangweiguo0305198717 分钟前
Flutter网络请求实战:Retrofit+Dio完美解决方案
flutter
来来走走3 小时前
Flutter开发 webview_flutter的基本使用
android·flutter
Jerry说前后端3 小时前
Android 组件封装实践:从解耦到架构演进
android·前端·架构
louisgeek4 小时前
Android OkHttp Interceptor
android
落魄的Android开发4 小时前
Flutter以模块化适配 HarmonyOS方案的实现步骤
flutter
大王派来巡山的小旋风4 小时前
Kotlin基本用法三
android·kotlin
tangweiguo030519875 小时前
Flutter GetX 全面指南:状态管理、路由与依赖注入的最佳实践
flutter