当前位置: 首页 > news >正文

家庭宽带的内网穿透实践

家庭宽带的内网穿透实践

龙生龙,凤生凤,老鼠的儿子会打洞。我们今天来学习 “打洞” !

背景

众所周知,当前运营商在IPv4环境下面,由于地址资源不够,启用了大内网策略。导致家庭宽带到路由器这一层都分配了运营商的NAT内网IP。这一环境对我们家里有自建NAS或者想暴露公网服务的需求的人来说,特别不友好。当然,如果是纯IPv6环境另说,IPv6环境可以直连。所以针对NAT的内网IPv4环境,我们需要使用内网穿透。本文实现了一个小demo讲解内网穿透的原理,带你一步一步实现家庭宽带的IPv4内网穿透。

拓扑介绍

当我们分配到了运营商的大内网IPv4地址之后,家里的网络拓扑极有可能变为这样:

[家庭NAS节点] -- IP: 192.168.0.100|v[NAT网关1 家庭路由器节点] -- 内网IP: 192.168.0.1 -- 外网IP: 10.50.206.110|v[NAT网关2 运营商节点] -- 公网IP: 111.8.72.140   -> 想办法让其透传到NAS节点端口提供网络服务

值得注意的是,如果从家庭NAS节点到运营商节点之间有多个NAT网关,且不受我们控制的话,那么内网穿透就无法完成。从本人实践来看的话,目前移动运营商网络(其它的大家可以实践看下),只会在我们家庭网络出口之上给一层NAT,即如上的网络拓扑。如果我们想要把内网NAS节点上面的服务监听端口透传到运营商节点的话,走过的NAT路径应该就是这样:

家庭终端节点 [连接端口1] <->  [NAT端口1] 家庭路由器 [连接端口2] <-> [NAT端口3] 运营商节点 [公网端口]

打洞原理

我们知道,当一个内网终端访问其它公网服务的时候,在经过的NAT网关上面就会依次分配端口映射,当访问结束之后,连接断开,对应的经过的NAT网关上面的映射就会删除。根据我们上文网络拓扑的假设,家庭终端访问其它公网服务(例如qq.com)的路径应该就是这样:

家庭终端节点 [连接端口1] <->  [NAT端口1] 家庭路由器 [连接端口2] <-> [NAT端口3] 运营商节点 [公网端口] <-> qq.com

NAT打洞的原理就是让这条端口映射的链路一直保持,并且能够反向从运营商的公网节点的端口访问回来。那么实现这样的功能,就需要解决三个问题:

  1. 如何让这条连接上面的端口映射一直保持;
  2. 如何得到运营商公网节点上面的IP和端口号;
  3. 如何能够让路径反向访问到我们的TCP监听端口。

端口复用

我们对如上三个问题进行分析,首先就会发现问题1和问题3底下肯定是应该属于不同的socket。但是如果想让链路上面的NAT端口映射保留,就得保留问题1的通信链接的同时,在相同的连接端口号上面复用做问题3的TCP监听。那么引出了第一个解决方案,端口复用。我们知道,Linux系统里面已经支持将一个端口绑定到一条连接的同时,将这个端口复用为监听端口,只需要使用套接字的SO_REUSEPORT和SO_REUSEPORT属性。那么我们就可以假定有一个连接保持的同时,能够在相同的端口上面运行TCP监听服务,做到让NAT端口映射一直保留。

链接保留

解决问题1的思路有很多,例如一般我们假定NAT网关上面的映射不会立即删除,而是隔段时间之后删除。那么我们在很短的时间内通过断开重连的方式就能让映射一直保留。更普遍的做法是我们巧妙利用HTTP请求的keep alive头来让已有的公网HTTP服务器帮我们保持连接。

STUN获取端口

到目前我们解决了问题1和问题3,那么如何获取当前内网这个端口对应的运营商公网节点的IP和端口呢?我们可以搬出STUN协议了。简短介绍STUN的功能,就是我们编写正确的STUN协议请求通过socket发送给STUN服务器之后,STUN服务器就会把我们的公网IP和端口信息通过返回消息给到我们。

端口放行

我们家庭正常路由上面会有防火墙设置,当路由器外部的设备向我们主动发起连接的时候,会被阻止。所以我们应该把对应的路由器上面的端口放行掉。最简单的方法就是使用路由器的DMZ功能,直接将内网里面提供服务的那个设备映射出去,相当于放行了映射设备的所有端口。另外种方法是通过路由器的端口映射功能,将内网服务的端口映射为路由器的对外端口(经过本人实践,发现tplink路由器上面只有内外映射为相同端口才能打通,内外端口设置为不同就不行,暂时本人还不知道原因)。

最终效果

那么通过端口复用方式让同一端口做三件事就实现了我们的打洞需求:用HTTP请求keep alive特性保留链接从而保留NAT端口映射,用相同端口请求STUN服务器获取到公网网关节点的IP和对应端口,在端口上面监听服务并做相关逻辑。最后的效果图如下,实现代码示例放于github gists:
内网服务
目前实现的这个架构里面有一个缺点,就是TCP监听服务必须为端口复用。如果我们想把一个已有的服务暴露出去,但是很多已有的服务的套接字是非复用端口的,怎么办呢?很简单,只用把上图中的TCP监听服务换为一个代理服务就行了,代理服务的监听端口实行复用,收到的数据无脑转发给内网服务就行。如下:
代理转发
关于如何实现一个高效的代理转发功能,这里就不细讲了,可以通过写个程序专门做转发或者用iptables工具实现内核优化级别的转发等。

以下是极好的内网穿透相关项目:
一个python写的内网穿透工具,Natter。很容易拿来阅读学习。
一个c语言写的内网穿透工具,natmap。
一个软硬路由公网神器(包含了上述实现原理的内网穿透),lucky。

相关文章:

家庭宽带的内网穿透实践

家庭宽带的内网穿透实践 龙生龙&#xff0c;凤生凤&#xff0c;老鼠的儿子会打洞。我们今天来学习 “打洞” &#xff01; 背景 众所周知&#xff0c;当前运营商在IPv4环境下面&#xff0c;由于地址资源不够&#xff0c;启用了大内网策略。导致家庭宽带到路由器这一层都分配了…...

LabVIEW在电子电工教学中的应用

在电子电工教学领域&#xff0c;传统教学模式面临诸多挑战&#xff0c;如实验设备数量有限、实验过程存在安全隐患、教学内容更新滞后等。LabVIEW 作为一款功能强大的图形化编程软件&#xff0c;为解决这些问题提供了创新思路&#xff0c;在电子电工教学的多个关键环节发挥着重…...

算法每日刷题 Day6 5.14:leetcode数组1道题,用时30min,明天按灵茶山艾府题单开刷,感觉数组不应该单算

14. 977.有序数组的平方(简单&#xff0c;学习&#xff0c;双指针) 977. 有序数组的平方 - 力扣&#xff08;LeetCode&#xff09; 思想 法一: 1.平方赋值到另一个数组sort排序 法二: 1.寻找负数和非负数的分界线(学习代码如何写&#xff1f;)&#xff0c;[0,neg]负数,[neg1…...

JS逆向实战四:某查查请求头逆向解密

声明&#xff1a;本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;…...

QT之QComboBox组件

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 1.引言2.初见QComboBox3.核心功能和常用方法1. 添加和删除选项2. 获取和设置当前值3. 可编辑模式4. 数据绑定 4.信号与槽5.应用场景6.使用示例7.总结 1.引言 在记事本项目中&#xff0c;不同的编码设…...

数值积分知识

数值积分 对于增加插值节点序列&#xff1a; { x i } i 0 n \left\{x_i\right\}_{i0}^{n} {xi​}i0n​&#xff0c;由插值定理给出&#xff1a; f ( x ) ∑ i 0 n y i l i ( x ) f ( n 1 ) ( ξ ) ( n 1 ) ! ∏ i 0 n ( x − x i ) f(x)\sum_{i0}^{n}y_i l_i(x)\frac{f…...

代码随想录训练营第二十三天| 572.另一颗树的子树 104.二叉树的最大深度 559.N叉树的最大深度 111.二叉树的最小深度

572.另一颗树的子树&#xff1a; 状态&#xff1a;已做出 思路&#xff1a; 这道题目当时第一时间不是想到利用100.相同的树思路来解决&#xff0c;而是先想到了使用kmp&#xff0c;不过这个题目官方题解确实是有kmp解法的&#xff0c;我使用的暴力解法&#xff0c;kmp的大致思…...

力扣-105.从前序与中序遍历序列构造二叉树

题目描述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 class Solution { public:TreeNode* buildTree(vector<int>& preorder, vecto…...

【Linux网络】————详解TCP三次握手四次挥手

作者主页&#xff1a; 作者主页 本篇博客专栏&#xff1a;Linux 创作时间 &#xff1a;2025年5月14日 一、TCP三次握手四次挥手介绍 TCP使用三次握手来进行建立连接&#xff0c;四次挥手来终止连接&#xff0c;为何连接还要这么麻烦呢&#xff0c;那是因为这样可以确保建立…...

LLM(大语言模型)部署加速方法——PagedAttention

一、vLLM 用于大模型并行推理加速 存在什么问题&#xff1f; vLLM 用于大模型并行推理加速&#xff0c;其中核心改进是PagedAttention算法&#xff0c;在 vLLM 中&#xff0c;我们发现 LLM 服务的性能受到内存的瓶颈。在自回归解码过程中&#xff0c;LLM 的所有输入标记都会生…...

附加:TCP如何保障数据传输

附加&#xff1a;TCP如何保障数据传输 LS-NET-012-TCP的交互过程详解 TCP 如何保障数据传输 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是互联网核心协议之一&#xff0c;负责在IP网络上提供可靠的、面向连接的数据传输服务。它位于T…...

【python机器学习】Day 25 异常处理

知识点&#xff1a; 异常处理机制debug过程中的各类报错try-except机制try-except-else-finally机制 在即将进入深度学习专题学习前&#xff0c;我们最后差缺补漏&#xff0c;把一些常见且重要的知识点给他们补上&#xff0c;加深对代码和流程的理解。 借助ai写代码的时候&…...

idea springboot 配置文件 中文显示

这里一定要注意编码。如果使用的是中文&#xff0c;则有可能出现乱码&#xff0c; 请单击IDEA菜单栏中的“File→→Settings→Editor→File Encodings”命令&#xff0c; 然后将 Properties Files(*.properties)下的“Default encoding for properties files"设置为UTF-8,…...

day20-线性表(链表II)

一、调试器 1.1 gdb&#xff08;调试器&#xff09; 在程序指定位置停顿 1.1.1 一般调试 gcc直接编译生成的是发布版&#xff08;Release&#xff09; gcc -g //-g调式版本&#xff0c;&#xff08;体积大&#xff0c;内部有源码&#xff09;&#xff08;DeBug&#…...

深入剖析某App视频详情逆向:聚焦sig3参数攻克

深入剖析某手App视频详情逆向&#xff1a;聚焦sig3参数攻克 一、引言 在当今互联网信息爆炸的时代&#xff0c;短视频平台如某手&#xff0c;已成为人们获取信息、娱乐消遣的重要渠道。对于技术爱好者和研究人员而言&#xff0c;深入探索其内部机制&#xff0c;特别是视频详情…...

数据结构与算法-双向链表专题

目录 一. 双向链表的结构 二.双向链表的使用 2.1 创建节点 2.2 初始化 2.3 打印 2.4 尾插 2.5 头插 2.6 尾删 2.7 头删 2.8 在指定位置pos之后插入数据 2.9 查找数据 2.10 删除pos位置的节点 2.11 销毁链表 一. 双向链表的结构 在List.h的头文件中对链表的结构进行创建 #prag…...

为什么要选择七彩喜数字康养平台?加盟后有何优势?

一&#xff0e;七彩喜数字康养平台 1.技术领先性 七彩喜依托“端-网-云-脑”四层技术架构&#xff0c;整合毫米波雷达、AI算法引擎、区块链等前沿技术&#xff0c;解决传统养老的隐私泄露、设备孤岛等痛点。 比如非接触式健康监测系统通过毫米波雷达实现跌倒检测准确率&#…...

vscode调试c/c++

1. 调试配置选择 调试 C 程序&#xff1a;选择 "Debug C Program"&#xff08;调用 gcc 编译&#xff09;。 调试 C 程序&#xff1a;选择 "Debug C Program"&#xff08;调用 g 编译&#xff09;。 2. 调试步骤 打开代码文件&#xff1a;确保当前编辑器…...

进阶数据结构: AVL树

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…...

C# 调试技巧——日志记录,NuGet内断点

在C#中&#xff0c;Debug.WriteLine()、Trace.WriteLine() 和 Console.WriteLine() 都用于输出信息&#xff0c;但它们的用途和适用场景有显著区别。以下是它们的核心差异总结&#xff1a; Debug.WriteLine()主要适用于控制台程序&#xff0c;输出到控制台Trace.WriteLine() …...

模糊数学方法之模糊贴近度

模糊数学方法之模糊贴近度 一、概述 二、代码实现&#xff08;内含注释&#xff09; #程序文件ex14_3.py # 本段带代码主要是用于判断b是属于a中的哪个种类的 # 通过计算贴近度的形式来实现的 import numpy as np a np.array([[0.4,0.3,0.5,0.3],[0.3,0.3,0.4,0.4],[0.2,0.3…...

Spring AI 集成 Mistral AI:构建高效多语言对话助手的实战指南

Spring AI 集成 Mistral AI&#xff1a;构建高效多语言对话助手的实战指南 前言 在人工智能应用开发领域&#xff0c;选择合适的大语言模型&#xff08;LLM&#xff09;与开发框架至关重要。Mistral AI 凭借其高效的多语言模型&#xff08;如 Mistral-7B、Mixtral-8x7B 等&am…...

季报中的FPGA行业:U型反转,春江水暖

上周Lattice,AMD两大厂商相继发布2025 Q1季报,尽管恢复速度各异,但同时传递出FPGA行业整体回暖的复苏信号。 5月5日,Lattice交出了“勉强及格”的答卷,报告季度营收1亿2000万,与华尔街的预期基本相符。 对于这家聚焦在中小规模器件的领先厂商而言,按照其CEO的预期,长…...

Data Mining|缺省值补全实验

实验内容任务描述 利用sklearn完成缺省值补全&#xff0c;完成4种以上缺失值补全&#xff0c;并完整地进行模型训练与测试。 四种缺失值补全方法&#xff1a;众数插补、均值插补、K-邻近填充、迭代插补(极大似然估计) 采用模型&#xff1a;随机森林RandomForestClassifier( …...

RabbitMQ 快速上手:安装配置与 HelloWorld 实践(一)

一、引言 在当今分布式系统大行其道的技术浪潮下&#xff0c;各个服务之间的通信与协同变得愈发复杂。想象一下&#xff0c;一个电商系统在大促期间&#xff0c;订单服务、库存服务、支付服务、物流服务等众多模块需要紧密配合。如果没有一种高效的通信机制&#xff0c;系统很容…...

适配华为昇腾 NPU 的交互式监控工具

适配华为昇腾 NPU 的交互式监控工具 在人工智能开发的过程中&#xff0c;我们常常希望能够实时了解计算设备的使用情况。对于使用华为昇腾 NPU 的团队来说&#xff0c;传统上只能通过命令行工具&#xff08;如 npu-smi&#xff09;来查询性能指标。但这些命令输出的信息分散且…...

HarmonyOS NEXT~React Native在鸿蒙系统(HarmonyOS)上的适配现状与技术展望

HarmonyOS NEXT&#xff5e;React Native在鸿蒙系统(HarmonyOS)上的适配现状与技术展望 一、背景与现状 鸿蒙系统(HarmonyOS)作为华为自主研发的分布式操作系统&#xff0c;自2019年发布以来已经迭代多个版本。最新的HarmonyOS NEXT更是明确将仅支持原生应用[5]&#xff0c;这…...

匿名函数lambda、STL与正则表达式

一、匿名函数lambda 重点&#xff1a; 怎么传递参数。 传引用还是传 1. 匿名函数的基本语法 [捕获列表](参数列表) mutable(可选) 异常属性 -> 返回类型 {// 函数体 } 语法规则&#xff1a;lambda表达式可以看成是一般函数的函数名被略去&#xff0c;返回值使用了一个 -…...

ssti模板注入学习

ssti模板注入原理 ssti模板注入是一种基于服务器的模板引擎的特性和漏洞产生的一种漏洞&#xff0c;通过将而已代码注入模板中实现的服务器的攻击 模板引擎 为什么要有模板引擎 在web开发中&#xff0c;为了使用户界面与业务数据&#xff08;内容&#xff09;分离而产生的&…...

存储扇区分配表:NAND Flash与SD NAND(贴片式SD卡)的架构差异

NAND Flash 和 SD 卡&#xff08;SD NAND&#xff09;的存储扇区分配表在原理上有相似之处&#xff0c;但由于二者的结构和应用场景不同&#xff0c;也存在一些差异。 相同点&#xff1a; 基本功能&#xff1a;NAND Flash 和 SD 卡&#xff08;SD NAND&#xff09;的存储扇区分…...

FreeRTOS队列原理讲解

继续更新freertos&#xff0c;讲解的是队列&#xff0c;队列是先进先出的一种数据结构&#xff0c;有入队和出队操作&#xff0c;今天主要讲解向队列发送消息源码/从队列取出消息源码。 先讲解入队函数&#xff0c;FreeRTOS中入队操作分为后向入队/前入/覆写&#xff0c;但无论…...

C——俄罗斯方块

前言 编译器选择&#xff1a;VS2022。需要掌握控制台操作、颜色设置、随机数生成、键盘事件、文件操作、二维数组操作等知识。运用语言&#xff1a;C语言。 一、游戏背景 1. 游戏概述 俄罗斯方块是一款经典的益智游戏&#xff0c;主要功能包括&#xff1a; 显示游戏界面 随…...

什么是 Shadow Testing?

Shadow Testing&#xff08;影子测试&#xff09;是一种在生产环境中对比验证新旧系统行为一致性的重要测试方法。它被广泛应用于系统迁移、架构重构、模型上线、A/B测试前的数据验证、灰度发布等场景&#xff0c;尤其在保障线上稳定性和数据正确性方面具有关键作用。 一、什么…...

【操作系统期末速成】①操作系统概述

——————2025.5.14————— 操作系统主要考点&#xff1a;操作系统概述、进程管理、内存管理、文件系统、设备管理&#xff08;前三个重点&#xff0c;第二三个是重中之重&#xff09; 操作系统概念&#xff08;OS&#xff09;&#xff1a;&#xff08;本质上是一个软件…...

关于vue学习的经常性错误

目录 常见问题&#xff1a; 1关于引用本地下载es6模块文件&#xff0c;报404错误 2 使用createApp函数后没有调用mount函数挂载到浏览器 3 在mount函数中&#xff0c;忘记引用插值表达式所在标签的定位符如 标签选择器&#xff0c;类选择器等 4在直接使用Vue3函数时&#…...

使用泛型加载保存数据

文章速览 泛型泛型概述定义优点 实例加载数据保存数据 一个赞&#xff0c;专属于你的足迹&#xff01; 泛型 泛型概述 泛型&#xff08;Generics&#xff09;是 C# 中一种重要的编程特性&#xff0c;它允许程序员编写灵活且类型安全的代码。通过使用泛型&#xff0c;可以创建…...

火山引擎实时音视频 高代码跑通日志

实时音视频 SDK 概览--实时音视频-火山引擎 什么是实时音视频 火山引擎实时音视频&#xff08;Volcengine Real Time Communication&#xff0c;veRTC&#xff09;提供全球范围内高可靠、高并发、低延时的实时音视频通信能力&#xff0c;实现多种类型的实时交流和互动。 通…...

ubuntu清除缓存

pip pip cache purgeconda conda clean -a -yapt apt cleanapt-get apt-get cleanmodelscope modelscope clear-cachehuggingface rm -rf ~/.cache/huggingface/*...

Flink SQL 将kafka topic的数据写到另外一个topic里面

-- 创建源表&#xff0c;使用 RAW 格式接收原始 JSON 数据 CREATE TABLE source_kafka ( id STRING, data STRING ) WITH ( connector kafka, topic source_kafka-topic, properties.bootstrap.servers master01:9092, properties.group.id flink-kafka-group, scan.startu…...

【C++重载操作符与转换】纯虚函数

目录 一、纯虚函数的基本概念 1.1 定义与语法 1.2 抽象类 1.3 派生类的实现要求 二、纯虚函数的使用场景 2.1 定义接口 2.2 实现多态 2.3 设计框架 三、纯虚函数的特性 3.1 纯虚函数可以有实现 3.2 抽象类的构造函数和析构函数 3.3 纯虚函数与接口继承 四、纯虚函…...

面向具身智能的视觉-语言-动作模型(VLA)综述

具身智能被广泛认为是通用人工智能&#xff08;AGI&#xff09;的关键要素&#xff0c;因为它涉及控制具身智能体在物理世界中执行任务。在大语言模型和视觉语言模型成功的基础上&#xff0c;一种新的多模态模型——视觉语言动作模型&#xff08;VLA&#xff09;已经出现&#…...

车用CAN接口芯片:汽车神经系统的沉默构建者

车用CAN接口芯片&#xff1a;汽车神经系统的沉默构建者 在汽车电子系统的复杂架构中&#xff0c;CAN总线如同人体的神经系统&#xff0c;而CAN接口芯片则扮演着神经突触的角色。这些指甲盖大小的芯片&#xff0c;默默承担着整车超过70%的通信任务&#xff0c;却鲜少成为技…...

AI日报 · 2025年5月14日|Android 生态大型更新与多端 Gemini 集成

1、Google “Android Show: I/O Edition” 汇总&#xff1a;设计、安全、Gemini 三线并进 北京时间 5 月 14 日凌晨&#xff08;原文标注 5 月 13 日 PDT&#xff09;&#xff0c;Google 在 I/O 前夕举办的 Android Show 一口气公布四大方向更新&#xff1a;① Mater…...

QT+opencv实现卡尺工具找圆、拟合圆

QT Opencv 实现卡尺工具找圆 找圆工具是自己从其他项目里面单独整理出来&#xff0c;可直接引用到新项目中。 程序中提供了函数接口&#xff0c;其他文件直接传入参数就能获取圆心和半径信息。次工具全采用QT和opencv&#xff0c;全部源码可随需求更改。 以下是实现效果&am…...

养生:拥抱健康生活的实用之道

在忙碌的现代生活中&#xff0c;养生逐渐成为人们追求健康的重要方式。从饮食、运动到睡眠与心态&#xff0c;各个养生环节相辅相成&#xff0c;共同构建起健康生活的大厦。以下为你详细介绍养生的关键要点&#xff0c;助你开启健康生活之旅。 饮食养生&#xff1a;科学搭配&a…...

Llama:开源的急先锋

Llama:开源的急先锋 Llama1&#xff1a;开放、高效的基础语言模型 Llama1使用了完全开源的数据&#xff0c;性能媲美GPT-3&#xff0c;可以在社区研究开源使用&#xff0c;只是不能商用。 Llama1提出的Scaling Law 业内普遍认为如果要达到同一个性能指标&#xff0c;训练更…...

使用大语言模型从零构建知识图谱(中)

从零到一&#xff1a;大语言模型在知识图谱构建中的实操指南 ©作者|Ninja Geek 来源|神州问学 还没有看过上篇的读者可以阅读《使用大语言模型从零构建知识图谱&#xff08;上&#xff09;》了解整个系列的内容 通过创建一个自定义流程来自动上传业务数据 在这一节&#…...

深度强化学习 | 图文详细推导软性演员-评论家SAC算法原理

目录 0 专栏介绍1 最大熵贝尔曼方程2 SAC算法原理推导2.1 参数化动作-价值函数2.2 参数化策略2.3 参数化温度 3 算法流程 0 专栏介绍 本专栏以贝尔曼最优方程等数学原理为根基&#xff0c;结合PyTorch框架逐层拆解DRL的核心算法(如DQN、PPO、SAC)逻辑。针对机器人运动规划场景…...

大数据开发 hadoop集群 3.Hadoop运行环境搭建

一、配置虚拟机 1.1 下载VMware虚拟机 1.下载地址&#xff1a;VMware Workstation下载_VMware Workstation官方免费下载_2024最新版_华军软件园 1.2 创建虚拟机 简易安装信息 1.3. 命名虚拟机 标题一 指定磁盘容量大小&#xff08;推荐大小&#xff09; 1.4. 语言和时区设…...

【​​HTTPS基础概念与原理​】​​HTTPS vs HTTP:为什么现代网站必须用HTTPS?

以下是关于 HTTPS vs HTTP 的详细对比分析&#xff0c;涵盖安全性、性能差异及SEO影响&#xff0c;帮助您全面理解为何现代网站必须采用HTTPS&#xff1a; 一、安全性对比&#xff1a;HTTPS 如何解决 HTTP 的致命缺陷 1. HTTP 的安全隐患 • 明文传输&#xff1a;HTTP 数据以明…...