关于STUN的一些基本概念

P2P技术详解(三):P2P技术之STUN、TURN、ICE详解 (webrtc) https://www.cnblogs.com/mlgjb/p/8243690.html 阅读详情

STUN 协议的全称是 Simple Traversal of User Datagram Protocol Through Network Address Translators ,主要功能是检测是否位于 NAT 后面,如果位于 NAT 后面,经过 NAT 转换后的地址和端口是什么,另外可以检测 NAT 的类型。

基本思想

在私网内部安装一个 STUN client ,在公网上安装一个 STUN Server , STUN 协议定义了一些消息格式,大体上分成 Request/Response , client 向 server 发送 request , server 发送 response 给 client 。如何检测 STUN client 是否在 NAT 后面呢?原理很简单, Server 在收到 client 的 UDP 包以后, Server 将接收到该包的地址和端口利用 udp 传回来给 client , client 把这些地址和端口与本机的 ip 地址和端口进行比较,如果不同,说明在 NAT 后面,否则就位于 NAT 后面。为了检测不同类型的 NAT , STUN 协议定义了一些消息属性,要求 Server 有不同的动作,比如发送响应的时候使用不同的 IP 地址和端口,或者改变端口等等。 STUN 协议对 NAT 可能有效,但是对防火墙就无能为力了,因为防火墙可能不会打开 UDP 端口。

NAT 分类

STUN 协议将 NAT 粗略分为 4 种类型,即 Full Cone 、 Restricted Cone 、 Port Restricted Cone 和 Symmetric 。举个实际例子来说明这四种 NAT 的区别:

A 机器在私网( 192.168.0.4 )

NAT 服务器( 210.21.12.140 )

B 机器在公网( 210.15.27.166 )

C 机器在公网( 210.15.27.140 )

现在, A 机器连接过 B 机器,假设是 A ( 192.168.0.4:5000 ) -> NAT (转换后 210.21.12.140:8000 ) -> B ( 210.15.27.166:2000 )。

同时 A 从来没有和 C 通信过。

则对于不同类型的 NAT ,有下列不同的结果:

Full Cone NAT : C 发数据到 210.21.12.140:8000 , NAT 会将数据包送到 A ( 192.168.0.4:5000 )。因为 NAT 上已经有了 192.168.0.4:5000 到 210.21.12.140:8000 的映射。

Restricted Cone : C 无法和 A 通信,因为 A 从来没有和 C 通信过, NAT 将拒绝 C 试图与 A 连接的动作。但 B 可以通过 210.21.12.140:8000 与 A 的 192.168.0.4:5000 通信,且这里 B 可以使用任何端口与 A 通信。如: 210.15.27.166:2001 -> 210.21.12.140:8000 , NAT 会送到 A 的 5000 端口上。

Port Restricted Cone : C 无法与 A 通信,因为 A 从来没有和 C 通信过。而 B 也只能用它的 210.15.27.166:2000 与 A 的 192.168.0.4:5000 通信,因为 A 也从来没有和 B 的其他端口通信过。该类型 NAT 是端口受限的。

Symmetric NAT :上面 3 种类型,统称为 Cone NAT ,有一个共同点:只要是从同一个内部地址和端口出来的包, NAT 都将它转换成同一个外部地址和端口。但是 Symmetric 有点不同,具体表现在:只要是从同一个内部地址和端口出来,且到同一个外部目标地址和端口,则 NAT 也都将它转换成同一个外部地址和端口。但如果从同一个内部地址和端口出来,是到另一个外部目标地址和端口,则 NAT 将使用不同的映射,转换成不同的端口(外部地址只有一个,故不变)。而且和 Port Restricted Cone 一样,只有曾经收到过内部地址发来包的外部地址,才能通过 NAT 映射后的地址向该内部地址发包。

现针对 Symmetric NAT 举例说明:

A 机器连接过 B 机器,假使是 A ( 192.168.0.4:5000 ) -> NAT (转换后 210.21.12.140:8000 ) -> B ( 210.15.27.166:2000 )

如果此时 A 机器( 192.168.0.4:5000 )还想连接 C 机器( 210.15.27.140:2000 ),则 NAT 上产生一个新的映射,对应的转换可能为 A ( 192.168.0.4:5000 ) -> NAT (转换后 210.21.12.140:8001 ) -> C ( 210.15.27.140:2000 )。此时, B 只能用它的 210.15.27.166:2000 通过 NAT 的 210.21.12.140: 8000 与 A 的 192.168.0.4:5000 通信, C 也只能用它的 210.15.27.140:2000 通过 NAT 的 210.21.12.140:8001 与 A 的 192.168.0.4:5000 通信,而 B 或者 C 的其他端口则均不能和 A 的 192.168.0.4:5000 通信。


stun-client:基于[RFC8489](https)的C#编写的非常基本的STUN客户端 非常简单的STUN客户 顾名思义,这是一个非常简单完成的STUN客户端,它使用C#编写并且基于 ,可以在TCP或UDP上运行。 这是作为概念验证的目的,旨在使用STUN协议向NAT添加NAT打Kong。 它仅实现XOR-MAPPED-ADDRESS , MAPPED-ADDRESS和SOFTWARE属性,这些属性足以向公共STUN服务器请求IP端点。 如何使用 请不要 立即下载

相关推荐

打洞服务器源码(stun/tun)

tcp/udp 打洞实现 ,仅做参考 打洞服务器源码 stunserver stunserver

STUN client初试 (续)

 在完成了最基本STUN客户端功能(发送Binding request,接收Binding response)之后,做了一些测试.之前一直纠结在 端口号为何 返回的 与其它软件的返回结果 有出入. 当中.于是疑心四起,在怀疑了NAT修改,字节顺序 之后,不停地调试....然后发现我用0x1111去& 某个值, 而事实是 ,我应该用 0xffff . ( 囧0z)但之后所做的种种测试,让我 决定再写一篇 用来备忘 STUN协议应该注意的很多重要细节。同时也希望能帮助更多 还没接触过该协议的人,我相信我的这些记

ga6840的专栏 9874

Windows Stun Client

Windows下的NAT类型检测工具,程序遵守标准stun协议 stun算法中的NAT类型: StunTypeOpen、StunTypeIndependentFilter(Full Cone)、StunTypeDependentFilter(Address Restrict)、StunTypePortDependedFilter(Port Restrict)、StunTypeDependentMapping(Symmetric)、StunTypeFirewall、Blocked 源码参考http://sourceforge.net/projects/stun/

STUN协议简要介绍

转载:https://blog.youkuaiyun.com/qq_32523587/article/details/103621017 参考:https://www.rfc-editor.org/rfc/rfc5766.html  STUN/TURN          https://www.rfc-editor.org/rfc/rfc5389.html STUN协议在RFC5389中被重新命

花裳落微的博客 4576

解决uc浏览器劫持video标签问题

解决uc视频悬浮播放 ,video标签被浏览器劫持 ,vide0适配

smile_y_y的博客 3449

秦时明月6.2魔改版_从零到一部署指南_含安卓客户端配置与GM后台直通

本文提供《秦时明月》6.2魔改版从零开始的完整部署指南。详细讲解CentOS服务器环境准备、服务端文件部署与安装、关键端口开放及进程验证。重点涵盖安卓客户端APK的IP修改与重签名方法,并介绍了GM后台工具的访问与使用,助你快速搭建并管理专属游戏服务器。

garlic的博客 310

STUN client初试

从前从前很偶然地实现了p2p完成了 从丹东到北京 的一次难忘的'对话'我真的感谢 感谢在甚至不知道hole punching之前 能有这么一次运气让我领略了Internet 带给我的兴奋然后,注定地, 幸运之后 得到了一个不能重现的失望结果.(我的一位同学,你可要长命百岁啊,你是那个历史除了我唯一见证!)不过,毕竟有成功的先例,让我学习一些网络知识有了很多动力.首先,网络上铺天盖地的 nat类型的解释 真的很容易混淆概念..(而且一些是与标准概念冲突的)标准的 那些 '对称' 等的类型定义 ,到现在为止 ,

ga6840的专栏 5163

怎么用phpstudy制作网站

随着实践的深入,你会逐渐掌握更多高级技巧和技术,让你的网站变得更加完善和吸引人。现在你已经成功设置了你的本地Web服务器环境,接下来我们将指导你如何利用这个环境来创建一个简单的PHP网页项目。为了使网站更加动态且功能丰富,我们需要学会如何让PHP脚本与MySQL数据库交互。为了让网站看起来更专业美观,可以考虑引入CSS样式表来定制网页布局及视觉效果。当你对本地开发的网站感到满意后,下一步就是将其发布到互联网上供他人访问了。让我们进一步扩展我们的网站,加入一个简单的用户注册与登录系统。

2401_87999399的博客 6574

STUN协议简析

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

mazidao2008的专栏 1万+

简易电梯控制系统设计(两层楼)(

(电子科技大学 数字系统实验二 结课验收项目 ) 题目要求:

m0_48801027的博客 1万+

V4L2教程(1):Ubuntu V4L2开发环境搭建与设备探索

欢迎来到V4L2学习指南的第一篇!本文将带你从零开始,在Ubuntu系统上搭建完整的V4L2视频采集开发环境。无论你是想开发视频监控、视频会议还是机器视觉应用,掌握V4L2都是Linux视频开发的必经之路。 **本节学习目标**: - 理解V4L2的基本概念和架构 - 搭建Ubuntu下的V4L2开发环境 - 掌握v4l2-ctl等调试工具的使用 - 学会检测和配置USB摄像头设备

琅嬛福地 417

stun信令

#1. 简介 stun协议本身是用来进行NAT穿透使用,其本身实际上是NAT内部设备获取外部IP地址的一种协议。STUN协议在RFC上目前经过三种演变,其中RFC3489上定义的STUN和之后的RFC5389和8489上定义的stun在概念上存在明显区分: RFC3489定义:Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs) (STUN) RFC5389和RFC8489:Se

qq_32648921的博客 2054

vue2学习笔记2-老规矩,从Hello World开始,了解Vue实例和模板

想要把“Hello,World”放置在页面上,首先需要准备一个HTML的块级元素div,来承接内容。

l_q_l的专栏 1256

STUN协议

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

RunningZyx的博客 1103

Nmap源码分析(端口扫描)

端口扫描是Nmap的核心功能,用于确定目标机的端口状态(开放、关闭、过滤等),也为Nmap的服务与版本扫描、OS扫描、脚本扫描提供基本的指引信息。所以,深入理解端口扫描的实现对分析其他的扫描方式很有帮助。 1简单回顾   首先简要回顾一下端口扫描的原理以及命令行选项。 1.1扫描原理   Nmap提供的10多种类型的端口扫描方法,如TCP SYN/ACK/FIN/Xmas/NULL/ Windows/Connect,FTP Bounce, Idle scan, UDP port u...

墨痕诉清风的博客 1597

GD32H757的can通信配置,提供方案参考!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1834

webrtc P2P之stun协议介绍

https://www.jianshu.com/p/227bb04179c8 STUN简介 RFC5389中,STUN的全称为Session Traversal Utilities for NAT,即NAT环境下的会话传输工具, 是一种处理NAT传输的协议,但主要作为一个工具来服务于其他协议。和STUN/RFC3489类似,可以被终端用来发现其公网IP和端口,同时可以检测端点间的连接性,也可以作为一种保活(keep-alive)协议来维持NAT的绑定。和RFC3489最大的不同点在于,STUN本身不再是

mengzhengjie的专栏 582

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

stun协议分析

先看懂http://www.faqs.org/rfcs/rfc3489.html 代码可以看ortp-0.13.1src目录下的Stun.cStun_udp.cInclude/Ortp目录下的Stun.hStun_udp.h补充了rfc3489文档中没有的XorMappedAddress属性,看懂也就差不多了,也可以多看看网络字节流到应用中的结构化之间的相互处理。 

linux_chen的专栏 2270

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

STUN协议简介

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

weixin_30289831的博客 110

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

stun p2p穿越nat技术 简介

P2P网络要求通信双方都能主动发起访问,但是NAT设备的存在,却阻断了这种主动访问,导致P2P应用无法正常运行。STUN是一种解决P2P应用NAT穿越问题的常用技术。它允许网络设备找出通信端点经NAT设备后的IP地址和端口号,并利用这些信息在通信双方之间建立一条可以穿越NAT设备的数据通道,实现P2P通信。STUN服务器:是一个发送STUN绑定响应和接受STUN绑定请求的实体,例如路由器,STUN服务器通常部署在公网上。STUN客户端:是一个发送STUN绑定请求和接受STUN绑定响应的实体,例如路由器。

whatday的专栏 1253

STUN和TURN技术浅析

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

day_day_up1991的博客 970

美畅物联丨P2P系列之STUN服务器:助力网络穿透

STUN(Session Traversal Utilities for NAT)服务器作为应对这一挑战的网络协议,起着不可或缺的重要作用,像一座桥梁,帮助客户端突破NAT阻碍,发现自身公共IP地址和端口,为实时通信应用的顺畅运行奠定基础。在请求数据包中,客户端会携带一些必要的标识信息,以便 STUN 服务器能够准确识别和处理该请求。例如,内部主机A向外部主机B发送过请求,外部主机B才能通过A映射的公共IP地址和端口与A建立连接,而未与A有过通信交互的外部主机C则无法直接连接,一定程度上增强了网络安全性。

changlian24hlink的博客 1745

深入探讨 STUN 和 TURN 的协议码流编码关系

STUN 和 TURN 的关系:从协议码流编码的角度1. STUN 和 TURN 的基本概念:STUN (Session Traversal Utilities for NAT):是一种轻量级协议,用于在 NAT 或防火墙之后获取客户端的公网 IP 和端口信息。它帮助建立 P2P 连接,但不直接传输媒体流。TURN (Tr...

qq_35485206的博客 1934

简析STUN协议

本文转自http://blog.youkuaiyun.com/ast_224/archive/2008/10/29/3176377.aspx     STUN简介STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地

理性的幻想 1520

STUN和TURN技术浅析(二)

1.2      RFC5389/STUN STUN协议在RFC5389中被重新命名为Session Traversal Utilities for NAT,即NAT会话穿透效用。在这里,NAT会话穿透效用被定位为一个用于其他解决NAT穿透问题协议的协议。它可以用于终端设备检查由NAT分配给终端的IP地址和端口号。同时,它也被用来检查两个终端之间的连接性,好比是一种维持NAT绑定表项的保活协

day_day_up1991的博客 7559
上一篇: Linux配置内核
下一篇: B-树伪码
zzulp
博客等级 码龄19年 464粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值