STUN协议

STUN协议详解 1.概述 STUN(session traversal utilities for NAT),一种处理NAT传输的协议,主要作为工具来服务其他协议。它允许位于NAT(或多重NAT后的客户端找出自己的公网地址,查出自己位于那种类型的NAT之后以及NAT为某一个本地端口所绑定的internet端口),这些信息被用来两个同时处于NAT路由器之后的主机之间建立UDP通信。目的就是找到外界连接内部地址所需的信息。 2.STUN协议架构 1.请求/响应(request/response)类型,由客户端给服务器 阅读详情
STUN简介  STUN ( Simple Traversal of UDP over NATs , NAT  的 UDP 简单穿越)是一种网络协议,它允许位于 NAT (或多重 NAT )后的客户端找出自己的公网地址,查出自己位于哪种类型的 NAT 之后以及 NAT 为某一   个本地端口所绑定的 Internet 端端口。这些信息被用来在两个同时处于 NAT  路由器之后的主机之间建立 UDP 通信。该协议由 RFC 3489 定义。
一旦客户端得知了 Internet 端的 UDP 端口,通信就可以开始了。
SIP
之类的协议是使用 UDP 分组在 Internet 上传输音频和 / 或视频数据的。不幸的是,由于通信的两个末端往往位于 NAT 之后,因此用传统的方法是无法建立连接的。这也就是 STUN 发挥作用的地方。  
STUN
是一个客户机-服务器协议。一个 VoIP 电话或软件包可能会包括一个 STUN 客户端。这个客户端会向 STUN 服务器发送请求,之后,服务器就会向 STUN 客户端报告 NAT 路由器的公网 IP 地址以及 NAT 为允许传入流量传回内网而开通的端口。
以上的响应同时还使得 STUN 客户端能够确定正在使用的 NAT 类型 —— 因为不同的 NAT 类型处理传入的 UDP 分组的方式是不同的。四种主要类型中有三种是可以使用的:完全圆锥型 NAT 、受限圆锥型 NAT 和端口受限圆锥型 NAT—— 但大型公司网络中经常采用的对称型 NAT (又称为双向 NAT )则不能使用。

NAT工作原理:NAT主要的通过对数据包头的地址替换来完成内网计算机访问外网服务的。当内部机器要访问外部网络时,NAT设备把内部的IP1与端口号1(网络层地址与传输层地址),转换成NAT的外部IP2与新的端口号2,再送给外部网络,数据返回时,再把目的为IP2:端口2的数据包替换为IP1:端口 1,送给内网机器。若通讯协议的内容中有IP地址的传递,如FTP协议,NAT在翻译时还要注意数据包内涉及协议地址交互的地方也要替换,否则协议就会出现地址混乱。在NAT设备中维护了这个要替换地址的映射表,并根据内部计算机的通讯需求维护该表。外部网络来数据包能否进入NAT,主要是看是否已经有可映射的表项,若没有就会丢弃

NAT给P2P带来的问题是:NAT只允许单方面发起连接,通讯的双方不是平等的,P2P网络的基础有了问题,具体的表现为:
  • 内网主机IP是私有的,外部主机看不到,也无法主动发起连接
  • 即使知道了内网IP,但NAT会丢弃没有在影射表的数据包
  • 内网主机可以作为客户端访问外网,但不能作为服务器提供服务
  • 当两个主机都位于各自的NAT之后,要实现P2P的连接,就不仅是谁主动的问题,而是如何解决在两个NAT上同时有对方映射表项的问题。
STUN标准中,根据内部终端的地址(P:p)到NAT出口的公网地址(A:b)的影射方式,把NAT分为四种类型:

1. Full Cone:来自相同的内部地址的请求消息映射为相同的外部地址,与外部地址(目的地址)无关。映射关系为P:p↔A:b,任何外部主机可通过(A:b)发送到数据到(P:p)上。

  2. Restricted Cone:来自相同的内部地址的请求消息映射为相同的外部地址,返回的数据只接受该内部节点曾发数据的那个目的计算机地址X。映射关系为P:p↔A:b↔X,只有来自X的数据包才可通过(A:b)发送到数据到(P:p)上。

  3. Port Restricted Cone:来自相同的内部地址的请求消息映射为相同的外部地址,返回的数据只接受该内部节点曾发数据的那个目的地址X:x。映射关系为 P:p↔A:b↔X:x,只有来自X:x的数据包才可通过(A:b)发送到数据到(P:p)上。

  4. Symmetric(对称) NAT:只有来自相同的内部地址(P:p),并且发送到同一个地址(X:x) 的请求消息,才被映射为相同的外部地址(A:b),返回的数据只接受该内部节点曾发数据的那个目的地址X:x。映射关系为P:p↔A:b↔X:x,当 (P:p)访问(Y:y)时,映射为P:p↔B:c↔Y:y。

P2P利用STUN穿越NAT:

  位于NAT后面终端A与B要穿越NAT直接通讯,可以借助在公网上的第三者Server来帮助。

  穿越NAT的情况分为为两种方式:

1、一方在NAT之后,一方在公网上。这种情况相对简单,只要让NAT之后的终端先发起通讯,NAT就没有作用了,它可以从Server上取得另一个Peer的地址,主动连接,回来的数据包就可以方便地穿越NAT。

2、双方都在NAT之后,连接的成功与否与两个NAT的类型有关。

主要的思路的先通过终端与Server的连接,获得两个终端在NAT外部的地址(IP与端口号),再由终端向对方的外部地址发邀请包,获取自己与对方通讯的外部地址,俗称为“打洞”。关键是获取了NAT外部映射的地址,就可以发包直接沟通,建立连接。但当一方是对称型,另一方是Port Restricted或对称型时,无法有效获取外部地址,邀请包无法到达对方,也就无法穿越NAT。具体的分析可以根据两个NAT的类型分成若干情况分析,这里给一般的穿越例子。

实例:UDP穿越NAT:

  A登录Server,NAT A分配端口11000,Server得到A的地址为100.10.10.10:11000

  B登录Server,NAT B分配端口22000,Server得到B的地址为200.20.20.20:22000

  此时B会把直接来自A的包丢弃,所以要在NAT B上打一个方向为A的洞,那么A就可以向200.20.20.20:22000发送数据了

  打洞的指令来自Server。B向A的地址100.10.10.10:11000发一个UDP报文,被NAT A丢弃,但在NAT B上建立映射记录,NAT B不在丢弃来自A的报文。

  Server通知A可以通讯,A发起数据UDP包给B,NAT B放行,B收到A的包,双方开始通讯

  注:若是对称NAT,当B向A打洞的端口要重新分配(NAT A不会再分配11000端口),B无法获取这个端口,所以不适用本方法。

  实例:TCP穿越NAT:

tcp打洞与udp打洞的区别:tcp在传输数据前要connect,connect 过程中两方要通信

  A登录Server,NAT A分配端口11000,Server得到A的地址为100.10.10.10:11000

  B登录Server,NAT B分配端口22000,Server得到B的地址为200.20.20.20:22000

  A向B发送TCP数据包SYN:192.168.10.11:1234=>200.20.20.20:22000,在NAT A上打洞

  B向A发送TCP数据包SYN:192.168.20.22:1234=>100.10.10.10:11000,在NAT B上打洞

  通道建立,A与B三次握手建立TCP连接


TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议。

TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(stream socket)的一种。

UDP:用户数据报协议。UDP是一种无连接协议。UDP套接口是数据报套接口(datagram socket)的一种。

二、TCP和UDP介绍

1)基本TCP客户—服务器程序设计基本框架

说明:(三路握手)
        1.客户端发送一个SYN段(同步序号)指明客户打算连接的服务器端口,以及初始化序号(ISN) 。
        2.服务器发回包含服务器的初始序号的SYN报文段作为应答。同时,将确认序号(ACK)设置为客户的ISN加1以对客户的SYN 报文段进行确认。一个SYN将占用一个序号。
        3.客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认。

2) 基本TCP客户—服务器程序设计基本框架流程图

3) UDP和TCP的对比:

从上面的流程图比较我们可以很明显的看出UDP没有三次握手过程。

简单点说。UDP处理的细节比TCP少。UDP不能保证消息被传送到(它也报告消息没有传送到)目的地。UDP也不保证数据包的传送顺序。UDP把数据发出去后只能希望它能够抵达目的地。

TCP优缺点:

优点:
        1.TCP提供以认可的方式显式地创建和终止连接。
        2.TCP保证可靠的、顺序的(数据包以发送的顺序接收)以及不会重复的数据传输。
        3.TCP处理流控制。
        4.允许数据优先
        5.如果数据没有传送到,则TCP套接口返回一个出错状态条件。
        6.TCP通过保持连续并将数据块分成更小的分片来处理大数据块。—无需程序员知道

缺点: TCP在转移数据时必须创建(并保持)一个连接。这个连接给通信进程增加了开销,让它比UDP速度要慢。

UDP优缺点:
        1.UDP不要求保持一个连接
        2.UDP没有因接收方认可收到数据包(或者当数据包没有正确抵达而自动重传)而带来的开销。
        3.设计UDP的目的是用于短应用和控制消息
        4.在一个数据包连接一个数据包的基础上,UDP要求的网络带宽比TDP更小。


两个对称NAT,一个对称NAT和一个IP/port受限NAT这两种情况都无法直接穿透,可以用端口猜测。

多级NAT穿透?

WebRTC-STUN协议详解 STUN(Session Traversal Utilities for NAT)NAT会话穿透工具,STUN是一个Client/Server协议,支持请求/响应类型、指示类型两种类型。STUN作为ICE(Interactive Connectivity Establishment,交互式连接建立)解决方案的一种工具使用,STUN协议本身没有穿透等能力,只是为穿透提供反射地址,穿透不成功时,需要使用TURN协议。1.1 请求/响应类型(request/response) 阅读详情

相关推荐

STUN协议解析

文章目录Message HeaderMessage AttributesMAPPED-ADDRESSRESPONSE_ADDRESSCHANGE-REQUESTERROR-CODERESPONSE-ORIGINOTHER-ADDRESSRFC3478 VS RFC5780RFC3478 NAT类型定义完全圆锥形NAT(Full cone NAT)受限圆锥形NAT(Address-Restricte...

123456789 8253

STUN/TURN协议

STUN和TURN协议解析 在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分主机能够直接接入Internet。很多时候,我们希望网络中的两台主机能够直接进行通信,即所谓的P2P通信,而不需要其他公共服务器的中转。由于主机可能位于防火墙或NAT之后,在进行P2P通信之前,我们需要进行检测以确认它们之间能否进行P2P通信以及如何通信。这种技术通常称为NAT穿透(NAT Traversal)。最常见的NAT穿透是基于UDP的技术,如RFC3489中定义的STUN协议。

流媒体巅峰之路 2117

STUN协议学习

1.STUN协议介绍: STUN存在的目的就是进行NAT穿越。 STUN是典型的客户端/服务端模式。客户端发送请求,服务端进行响应。 2.RFC STUN规范 RFC3489/STUN Simple Traversal of UDP Through NAT RFC5389/STUN Session Traversal Utilities for NAT 3.STUN协议: 3.1.包括20字节的STUN header 3.2.Body中可以有...

yuxiang1014的专栏 525

STUN协议简介

STUN协议组成介绍

DefiniteGoal的博客 1874

若依框架(ruoyi vue版)集成jeecg积木报表整体完整实用教程(超长篇幅耐心阅读)

若依框架(ruoyi vue版)集成jeecg积木报表整体完整实用教程,主要说明jeecg积木报表的集成、jeecg积木报表嵌入若依菜单、token权限控制,以及iframe嵌入表格等内容。

weixin_53067723的博客 4642

企业知识库AI助手的权限管理架构:如何实现细粒度控制?

在展开架构设计前,我们需要先明确“细粒度权限”的核心定义,并理解它对AI助手的特殊意义。权限管理的“粒度”,本质是权限控制的精准程度。维度粗粒度权限细粒度权限资源范围entire document(整个文档)field/paragraph(字段/段落)操作类型read/write(读/写)generate_summary/download/export(生成摘要/下载/导出)上下文约束无(静态权限)time/ip/device(时间/IP/设备)适用场景简单系统(如内部wiki)

大数据洞察的博客 1042

stun协议

前一段时间在P2P通信原理与实现中介绍了P2P打洞的基本原理和方法,我们可以根据其原理为自己的网络程序设计一套通信规则, 当然如果这套程序只有自己在使用是没什么问题的。可是在现实生活中,我们的程序往往还需要和第三方的协议(如SDP,SIP)进行对接,因此使用标准化 的通用规则来进行P2P链接建立是很有必要的。本文就来介绍一下当前主要应用于P2P通信的几个标准协议,主要有STUN/RFC3489,STUN/RFC5389,TURN/RFC5766以及ICE/RFC5245。 STUN简介 在前言里我们看到

流媒体巅峰之路 1502

基于Ollama本地大模型的Python自动化翻译工具开发实践

本文详细介绍了如何利用Ollama本地大模型和Python开发自动化批量翻译工具。通过部署本地开源模型、设计精准提示词、处理长文本分割及多种文档格式,构建了一个兼顾隐私安全、可控性与成本效益的翻译流水线,有效解决了文档批量翻译的痛点。

yhn45678901的博客 560

stun协议笔记一(stun格式简介)

一、stun协议格式 1、STUN报文头 1)最高的2位必须置零,这可以在当STUN和其他协议复用的时候,用来区分STUN包和其他数据包。 2)STUN Message Type 字段定义了消息的类型(请求/成功响应/失败响应/指示)和消息的主方法。 虽然我们有4个消息类别,但在STUN中只有两种类型的事务,即请求/响应类型和指示类型。响应类型分为成功和出错两种,用来帮助快速处理STUN...

CrystalShaw的博客 6099

现代控制理论(4)——李雅普诺夫稳定性理论

文章目录

wang7301的博客 5万+

unity从3D升级到urp管线,打包ab包后,材质全部变紫色

确保材质中的被转换为 URP 兼容的着色器。在打包 AssetBundle 时,确保所需的着色器被正确打包。确保运行 AB 包的目标项目中正确配置了 URP 渲染管线。如果加载后材质丢失,检查 AB 包的加载逻辑,确保材质正确应用了着色器。通过这些步骤,你应该能够解决从标准渲染管线切换到 URP 渲染管线后,材质在 AB 包中变紫色的问题。如果问题仍然存在,请根据具体错误日志进一步排查。希望如上措施及解决方案能够帮到有需要的你。

**My Coding Family** 1963

STUN协议流程

STUN协议定义了三类测试过程来检测NAT类型: Test1:STUN Client通过端口{IP-C1:Port-C1}向STUN Server{IP-S1:Port-S1}发送一个Binding Request(没有设置任何属性)。STUN Server收到该请求后,通过端口{IP-S1:Port-S1}把它所看到的STUN Client的IP和端口{IP-M1,Port-M1}作为Binding Response的内容回送给STUN Client。 Test1#2:STUN Client通过端.

wenxinfly的专栏 2439

第六:Charles抓包-苹果手机抓包

【代码】第六:Charles抓包-苹果手机抓包。

欢迎来到本博客! 1658

STUN协议简析

STUN简介STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT 路由器之后的主机之间建立UDP通信。该协议由RFC 3489定义。   

mazidao2008的专栏 1万+

低照度与极端天气环境中的YOLOv8优化:CPA-Enhancer网络的应用与分析

为了克服上述问题,本文提出了一种名为的网络改进方案。CPA-Enhancer通过引入链式思考机制和改进的注意力机制,有效地提升了YOLOv8在低照度和复杂天气下的表现。本文提出了针对低照度和恶劣天气条件下目标检测的YOLOv8改进方案——CPA-Enhancer链式思考网络。通过引入低照度图像增强和多尺度特征融合技术,CPA-Enhancer显著提高了YOLOv8在低光照、雾霾、雨雪等环境下的检测性能。实验结果表明,CPA-Enhancer相较于原始YOLOv8,在多个指标上都有显著的提升,尤其是在mAP。

博客 1567

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

简析STUN协议

STUN简介 STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT 路由器之后的主机之间建立UDP通信。该协议由RFC 3489定义。 一旦

我们这里还有鱼······ 893

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

WebRTC学习七:WebRTC 中 STUN 协议详解

最近在看zlmediakit源码,发现webrtc部分涉及到STUN和DTLS协议,为了更方便的看懂这部分代码,网上查了下STUN协议和DTLS协议,将STUN协议部分先做个记录,后面结合代码如果有更深入的理解,再来更新其中的内容。

wel_006的博客 2116

STM32F407中文手册

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

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

WebRTC的ICE之STUN协议

WebRTC的ICE之STUN协议 WebRTC的ICE之STUN协议WebRTC的ICE之STUN协议前言一、 STUN协议二、 STUN协议头格式三、 STUN Header四、STUN Message Type五、C0C1六、 STUN信息类型七、大小端模式八、StunMagicCookie九、Transaction ID事务ID十、STUN Message Body十一、RFC 3489定义的属性 WebRTC专题开嗨鸭 !!! 前言 WebRTC是音视频行业的标杆, 如果要学习音视频, W

永远积极向上、永远热泪盈眶、永远豪情满怀、永远坦坦荡荡 1035
上一篇: sqlite3移植到ARM开发板
下一篇: P2P通信标准协议(一)之STUN
RunningZyx
博客等级 码龄10年 22粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值