1、概述
作為WebRTC服務器,coturn通信協議主要是STUN和TURN協議
STUN&TURN協議頭部都是20個字節,用 Message Type來區分不同的協議
|------2------|------2------|------------4------------|------------------------12-------------------------|-----------------------------x-------------------------|
|--消息類型--|--消息長度---| ------魔法cookie--------|-----------------------事務ID----------------------|---------------------屬性------------------------|
備注: 內容部分的屬性,每個屬性都由(類型(2)、長度(2)、值(x))三個部分組成,其中類型占用2個字節,長度2個字節,值(x),根據長度定義
2 STUN協議
探測客戶端NAT映射地址, 主要是獲取客戶端的公網地址
2.1 Binding Request
獲取客戶端的公網IP和Port
Message Type: 0x0001
eg: 抓包數據
說明這個binding request的長度就是20個字節,Message Length為0,說明內容部分為可變長度為0,也即屬性沒有
2.2 Binding Response
Message Type: 0x0101
返回客戶端的公網IP和端口
eg:
\
XOR-MAPPED-ADDRESS?:
表示客戶端經過NAT轉換后的公網IP地址和端口(通過異或運算加密處理),用于后續P2P通信的地址交換。此屬性用于取代舊版協議中的MAPPED-ADDRESS以提高兼容性?
?MAPPED-ADDRESS?
表示客戶端在NAT后的公網IP地址和端口(明文形式)。在舊版STUN(RFC3489)中使用,新版協議(RFC5389)已逐漸用XOR-MAPPED-ADDRESS替代
RESPONSE-ORIGIN?
表示STUN服務器發送響應時使用的源IP地址和端口。客戶端可通過此字段驗證響應是否來自合法的服務器,防止偽造響應?
?OTHER-ADDRESS?
表示服務器提供的備用地址或端口,通常用于冗余或負載均衡場景。例如,當主服務器地址不可達時,客戶端可嘗試使用此備用地址
3 TURN協議
3.1 Allocate
分配中繼地址與端口
3.1.1 Allocate Request
Message Type: 0x0003
Message Length: 8 表示內容屬性部分為8個字節長度, 其中屬性值為UDP(0x11),類型(2),長度(2)
3.1.2 Allocate Response
Message Type: 0x0113
Message Length: 52,報告401錯誤,未授權,需要第二次Allocate Reqest帶上用戶名跟密碼,第一次其實是客戶端請求返回nonce和realm,第二次的Alocate請求才是真正驗證數據
3.1.3 第二次 Allocate Request請求
Message Type: 0x0003
3.1.4 第二次Allocate 的響應(對應4.2.1.3的請求)
Message Type: 0x0103
XOR-RELAYED-ADDRESS
中繼服務器的地址和端口
XOR-MAPPED-ADDRESS
客戶端的地址和端口
LEFETIME
中繼地址的有效期,客戶端必須在這個時間過期之前發送REFRESH請求續期
MESSAGE-INTEGRITY
消息簽名-防篡改,基于HMAC-SHA1算法
3.2.?Channel Binding
優化數據包傳輸效率
3.2.1 Channel Binding Request
Message Type: 0x0009
3.2.2 Channel Binding Response
Message Type: 0x0109
3.3 Create Permission
授權對等端通信權限
3.3.1 Create Permission Request
Message Type: 0x0008
3.3.2 Create Permission Response
Message Type: 0x0108
3.4 Send Indicate
利用中繼,測試兩端數據是否通,發送連通性報文
3.4.1 Send Indicate Request
Message Type: 0x0016
3.4.2 Send Indicate Response
Message Type: 0x0017