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

WebRTC基础知识

文章目录

  • 基础概念
    • NAT (Network Address Translation) 打洞
    • STUN(Session Traversal Utilities for NAT)
      • 基于STUN协议的DDoS反射攻击 # TODO
    • TURN(Traversal Using Relays around NAT)
    • ICE(Interactive Connectivity Establishment)
    • SDP(Session Description Protocol)
    • 一个典型的WebRTC通信流程

基础概念

零基础快速入门WebRTC:基本概念、关键技术、与WebSocket的区别
真实世界中的WebRTC:STUN, TURN and signaling

  • 标准的、低延迟的方式来传递媒体数据(视频&音频)。
  • 客户端是以P2P的方式,使用UDP协议发送数据。
  • ICE:客户端需要交换ICE和SDP 信令,才能建立链接。
  • WebRTC协议不关心使用什么方式来交换信令,WebSockets、Socket.io、HTTP甚至人工交换都可以,实际上长字符串传递给其他人罢了。

NAT (Network Address Translation) 打洞

  • 一对一 NAT:外部的IP和port可以映射到内部的IP和port。

  • IP 受限型 NAT:

  • 端口受限型 NAT:

  • 对称 NAT:Symmetric NAT 该方式是限制最多的一种,必须使用TURN服务。

  • NAT相关资料:

    • P2P技术详解(一):NAT详解——详细原理、P2P简介
    • 通俗易懂:快速理解P2P技术中的NAT穿透原理

STUN(Session Traversal Utilities for NAT)

  • NAT给设备提供了一个IP地址以使用局域网,但是该地址不能在外部使用。由于没有公用地址,WebRTC端对端就无法进行通信,STUN用来解决这个问题。
  • STUN服务器位于公共网络上。
  • 只有一个简单的任务:检查客户端传入请求的IP地址(来自运行在NAT后面的应用程序),并将该地址作为响应发送回去。客户端为自己获得一个公网地址,然后通过信令机制将其传递给另一端以建立P2P直接连接。

在这里插入图片描述

  • 简单理解:STUN服务器是用来获取外部地址的。
    在这里插入图片描述

基于STUN协议的DDoS反射攻击 # TODO

新型DDoS来袭 | 基于STUN协议的DDoS反射攻击分析

  • STUN支持使用UDP协议来发送,STUN请求/响应事务的可靠性是通过客户端应用程序本身重新传输请求消息来实现的。黑客利用UDP无状态的这种机制,伪造攻击目标请求STUN服务器,把开启该服务的主机作为反射源,进行DDoS反射攻击,实现伪装和攻击。

  • STUN响应时会进行重试,黑客利用该机制可放大几倍的攻击量。

  • 防护建议:对于STUN互联网应用提供者,可限制可访问的源IP的地址范围减少利用情况,或者 只准使用tcp发送STUN协议,对于企业用户,推荐接入DDoS防护产品对抗大流量DDoS攻击。

TURN(Traversal Using Relays around NAT)

  • 两个客户端无法直接通信,只能依赖TURN服务。TURN服务往往作为后备。
  • 所有的通信内容都要经过 TURN 服务器的转发,所以 TURN 服务器的维护成本比较高。
  • TURN用于中继对等端之间的音频/视频/数据流,而不是信令数据。
  • TURN服务器都支持 STUN,所以TURN服务器一般内置STUN服务器。

在这里插入图片描述

  • 简单理解:TURN服务器是用来在客户端P2P直连失败的情况下进行中继转发数据流的。
    在这里插入图片描述

ICE(Interactive Connectivity Establishment)

  • ICE是用来对付NAT和防火墙,使用ICE来消除实际网络的复杂性,ICE会试图找到连接对方的最佳途径。
  • ICE会会收集所有可用的通信路径,本地 IP 地址、STUN 和 TURN 服务器提供的地址等等。把收集到的所有地址都将放入 SDP 中,再送到对端,对端通过解析 SDP 来了解我方提供的重要信息。

SDP(Session Description Protocol)

  • SDP信令 是一种用于表述 ICE Candidates 的格式,它描述了网络选项、媒体选项、安全选项和其他很多信息,甚至可以自定义 SDP 内容。

一个典型的WebRTC通信流程

  1. A 想要和B建立连接;
  2. A 创建了一个 offer,它寻找所有的 ICE candidate、安全选项、音视频选项等并创建 SDP(简单来说这个 offer 就是 SDP);
  3. A 将 SDP 信令传递给 B(Signaling);
  4. B 根据 A 的 offer 进行设置,并创建应答(answer);
  5. B 将 Answer 信令传递给 A(Signaling);
  6. 连接建立。

相关文章:

WebRTC基础知识

文章目录 基础概念NAT (Network Address Translation) 打洞STUN(Session Traversal Utilities for NAT)基于STUN协议的DDoS反射攻击 # TODO TURN(Traversal Using Relays around NAT)ICE(Interactive Connectivity Est…...

积累常见的有针对性的python面试题---python面试题001

1.考点列表的.remove方法的参数是传入的对应的元素的值,而不是下标 然后再看remove这里,注意这个是,删除写的那个值,比如这里写3,就是删除3, 而不是下标. remove不是下标删除,而是内容删除. 2.元组操作,元组不支持修改,某个下标的内容 可以问他如何修改元组的某个元素 3.…...

在springboot使用websocket时mapper无法注入

直接上代码 package cn.ujoined.combined.utils;import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Componen…...

前端加密与解密的几种方式

1.base64加密方式 1. base64是什么? Base64,顾名思义,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号""、"/"一共64个字符的字符集,(另加一个“”,实际是65个字符,至于…...

详解Spring Bean的生命周期

详解Spring Bean的生命周期 Spring Bean的生命周期包括以下阶段: 1. 实例化Bean 对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进…...

详解Shell 脚本中 “$” 符号的多种用法

通常情况下,在工作中用的最多的有如下几项: $0:Shell 的命令本身 1到9:表示 Shell 的第几个参数 $? :显示最后命令的执行情况 $#:传递到脚本的参数个数 $$:脚本运行的当前进程 ID 号 $*&#…...

Redis如何实现Session存储

在Redis中实现Session存储,主要有两种方式:使用Spring Session和手动存储。 使用Spring Session:Spring Session是Spring框架提供的一个模块,用于简化Session管理,并将Session数据存储到外部数据存储中,如Redis。使用Spring Session,你只需要在Spring Boot项目中添加相应…...

安防视频监控汇聚EasyCVR平台接入Ehome告警,公网快照不显示的原因排查

智能视频监控汇聚平台TSINGSEE青犀视频EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,视频监控管理平台…...

【Springboot】@ComponentScan 详解

文章目录 ComponentScanComponentScan ANNOTATION 和 REGEXComponentScan CUSTOMComponentScan ASSIGNABLE_TYPE ComponentScan ComponentScan 是 Spring 框架中的一个注解,用于自动扫描和注册容器中的组件。 使用 ComponentScan 注解可以告诉 Spring 在指定的包或…...

flask-----信号

安装: flask中的信号使用的是一个第三方插件,叫做blinker。通过pip list看一下,如果没有安装,通过以下命令即可安装blinker: pip install blinker flask其中有内置的信号 template_rendered _signals.signal(temp…...

10_Vue3 其它的组合式API(Composition API)

Vue3 中的其它组合式API 1.shallowReactive 与 shallowRef 2. readonly 与 shallowReadonly 3.toRaw 与 markRaw 4.customRef 5.provide 与 inject 6.响应式数据的判断...

COCOS项目运行的时候图片模糊的原因

1、首先。用X坐标来分析,如果size*Anchor Position有小数,如上图57*0.5667695.5。这样就会导致x模糊。如果y同样计算结果包含小数,那么y也会模糊。xy同时模糊的情况是最模糊的。 2、如果当前node没有问题,那么就要检查上级node是…...

Python中搭建IP代理池的妙招

在Python的爬虫世界里,你是否也想搭建一个功能强大的IP代理池,让你的爬虫无忧无虑地畅游各大网站?今天,我就来教你使用Scrapy框架搭建IP代理池,让你的爬虫更加智能、高效!跟着我一步一步来,轻松…...

学习pytorch 2

学习pytorch 2 2. dataset实战代码数据集 2. dataset实战 B站小土堆视频 代码 from torch.utils.data import Dataset from PIL import Image #import cv2 import osclass MyData(Dataset):def __init__(self, root_dir, label_dir):self.root_dir root_dirself.label_dir …...

elementui动态表单实现计算属性携带参数,并将计算出的值四舍五入保留两位小数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言方法1方法2结论 前言 写项目的时候,遇到需要在动态表单中,将同一级输入框输入的内容计算出来,并动态显示,发现c…...

嵌入式面试5 -makefile shell

2、 如果有一个简单的helloworld项目目录如下: tree helloworld helloworld |– file2.h |– file1.cpp |– file2.cpp 请编写一个Makefile文件。 答: TARGET helloworld CXX g COMPILE : $(COMPILE) file1.cpp COMPILE : $(COMPILE) file2.cpp OBJE…...

获40余家主机厂青睐,这家OTA「吸金王」完成超亿元B2轮融资!

继今年4月获得上汽集团旗下尚颀资本及其合作方山高投控的投资后,近日上海艾拉比智能科技有限公司(以下简称“艾拉比”)正式完成总额过亿元的B2轮融资,新的投资方为聚卓资本、老股东国科新能继续增持,势能资本持续担任独…...

CGI, FastCGI, WSGI, uWSGI, uwsgi分别是什么?

CGI 1、通用网关接口(Common Gateway Interface/CGI),CGI描述了服务器(nginx,apache)和请求处理程序(django,flask,springboot web框架)之间传输数据的一种标准. 2.所有bs架构软件都是遵循CGI协议的 3.一…...

Android T 窗口层级相关的类(更新中)

窗口在App端是以PhoneWindow的形式存在,承载了一个Activity的View层级结构。这里我们探讨一下WMS端窗口的形式。 可以通过adb shell dumpsys activity containers 来看窗口显示的层级 窗口容器类 —— WindowContainer类 /*** Defines common functionality for c…...

【云原生】深入掌握k8s中Pod和生命周期

个人主页:征服bug-CSDN博客 kubernetes专栏:kubernetes_征服bug的博客-CSDN博客 目录 1 什么是 Pod 2 Pod 基本操作 3 Pod 运行多个容器 4 Pod 的 Labels(标签) 5 Pod 的生命周期 1 什么是 Pod 摘取官网: Pod | Kubernetes 1.1 简介 Pod 是可以在 …...

Tomcat 超精简总结

1. 定位轻量级 Java Web 服务器 / Servlet 容器只跑 Java 项目(jsp、servlet、springboot 内嵌)处理 动态请求,不擅长静态资源2. 核心作用解析 Servlet、JSP监听端口,接收浏览器请求调用 Java 代码执行业务返回页面 / 数据给客户端…...

Perplexity+本地新闻知识库构建全流程,含Geo-Tagged新闻切片、时效性分级索引、突发新闻优先推送机制

更多请点击: https://kaifayun.com 第一章:Perplexity本地新闻查询 Perplexity 是一款以实时信息检索与引用溯源见长的 AI 助手,其默认依赖联网搜索获取新闻内容。但在离线或隐私敏感场景下,用户可通过本地化部署方案构建轻量级…...

保姆级教程:Windows下VectorCAST License服务配置与常见启动失败排查

Windows平台VectorCAST License服务配置全指南与深度排错手册 引言 在嵌入式软件测试领域,VectorCAST作为行业领先的自动化测试工具链,其License服务的正确配置是保证团队高效协作的基础。然而,许多工程师在初次部署时,常因Window…...

YOLO-ONNX-Java 性能监控指标全面解析

YOLO-ONNX-Java 性能监控指标全面解析 概述 在计算机视觉应用中,性能监控是确保系统稳定运行的关键环节。YOLO-ONNX-Java 作为一个纯 Java 实现的 AI 视觉识别项目,提供了丰富的性能监控指标来帮助开发者优化系统性能。本文将深入解析该项目的性能监控指…...

3个核心功能+5个实战技巧:用B站神奇弹幕彻底解放你的直播双手

3个核心功能5个实战技巧:用B站神奇弹幕彻底解放你的直播双手 【免费下载链接】MagicalDanmaku 本仓库及所有相关项目已永久停止开发、维护和任何形式的分发。 项目地址: https://gitcode.com/gh_mirrors/bi/MagicalDanmaku 你是否还在直播时手忙脚乱地回复弹…...

给程序员和数据分析师的气象学入门:搞懂城市边界层,让你的天气API数据不再‘失真’

给程序员和数据分析师的气象学入门:搞懂城市边界层,让你的天气API数据不再‘失真’ 当你在调用天气API时,是否遇到过这样的困惑:明明获取的是同一个城市的温度数据,为什么市中心的气温总比郊区高出几度?为什…...

DouZero AI斗地主助手:基于深度学习的终极实战指南

DouZero AI斗地主助手:基于深度学习的终极实战指南 【免费下载链接】DouZero_For_HappyDouDiZhu 基于DouZero定制AI实战欢乐斗地主 项目地址: https://gitcode.com/gh_mirrors/do/DouZero_For_HappyDouDiZhu 还在为欢乐斗地主的复杂决策而烦恼吗?…...

LabVIEW多核并行编程实战:从数据流原理到生产者-消费者架构优化

1. 项目概述:从单核到多核的性能跃迁如果你用LabVIEW做过一些稍微复杂的应用,比如高速数据采集、实时图像处理或者复杂的控制算法仿真,大概率会遇到一个瓶颈:程序跑起来感觉“卡”,CPU占用率明明不高,但循环…...

C#上位机如何连接西门子S7-1500的Modbus服务器?从PLC配置到.NET代码实战

C#上位机连接西门子S7-1500 Modbus服务器全流程解析 在工业自动化领域,上位机与PLC的通信是实现数据采集和设备控制的关键环节。西门子S7-1500系列PLC作为当前主流控制器,其Modbus TCP服务器功能为C#开发者提供了标准化的通信接口。本文将深入探讨如何从…...

Linux串口编程进阶:深入termios2结构体,搞定CH340/FTDI各种转接器的非标准波特率

Linux串口编程实战:破解CH340/FTDI非标准波特率适配难题 当你在工业物联网项目中尝试将某个9600bps的设备升级到115200bps时,可能会发现某些USB转串口适配器死活不配合——明明代码正确,波特率却始终无法生效。这不是你的错,而是…...