WebRtc09:网络基础P2P/STUN/TURN/ICE
网络传输基本知识
- NAT
- STUN(Session Traversal Utilities for NAT)
- TURN
- ICE
NAT
产生的原因
- IPV4地址不够
- 出于网络安全的原因
NAT种类
- 完全锥型NAT(Full Cone NAT)
- 地址限制型NAT(Address Restricted Cone NAT)
- 端口限制型NAT(Port Restricted Cone NAT)
- 对称型NAT(Symmetric NAT)
NAT打洞原理
完全锥型NAT
地址限制型NAT
端口限制型NAT
对称型NAT
主机X通过NAT发送数据给不同主机的时候,使用不同的IP和端口,比如发送给P,q时,使用A,b;而对于M,n主机,则使用C,d
NAT穿越原理
NAT穿越组合
NAT类型检测
对应步骤如下面这些图描述
第一步T1
第二步T2
第三步T3
STUN协议
STUN介绍
- STUN存在的目的就是进行NAT穿越
- STUN是典型的客户端/服务端模式。客户端发送请求,服务端进行相应
RFC STUN 规范
- RFC3489/STUN (用这套规范失败率非常高)
Simple Traversal of UDP Through NAT - RFC5389/STUN
Session Traversal Utilities for NAT
具体协议
- 包括20字节的STUN header
- Body中可以有0个或者多个Attribute
STUN header
- 其中2个字节(16bit)类型
- 2个字节(16bit)消息长度,不包含消息头
- 16字节(128bit)事务ID,请求与相应事务ID相同
5389格式
STUN Message Type
C表示分类,M表示方法
Transaction ID
STUN Message Body
TLV
RFC3489定义的属性
Attribute的使用
M必须,Option可选
TURN协议
TURN介绍
- 其目的是解决对称NAT无法穿越的问题
- 其建立在STUN之上,消息格式使用STUN格式消息
- TURN Client要求服务端分配一个公共IP和Port用于接收或发送数据
TURN例子
TURN 使用的传输协议
TURN Allocate
TURN 发送机制
- Send和Data
- Channel
TURN Send And Data
TURN Channel
由于send和data经常要带头消息,使用channel不需要头消息
TURN的使用
ICE框架
ICE candidate
candidate类型
ICE具体做什么
candidate关系图
收集candidate
什么是SDP
SDP例子
形成Candidate Pair
连通性检查
连通性过程
网络协议分析
常用工具
- linux服务端用tcpdump
- 其他端WireShark
tcpdump
Wireshark
具体自行百度学习