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

WebRTC中的NAT穿透

NAT简介

我们知道,WebRTC会按照内网、P2P、中转的顺序来尝试连接。在大部分的情况下,实际是使用P2P或者中转的。这里P2P的场景主要使用的技术就是NAT穿透。

我们先简单了解下NAT。NAT在真实网络中是常见的,它的出现一是为了解决ipv4地址不够用的问题,二是为了网络安全考虑的。

  • 首先,让同一个内网中的多台主机共用一个公网ip,可以大大缓解ipv4向ipv6过度期间,ipv4地址不够用的问题。

  • 另外,NAT将主机隐藏在内网中,也就使得黑客想访问起来并没有那么容易了。

NAT的规范在RFC 3022中定义,其主要作用就是做网络地址转换。NAT设备(路由器)会在内网地址和外网地址之间建立起映射关系。当内网主机向外网主机发送信息时,NAT会将内网地址替换为映射的外网地址。相对应的,当外网主机向内网主机发生信息时,NAT会将外网地址替换为映射的内网地址。

因为NAT设备的存在,外网主机通常无法直接与内网主机通信。所以在建立P2P连接之前,需要做的就是NAT穿透,也就是俗称的“打洞”。

NAT类型

RFC3489和RFC5389是关于NAT穿透的协议,其中RFC3489中把NAT分成了4个类型。它们对NAT穿透的限制呈递进趋势。

完全锥型

  • 完全锥型NAT的规范是,只要内网主机A通过端口p1发出数据包,在NAT上生成了相应的映射表(这个表就是所谓的“洞”)。接收数据包的外网主机能从这个数据包的报文中得到这个映射关系。它可以将这个映射关系告诉其他外网主机,这样任意外网主机发送到这个NAT上端口p1的数据包就都会被转发到内网主机A上。
  • 完全锥型NAT的特点就是只要“打洞”成功,所有知道这个“洞”的主机都能通过它和内网主机进行通信。

IP限制锥型

  • IP限制锥型NAT的规范相比于完全锥型NAT,限制了外网来的IP。也就是说,只有从内网主机发送数据包的目的IP,发送到这个NAT上端口p1的数据包才会被转发到内网主机A上。
  • IP限制锥型NAT的特点就是“打洞成功”后,只有成功“打洞”的外网主机才能通过这个“洞”和内网主机进行通信。其他外网主机即使知道这个“洞”,发来的数据包也回被NAT丢弃。

端口限制锥型

  • 端口限制锥型NAT的规范相比于IP限制锥型NAT,除了限制外网来的IP,还要限制端口。也就是说只有从内网主机发送数据包的目的IP和端口,发送到这个NAT上端口p1的数据包才会被转发到内网主机A上。
  • 端口限制锥型NAT的特点就是,除了限制了“洞”的外网ip,还限制了“洞”的外网端口。

对称型

  • 对称型NAT的规范相比于端口限制锥型NAT,还增加了一条规则。从内网主机A上发到不同的外网主机的数据包经过NAT时,NAT都会为之分配不同的外网端口。
  • 对称型NAT的特点就是,内网主机每次发送数据包给不同的外网主机时,都会产生一个新的“洞”。

NAT类型检测

要进行NAT穿透,内网主机首先要知道自己连接的NAT的类型。在RFC3489中给出了标准的检测流程。这个过程需要2台拥有2个网卡的STUN服务器。具体流程如下图所示。

  • 主机向1号服务器的某个IP和端口发送一条请求,如果超过超时时间没有收到响应,则说明主机与服务器之间UDP不通
  • 如果收到服务端的响应,则对比本地IP和接收到的响应包中的主机的公网IP。如果这两个IP一致,则说明主机在公网上,没有NAT防护。如果不一致,则需要进一步的NAT类型检测,稍后详述。
  • 接下来,主机再次向1号服务器相同的IP和端口发送一条请求,1号服务器在收到请求后,会使用第二个网卡返回响应。如果主机收到了这个响应,则说明它在一个开放的网络上,是一台公网主机。如果主机没有收到这个响应,则说明它在对称型防火墙(可以认为与对称型NAT类似)后面。
  • 回到上面进一步的NAT类型检测流程。主机也是向1号服务器相同的IP和端口发送一条请求,1号服务器也会使用第二个网卡返回响应。如果主机收到了这个响应,则说明它在完全锥型NAT后面。
  • 如果主机没有收到这个响应,则向2号服务器发送一条请求。主机收到2号服务器的响应后,对比1号服务器返回的响应包中的主机的公网IP和2号服务器返回的响应包中的主机的公网IP,如果不一致,则说明它在一个对称型NAT的后面。如果一致,则需要进一步的检测。
  • 主机再次向1号服务器发送一条请求,1号服务器使用相同的IP(即接收请求的IP)和不同的端口返回响应。如果主机收到了这个响应,则说明它在IP限制型NAT后面,如果主机没有收到这个响应,则说明它在端口限制型NAT后面。

NAT穿透流程

在确认完主机所在网络中的NAT类型后,就可以判断是否能进行NAT穿透,以及确认NAT穿透的方法。

一般而言,完全锥型NAT以及IP限制型NAT可以与任何其他类型的NAT互通;两边都是端口限制型NAT的也可以互通;一边是端口限制型NAT,另一边是对称型NAT,或者两边都是对称型NAT的情况下想完成穿透很难,所以这种情况一般会通过TRUN协议进行数据中转。

在WebRTC中通信的双方通过ICE交换了上面获取到的一些网络信息,之后就可以尝试NAT穿透,建立P2P连接了。

假设需要建立P2P通信的双方为主机A和主机B。

  • 如果主机A在完全锥型NAT或者IP限制型NAT后,只要主机先往主机B发送一个数据,就会在该NAT上留下“洞”,即使发送的数据被对方的NAT丢弃。后续主机B发往主机A的数据也能通过主机A这边的NAT上的“洞”实现穿透了。总的来说,这种情况下,只要双方不停的发送数据包,且没有某一方的数据包被全部丢弃,就能成功穿透。
  • 如果主机A在端口限制型NAT后,而主机B也在端口限制型NAT后,只要双方互相发送数据包则和前面情况一样,可以利用NAT上的“洞”来穿透。
  • 主机A在端口限制型NAT后,主机B在对称型NAT后,或者两边都在对称型NAT后,就只能通过服务器中转来通信了。服务器中转的TURN协议在RFC5766中进行了详细的规范。

相关文章:

WebRTC中的NAT穿透

NAT简介 我们知道,WebRTC会按照内网、P2P、中转的顺序来尝试连接。在大部分的情况下,实际是使用P2P或者中转的。这里P2P的场景主要使用的技术就是NAT穿透。 我们先简单了解下NAT。NAT在真实网络中是常见的,它的出现一是为了解决ipv4地址不够…...

SpringCloud-高级篇(一)

目录: (1)初识Sentinel-雪崩问题的解决方案 (2)服务保护Sentinel和Hystrix对比 (3)Sentinel初始-安转控制台 (4)整合微服务和Sentinel 微服务高级篇 (1&…...

电脑自动重启是什么原因?详细解说

案例:电脑自动重启是什么原因? “一台用了一年的电脑,最近使用,每天都会一两次莫名其妙自动重启,看了电脑错误日志,看不懂什么意思,一直找不到答案。有没有高手知道怎么解决这个问题的。” 当…...

2023美国大学生数学建模竞赛E题思路

problem 背景: 光污染用于描述过度或不良使用人造光。我们称之为光污染的一些现象包括光侵入、过度照明和光杂波。在大城市,太阳落山后,这些现象最容易在天空中看到:然而,它们也可能发生在更偏远的地区。 光污染会改变我们对夜空…...

蓝桥杯三月刷题 第五天

文章目录💥前言😉解题报告💥数的分解🤔一、思路:😎二、代码:💥前言 上午没写,下午写了会被朋友拉出去耍,被冷风吹到了,而且被他坑了,根本没有玩骑…...

Echarts 水波图实现

开发的项目中需要实现这样一个水波图,例如下图在echarts官网中找了很久没找到,后面是在Echarts社区中找到的,实现了大部分的样式,但是还有一些数据的展示没有实现。水波图的数值展示是默认整数百分比,我的需求是需要保…...

逻辑优化基础-shannon decomposition

1. 简介 在逻辑综合中,香农分解(Shannon decomposition)是一种常用的布尔函数分解方法。它将一个布尔函数分解为两个子函数的和,其中每个子函数包含一个布尔变量的取反和非取反的部分。 具体来说,假设对于一个布尔函…...

Java中线程池的创建与使用

前言:默认线程池的弊端在线程池应用中,参考阿里巴巴java开发规范:线程池不允许使用Executors去创建,不允许使用系统默认的线程池,推荐通过ThreadPoolExecutor的方式,这样的处理方式让开发的工程师更加明确&…...

关于HashMap与OkHttp的使用

写了一个okhttp的post请求方法,添加参数很麻烦,需要封装: //post请求public static void sendOkHttpRequestPost(String address , Callback callback) {OkHttpClient client new OkHttpClient();// 创建表单参数RequestBodyRequestBody fo…...

华为OD机试 - 单词倒序(C 语言解题)【独家】

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:单词倒序…...

搭建Samba服务器

搭建Samba服务器 文章目录搭建Samba服务器samba安装安装命令配置-ubuntu侧为samba服务器创建一个共享目录share创建使用该共享文件夹的账号修改samba服务器配置文件重启samba服务windows创建映射1.点击映射网络驱动器2.输入Ubuntu中的ip地址及其用户信息3.输入用户信息及其密码…...

Matlab进阶绘图第5期—风玫瑰图(WindRose)

风玫瑰图(Wind rose diagram)是一种特殊的极坐标堆叠图/统计直方图,其能够直观地表示某个地区一段时期内风向、风速的发生频率。 风玫瑰图在建筑规划、环保、风力发电、消防、石油站设计、海洋气候分析等领域都有重要作用,所以在一些顶级期刊中也能够看…...

【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的

系列文章目录 【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧…...

XILINX AXI总线学习

AXI介绍什么是AXI?AXI(高级可扩展接口),是ARM AMBA的一部分;AMBA:高级微控制器总线架构;是1996年首次引入的一组微控制器总线;开放的片内互联的总线标准,能在多主机设计中实现多个控…...

2022CCPC女生赛(补题)(A,C,E,G,H,I)

迟了好久的补题&#xff0c;&#xff0c;现在真想把当时赛时的我拉出来捶一拳排序大致按照题目难度。C. 测量学思路&#xff1a;直接循环遍历判断即可&#xff0c;注意角度要和2π取个最小值。AC Code&#xff1a;#include <bits/stdc.h>typedef long long ll; const int…...

【Nginx】Nginx的安装配置

环境说明系统&#xff1a;Centos 7一、编译安装Nginx官网下载地址nginx: download#安装依赖 [rootnginx nginx-1.22.1]# yum install gcc pcre pcre-devel zlib zlib-devel -y #从官网下载Nginx安装包&#xff0c;并进行解压、编译、安装 [rootnginx ~]# wget https://nginx.or…...

数学小课堂:统计时有效地筛选数据

文章目录引言I 被爆冷门的原因II 统计时有效地筛选数据2.1 统计数据的常见问题2.2 大数据的特征2.3 有效筛选数据的原则引言 在博弈论中很多结果有发生的概率&#xff0c;而概率这件事只是估计出来的&#xff0c;并不准确。因此&#xff0c;一旦加入博弈的选手多了之后&#x…...

MySQL安装优化

hello&#xff0c;大家好&#xff0c;我是小鱼 本文主要通过针对 MySQL Server&#xff08;mysqld&#xff09;相关实现机制的分析&#xff0c;得到一些相应的优化建议。主要 涉及 MySQL 的安装以及相关参数设置的优化&#xff0c;但不包括 mysqld 之外的比如存储引擎相关的参…...

RocketMQ系列开篇

RocketMQ系列开篇 今天开始学习RocketMQ相关系列源码。我会带着自己的目的去学习源码。所以不会像一般的技术博客一样&#xff0c;写一个完整的流程&#xff0c;介绍每一步干了啥。而是提出一个问题&#xff0c;然后去看代码里面是怎么实现的。说明一下&#xff0c;本次系列我…...

logback无法删除太久远的日志文件?logback删除日志文件源码分析

logback无法删除太久远的日志文件&#xff1f;logback删除日志文件源码分析 最近发现logback配置滚动日志&#xff0c;但是本地日志文件甚至还有2年前的日志文件&#xff0c;服务器是却是正常的&#xff01; 网上搜索了一波没有发现&#xff0c;只找到说不能删除太久远的旧日志…...

导电塑料厂家直销:美国RTP材料全系列专业供应指南

导电塑料选购的关键在于源头直采的供应链整合与专业技术服务能力。宏裕塑胶依托与美国RTP公司的直接合作&#xff0c;提供全系列工程塑料原料&#xff0c;涵盖导电、抗静电、导热及长玻纤增强等特种材料&#xff0c;通过去中间化采购降低客户15%-18%成本&#xff0c;并配备全流…...

科研节奏管理法:4篇论文驱动的工程化落地实践

1. 项目概述&#xff1a;这不是一份文献综述&#xff0c;而是一份“科研呼吸节奏”训练手册“Month in 4 Papers (December 2024)”——这个标题乍看像一份学术月报&#xff0c;但如果你真把它当成四篇论文的摘要合集&#xff0c;就完全错过了它最核心的价值。我做了十年科研内…...

ARM嵌入式C#开发实战:基于SkiaSharp的低延迟GUI实现

1. 这不是玩具&#xff0c;是ARM嵌入式系统能力的“压力测试仪”很多人第一次听说“在ARM开发板上跑C#游戏”&#xff0c;第一反应是&#xff1a;这能行&#xff1f;C#不是Windows桌面和服务器的语言吗&#xff1f;Mono&#xff1f;.NET Core&#xff1f;ARM板子连图形驱动都配…...

2026最新大模型入门电子书学习推荐,必读9本大模型书籍

大模型入门必读的9本书籍汇总NO.1&#xff1a; 《基于GPT-3&#xff0c;ChatGPT&#xff0c;GPT-4等Transformer架构的自然语言处理》主要内容: 了解用于解决复杂语言问题的新技术。将GPT-3与T5、GPT-2和基于BERT的Transformer的结果进行对比。使用TensorFlow、PyTorch和GPT-3执…...

OpenClaw底层揭秘:打造私有化AI Agent团队的核心原理与实战解析!

本文深入剖析了OpenClaw作为自托管多通道AI Agent网关的底层架构与核心原理。从简洁的Gateway进程设计、JSON over WebSocket的统一通信协议&#xff0c;到Agent循环处理消息的完整流程、多Agent路由的绑定机制&#xff0c;以及精细化的会话管理与独特的Markdown记忆系统&#…...

增程式电动汽车预测型能量管理策略【附算法】

✨ 长期致力于增程式电动汽车、能量管理策略、车速预测、广义回归神经网络、动态规划研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;基于AIC准则的自…...

Blender 3MF插件:开源3D打印数据交换的终极解决方案

Blender 3MF插件&#xff1a;开源3D打印数据交换的终极解决方案 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 在3D打印行业快速发展的今天&#xff0c;数据交换的完整性…...

智慧农业棉花棉铃病害成熟度检测数据集VOC+YOLO格式969张6类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数)&#xff1a;969标注数量(xml文件个数)&#xff1a;969标注数量(txt文件个数)&#xff1a;969标注类别数&…...

Poppler Windows版:终极PDF处理方案,3分钟零配置部署指南

Poppler Windows版&#xff1a;终极PDF处理方案&#xff0c;3分钟零配置部署指南 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为Windows上复…...

深度解析ESLyric-LyricsSource:Foobar2000逐字歌词插件的终极技术方案

深度解析ESLyric-LyricsSource&#xff1a;Foobar2000逐字歌词插件的终极技术方案 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource ESLyric-LyricsSource是…...