网络传输基本知识
- 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
具体自行百度学习