带你了解每天认识一个设计模式-组合模式:树形结构的统一接口艺术的编程语言

YOLOv8实战教程:从模型训练到改进的全流程指南 回顾这段YOLOv8的实战历程,从最初的模型训练到后来的各种改进尝试,我深刻体会到目标检测技术的魅力与挑战。YOLOv8作为一款优秀的框架,不仅易用性强,而且具备很强的可扩展性,让我能在其基础上不断创新。未来,我计划在以下几个方向继续探索:一是将YOLOv8与多模态技术结合,尝试实现图像与文本的联合目标检测;二是深入研究自监督学习在YOLOv8中的应用,减少对标注数据的依赖;三是探索YOLOv8在更广泛场景的部署,如机器人、自动驾驶等。 阅读详情
兔肥霖贸谈在当今的网络环境中,大多数设备都位于网络地址转换 (NAT) 设备之后,这导致了一个普遍存在的问题:如何让位于不同 NAT 设备后的两个设备直接建立通信? 这个问题在 P2P 应用中尤为突出,如在线游戏、视频会议、文件共享等场景都需要设备之间的直接通信。

传统的 C/S 架构应用中,客户端可以主动向服务器发起连接,但反过来却不行。这是因为 NAT 设备会阻止来自公网的未经请求的连接尝试。然而,在 P2P 应用中,我们需要两个客户端之间能够直接通信,这就需要突破 NAT 的限制,这就是 P2P 打洞技术所要解决的核心问题。

二.NAT 类型与工作原理

NAT 的基本概念与作用

网络地址转换 (NAT) 是一种将私有网络地址 (如 192.168.1.0/24) 转换为公网地址的技术。它的主要作用是节约公网 IP 地址资源,使得多个私有网络设备可以共享一个公网 IP 地址访问互联网。

在 NAT 设备中,维护着一个映射表,记录了私有 IP 地址和端口到公网 IP 地址和端口的映射关系。当内部设备向外部发送数据时,NAT 设备会将数据包的源 IP 和端口替换为自己的公网 IP 和一个可用端口,并在映射表中记录这一转换。当外部设备返回响应时,NAT 设备根据映射表将数据包转发给对应的内部设备。

NAT 设备通常位于家庭或企业网络的边界,作为内部网络与公网之间的网关。它的存在使得外部设备无法直接访问内部设备,这给 P2P 通信带来了挑战。

NAT 类型及其对通信的影响

根据 NAT 设备的行为特性,可以将其分为四种主要类型:完全圆锥型 (Full Cone)、限制圆锥型 (Restricted Cone)、端口限制圆锥型 (Port Restricted Cone) 和对称型 (Symmetric)。不同类型的 NAT 对 P2P 通信的影响各不相同。

完全圆锥型 NAT

完全圆锥型 NAT 是最开放的 NAT 类型。在这种 NAT 下,一旦内部设备的某个端口被映射到公网地址的某个端口,任何外部设备都可以向这个公网端口发送数据,NAT 设备会将数据转发给对应的内部设备,而不管这些数据来自哪个外部地址。

数学描述:设内部地址为 (iAddr, iPort),映射到公网地址 (eAddr, ePort)。对于任意外部地址 (aAddr, aPort),如果外部设备向 (eAddr, ePort)发送数据,NAT 设备会将其转发给 (iAddr, iPort)。

这种类型的 NAT 对 P2P 通信最为友好,因为一旦映射建立,两个设备之间可以直接通信。

限制圆锥型 NAT

限制圆锥型 NAT 比完全圆锥型 NAT 更严格。在这种 NAT 下,只有当内部设备已经向某个外部 IP 地址发送过数据后,该外部 IP 地址才能向内部设备的映射端口发送数据,但可以是任意端口。

数学描述:设内部地址为 (iAddr, iPort),映射到公网地址 (eAddr, ePort)。对于外部地址 (aAddr, aPort),只有当内部设备已经向 aAddr发送过数据时,NAT 设备才会将来自 (aAddr, aPort)的数据转发给 (iAddr, iPort)。

这种类型的 NAT 允许外部设备与内部设备通信,但仅限于内部设备已经通信过的 IP 地址,而不考虑端口。

端口限制圆锥型 NAT

端口限制圆锥型 NAT 是更严格的一种类型。在这种 NAT 下,只有当内部设备已经向某个外部 IP 地址的特定端口发送过数据后,该外部 IP 地址的该特定端口才能向内部设备的映射端口发送数据。

数学描述:设内部地址为 (iAddr, iPort),映射到公网地址 (eAddr, ePort)。对于外部地址 (aAddr, aPort),只有当内部设备已经向 (aAddr, aPort)发送过数据时,NAT 设备才会将来自 (aAddr, aPort)的数据转发给 (iAddr, iPort)。

这种类型的 NAT 对通信的限制更加严格,要求外部设备的 IP 和端口都必须是内部设备已经通信过的。

对称型 NAT

对称型 NAT 是最严格的一种类型。在这种 NAT 下,内部设备每次向不同的外部 IP 地址或端口发送数据时,NAT 设备都会创建一个新的映射。此外,只有来自该特定外部 IP 地址和端口的数据才能被转发回内部设备。

数学描述:设内部地址为 (iAddr, iPort)。当内部设备向 (aAddr1, aPort1)发送数据时,NAT 设备会创建一个映射 (eAddr1, ePort1)。当内部设备向 (aAddr2, aPort2)发送数据时,NAT 设备会创建另一个映射 (eAddr2, ePort2),即使 aAddr1 == aAddr2但 aPort1 != aPort2。对于外部地址 (aAddr, aPort),只有当内部设备已经向 (aAddr, aPort)发送过数据时,NAT 设备才会将来自 (aAddr, aPort)的数据转发给 (iAddr, iPort)。

这种类型的 NAT 使得 P2P 通信变得非常困难,因为两个设备之间很难建立直接的连接。

NAT 类型对 P2P 通信的影响总结

不同类型的 NAT 对 P2P 通信的支持程度各不相同:

NAT 类型 P2P 通信支持度 直接通信可能性

完全圆锥型 高 容易

限制圆锥型 中等 可能

端口限制圆锥型 低 困难

对称型 极低 几乎不可能

在实际应用中,大多数家用路由器使用完全圆锥型或限制圆锥型 NAT,而企业级路由器可能使用更严格的类型。了解 NAT 的类型对于实现可靠的 P2P 通信至关重要。

三.UDP 打洞原理与实现

UDP 打洞的基本原理

UDP 打洞是实现 P2P 通信的常用方法,其基本原理是利用 NAT 设备的特性,通过中间服务器的协助,在两个客户端的 NAT 设备上建立映射关系,使得它们能够直接通信。

UDP 打洞的核心思想是:即使两个客户端都位于 NAT 之后,只要它们能够同时向对方的公网地址发送数据,它们的 NAT 设备就会建立相应的映射,从而允许后续的数据直接通过。

具体来说,UDP 打洞的过程如下:

客户端 A 和客户端 B 分别向中间服务器 S 发送数据,服务器 S 记录下它们的公网地址 (A_public, A_port)和 (B_public, B_port)。

服务器 S 将 B 的公网地址告诉 A,将 A 的公网地址告诉 B。

客户端 A 向 B 的公网地址发送一个 UDP 数据包,客户端 B 向 A 的公网地址发送一个 UDP 数据包。

由于这两个数据包是主动发送的,它们的 NAT 设备会建立相应的映射,允许后续的数据通过。

一旦映射建立,客户端 A 和 B 就可以直接通信了。

需要注意的是,第二步中客户端 A 和 B 发送的初始数据包可能会被对方的 NAT 设备丢弃,但这并不影响,因为这两个数据包的主要目的是在各自的 NAT 设备上建立映射关系,而不是实际传输数据。

UDP 打洞的数学模型

为了更好地理解 UDP 打洞的原理,我们可以建立一个数学模型。

假设客户端 A 的内网地址为 A_private,映射到公网地址 A_public;客户端 B 的内网地址为 B_private,映射到公网地址 B_public。中间服务器 S 的地址为 S_addr。

在打洞过程中,我们需要解决以下问题:

如何让 A 和 B 获取对方的公网地址?

如何让 A 和 B 的 NAT 设备允许对方的数据通过?

数学上,我们可以将这个问题描述为:找到一种方式,使得对于客户端 A 和 B,有:

image

其中 NAT_X(Y)表示地址 Y 经过 NAT 设备 X 转换后的公网地址。

通过中间服务器 S 的协助,A 和 B 可以获取对方的公网地址。然后,通过同时向对方的公网地址发送数据,它们的 NAT 设备会建立相应的映射,使得:

image

从而允许后续的数据直接传输。

UDP 打洞的具体实现步骤

UDP 打洞的具体实现可以分为以下几个步骤:

客户端注册:客户端 A 和 B 分别向中间服务器 S 发送注册请求,服务器 S 记录它们的公网地址。

交换地址信息:服务器 S 将 A 的公网地址告诉 B,将 B 的公网地址告诉 A。

打洞请求:客户端 A 和 B 同时向对方的公网地址发送 UDP 数据包,触发各自 NAT 设备建立映射。

直接通信:一旦映射建立,客户端 A 和 B 就可以直接交换 UDP 数据包,无需再通过服务器 S。

需要注意的是,在步骤 3 中,客户端 A 和 B 必须同时向对方的公网地址发送数据,否则可能无法建立正确的映射。此外,第一次发送的数据可能会被对方的 NAT 设备丢弃,但后续的数据将能够正确传输。
其中:

Message Type:表示消息的类型,如请求、成功响应、错误响应等。

Message Length:表示消息的长度,不包括头部。

Magic Cookie:固定值 0x2112A442,用于识别 STUN 消息。

Transaction ID:用于关联请求和响应的唯一标识符。

STUN 消息的属性部分包含了各种信息,如 XOR-MAPPED-ADDRESS(客户端的公网地址)、USERNAME(用户名)、MESSAGE-INTEGRITY(消息完整性)等。

STUN 协议在 P2P 中的应用

STUN 协议在 P2P 通信中的主要应用是帮助客户端发现自己的公网地址,这是实现打洞的前提条件。通过 STUN 协议,客户端可以获取以下信息:

公网 IP 地址:客户端在 NAT 设备后的公网 IP 地址。

公网端口:客户端在 NAT 设备后的公网端口。

NAT 类型:客户端所在 NAT 设备的类型。

这些信息对于实现 P2P 通信非常重要,特别是在复杂的网络环境中。

TURN 协议

TURN 协议概述

TURN (Traversal Using Relays around NAT) 是一种在 STUN 无法穿透 NAT 时使用的中继协议。它的基本原理是:当两个客户端无法直接建立连接时,通过 TURN 服务器中转数据。

TURN 协议的核心思想是:如果两个客户端无法直接通信,它们可以通过 TURN 服务器中转数据,从而实现间接的 P2P 通信。

TURN 协议的工作流程如下:

客户端向 TURN 服务器发送 Allocate 请求,请求分配一个中继地址。

TURN 服务器分配一个中继地址,并返回给客户端。

客户端使用这个中继地址与其他客户端通信。

当两个客户端无法直接通信时,它们的数据通过 TURN 服务器中转。

TURN 协议的主要用途是在直接打洞失败时提供回退机制,确保 P2P 通信的可靠性。

TURN 服务器的工作原理

TURN 服务器的工作原理如下:

分配中继地址:TURN 服务器为客户端分配一个公网的中继地址和端口。

建立绑定:客户端与 TURN 服务器建立绑定关系,确保后续的数据可以通过中继地址传输。

数据中继:当两个客户端无法直接通信时,TURN 服务器作为中间人,将数据从一个客户端转发到另一个客户端。

连接维护:TURN 服务器维护连接状态,确保数据传输的连续性。

TURN 服务器的核心功能是在无法直接建立 P2P 连接时提供数据中继服务,确保通信的可靠性。

TURN 协议在 P2P 中的应用

TURN 协议在 P2P 通信中的主要应用是作为打洞失败后的回退机制。当直接打洞无法建立连接时,TURN 协议提供了以下功能:

中继服务:通过 TURN 服务器中转数据,确保通信的可能性。

地址分配:为客户端分配公网的中继地址,便于其他客户端连接。

连接维护:维护连接状态,确保数据传输的连续性。

TURN 协议的主要优势是提供了可靠的回退机制,确保 P2P 通信在各种网络环境下都能工作。

ICE 协议

ICE 协议概述

ICE (Interactive Connectivity Establishment) 是一种综合利用 STUN 和 TURN 协议,帮助对等设备建立连接的框架。它的基本原理是:通过收集多种候选地址,按优先级排序,然后尝试所有可能的连接路径,找到最佳的通信方式。

ICE 协议的核心思想是:收集所有可能的候选地址,包括直接地址、STUN 获取的公网地址和 TURN 获取的中继地址,然后尝试所有可能的连接路径,选择最优的路径进行通信。

ICE 协议的工作流程如下:

候选地址收集:收集所有可能的候选地址,包括本地地址、STUN 获取的公网地址和 TURN 获取的中继地址。

候选地址交换:通过信令服务器交换候选地址信息。

连接性检查:对所有可能的候选地址对进行连接性检查,确定哪些路径可用。

路径选择:根据连接性检查的结果,选择最优的路径进行通信。

ICE 协议的主要优势是能够在各种网络环境下建立可靠的 P2P 连接,特别是在复杂的网络环境中。

ICE 协议的工作原理

ICE 协议的工作原理可以分为以下几个步骤:

候选地址收集:

本地候选地址:设备的本地 IP 地址和端口。

服务器反射候选地址:通过 STUN 协议获取的公网地址和端口。

中继候选地址:通过 TURN 协议获取的中继地址和端口。

候选地址优先级排序:

本地候选地址通常具有最高优先级。

服务器反射候选地址次之。

中继候选地址优先级最低。

候选地址交换:

通过信令服务器交换候选地址信息。

每个设备都获得对方的所有候选地址。

连接性检查:

对所有可能的候选地址对进行连接性检查。

使用 STUN 协议的 Binding 请求和响应进行检查。

路径选择:

根据连接性检查的结果,选择最优的路径。

优先选择直接连接的路径,其次是中继路径。

ICE 协议的核心优势是能够自动适应各种网络环境,选择最佳的通信路径,确保连接的可靠性和性能。

ICE 协议在 P2P 中的应用

ICE 协议在 P2P 通信中的主要应用是提供一种可靠的连接建立机制,特别是在复杂的网络环境中。它的主要应用场景包括:

视频会议:在 WebRTC 中,ICE 协议用于建立对等设备之间的音视频连接。

文件共享:在 P2P 文件共享应用中,ICE 协议用于建立对等节点之间的直接连接。

在线游戏:在在线游戏中,ICE 协议用于建立玩家之间的低延迟连接。

实时通信:在各种需要实时通信的应用中,ICE 协议提供可靠的连接建立机制。

ICE 协议的主要优势是能够在各种网络环境下建立可靠的 P2P 连接,特别是在 NAT 设备后的网络环境中。它已经成为现代 P2P 应用中连接建立的标准方法。赝嵌堆康漳始矩咽程假
QGis二次开发 —— 2、第一个程序 - 加载栅格tif与矢量shp文件(附源码) 阅读详情

相关推荐

AI人工智能领域多模态大模型的数字孪生应用

本文旨在系统性地介绍多模态大模型在数字孪生领域的最新应用进展,探讨其技术原理、实现方法和应用价值。内容范围涵盖从基础概念到前沿技术,从理论分析到实践案例。文章首先介绍多模态大模型和数字孪生的基本概念,然后深入分析两者的结合点,接着通过具体案例展示应用实践,最后探讨未来发展趋势和挑战。多模态大模型:能够同时处理和融合多种数据模态(如文本、图像、视频、音频等)的大型人工智能模型数字孪生:物理实体或系统的虚拟副本,通过实时数据同步实现虚实交互跨模态融合:将不同数据模态的信息进行有效整合和关联的技术。

AI云原生与云计算技术学院 1325

分析每天认识一个设计模式-组合模式:树形结构的统一接口艺术的编程语言

分析javascript异步进阶的编程语言

SAFADGADSGASA的博客 818

STM32寄存器级电机驱动:DRV8833 H桥与PWM调速原理

电机驱动是嵌入式控制系统的核心基础能力,其本质是微控制器通过数字信号精确控制功率器件的开关时序。理解H桥电路结构、反电动势防护机制及PWM调制原理,是实现可靠直流电机控制的前提。DRV8833作为典型双H桥驱动芯片,支持快衰减与慢衰减两种PWM调速模式,分别对应不同的电流泄放路径与动态响应特性。在STM32平台上,需结合时钟树配置、GPIO复用、定时器寄存器(PSC/ARR/CCR)精确计算,将抽象的转速需求转化为可执行的硬件操作。该技术广泛应用于智能小车、机器人关节、工业定位系统等实时运动控制场景,是掌握

weixin_42613017的博客 679

分享一个每天认识一个设计模式-组合模式:树形结构的统一接口艺术的编程语言

分享一个javascript异步进阶的编程语言

ASFASFASAXA的博客 884

自制非接触式静电探测仪:从振动电容原理到微弱信号检测实践

微弱信号检测是电子测量领域的核心挑战之一,尤其在需要避免物理接触或防止干扰的场景中。其基本原理在于将难以直接获取的微小物理量(如电流、电压)通过传感器转换为电信号,再经过放大、滤波等处理进行提取。锁相放大技术是解决这一问题的关键手段,它利用参考信号与目标信号的同步性,从强噪声背景中恢复出有效信息,极大提升了信噪比和测量灵敏度。这项技术的工程价值在于实现了对纳安级电流、微伏级电压等高难度参数的可靠测量。在静电防护、材料表面电位分析、生物电信号采集等应用场景中,非接触式测量需求广泛。本文聚焦的基于振动电容原理的

weixin_32349093的博客 274

【3D目标检测】MMdetection3d——搭建IS-Fusion环境+nuScenes数据集训练

搭建IS-Fusion环境+nuScenes数据集训练

qq_44703886的博客 2323

探索每天认识一个设计模式-组合模式:树形结构的统一接口艺术的编程语言

探索javascript异步进阶的编程语言

ASFASFASAXA的博客 829

8、水力压裂引起的地质材料力学性质变化的可视化研究

本研究探讨了水力压裂引起的地质材料力学性质变化的可视化方法。利用超声剪切波形数据,通过短时傅里叶变换(STFT)和主成分分析(PCA)进行特征提取和降维,并应用K-means聚类、凝聚聚类和DBSCAN等无监督学习方法对地质力学变化进行非侵入式可视化分析。研究比较了不同特征工程、聚类方法和降维策略对可视化效果的影响,并结合位移不连续性理论为聚类结果分配地质力学变化指数,以提高结果的物理解释性。最终,该方法成功实现了对水力压裂引起的岩石力学性质变化的高效、可靠可视化。

emacs5lisp的博客 109

解析每天认识一个设计模式-组合模式:树形结构的统一接口艺术的编程语言

解析javascript异步进阶的编程语言

ASADGSDASXA的博客 647

柔性电极材料新突破:清华团队实现0.1mV级脑信号采集精度

清华团队的 0.1mV 级柔性电极突破,不仅是材料科学与神经工程的跨界胜利,更标志着脑机接口从 “信号采集” 向 “神经交互” 的范式转变。当电极与脑组织实现 “柔性共生”,人类首次拥有了窥探大脑微观电活动的 “精密探头”,这既是神经疾病诊疗的里程碑,更是人机融合时代的新起点。随着技术标准化与产业生态的完善,这场始于实验室的 “柔性革命”,正加速向临床病房、智能工厂、消费电子等场景渗透,为脑机接口的大规模应用铺设 “柔性跑道”。:当柔性电极实现 “神经信号的无损捕捉”,如何平衡技术创新与伦理边界?

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2944

把 SAP S/4HANA 中的 Maintain Email Templates 用好:从模板维护、语言变体、业务绑定到传输治理的完整实践

摘要:SAP邮件模板管理常被低估,实则关乎审批通知、业务提醒等关键输出。官方推荐通过复制标准模板实现自定义,而非直接修改标准内容,以保持核心稳定。模板维护涉及语言变体、业务绑定、数据传输等治理环节,需业务顾问与开发团队协作确保字段来源与渲染逻辑。实施时需注意Fiori配置、权限分配及传输管理,避免测试与生产环境差异。模板设计应平衡灵活性与复杂度,遵循分层测试策略(内容、数据、流程),并建立命名规范以维护资产清晰度。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 67

说一说每天认识一个设计模式-组合模式:树形结构的统一接口艺术的编程语言

说一说javascript异步进阶的编程语言

ASFASFASAXA的博客 504

YOLO11涨点优化:loss优化 | 一种新的基于Wasserstein距离的小目标检测评估方法,助力小目标涨点

提出了一种新的基于Wasserstein距离的小目标检测评估方法,通过它们对应的高斯分布计算它们之间的相似性

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1018

聊一聊每天认识一个设计模式-组合模式:树形结构的统一接口艺术的编程语言

聊一聊javascript异步进阶的编程语言

ASFASFASAXA的博客 793

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

盘点每天认识一个设计模式-组合模式:树形结构的统一接口艺术的编程语言

盘点javascript异步进阶的编程语言

SAFADGADSGASA的博客 346

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 解析每天认识一个设计模式-组合模式:树形结构的统一接口艺术可操作性
下一篇: 说一说每天认识一个设计模式-组合模式:树形结构的统一接口艺术可操作性
普通网友
博客等级 码龄1年 37粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值