版權聲明:轉載請附上原文出處連接及本聲明。 原文連接:https://www.cnblogs.com/mangshe0/p/12108400.htmlhtml
若是你也遇到了相似 這種問題:前端
後面都是自個緣由分析的小記,沒啥用不用看。chrome
-------------------------------------------------- 原由:api
最近用jssip開發個小demo,用來本身測試使用。服務器
遇到了 web-發起invite時候 sdp中
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:89174025 1 udp 2113937151 50c6594a-c1f8-43dd-9370-01b8976daa4c.local 49997 typ host generation 0 network-cost 999
語音通信地址 IPV4是0, ice-candidate中使用 ipv6.
我就無語了 前端時間用還好使。
chrome.exe -disable-ipv6 也不行.
暫時先在onSDP事件時候 sdp.replace 手動修改ip地址 解決該問題.網絡
-------------------------------------------------- 緣由分析session
終於解決了 以前遺留的問題,困擾我很久,用了好幾天的時間,有時間有點思路就分析 找找.
首先以前的分析是正確的,就是手欠升級chrome致使的,
IP4地址是0.0.0.0, 說明媒體通信時不使用這裏,而是使用candidate中描述的地址,
這裏candidate描述的地址爲 50c6594a-c1f8-43dd-9370-01b8976daa4c.local,
我當初一直誤覺得是IPV6的地址,這個誤區裏掙扎了很久.
嘗試將fs配置成IPV6與之進行通信,發現仍然不行,這根本就不是個IP地址。
翻了翻歷史版本的數據抓包, sdp描述的相關信息都差很少,惟獨之前寫IP地址的地方被換成了xxx.local 這個鬼玩應。
本地環境測試 我還能夠重寫sdp來繞過去,可是生產環境 nat穿個幾層,那怎麼搞? 因此必須得把這個問題解決了。
回退chrome雖然能夠暫時解決,可是這個技術盲點,未來早晚要遇到的,啥也不說了繼續研究吧。
搜索引擎檢索的信息都幾乎不沾邊,沒有捷徑 前人的幫助,只能一點點翻ietf官方標準了。
https://tools.ietf.org/html/draft-wang-mmusic-encrypted-ice-candidates-00#ref-MdnsCandidate
果不其然,在IETF的草案當中 draft-wang-mmusic-encrypted-ice-candidates,終於找到了encoded_encrypted_address.local
這種結構地址的描述。
太着急了沒有仔細看,誤覺得是IP地址被加密緻使,
https://www.w3.org/TR/webrtc/#rtcicecandidate-interface 根據RTCPeerConnection candidate接口
又返回到jssip中去查設置ip地址加密的相關屬性,結果確定是沒有。。。
https://jssip.net/documentation/3.3.x/api/session/#event_icecandidate
再回到ietf草案當中 定睛一看, 加密後的IP地址都是.encrypted這種格式的,
.local是屬於mDNS, mDNS 這事個什麼鬼,跟dns有啥關係啊?
https://tools.ietf.org/html/rfc6762 Multicast DNS
mDNS用於處理本地網絡中機器名稱,而不須要DNS服務器,
大體意思就是 本地網絡中的機器會隨機產生惟一名字相似 50c6594a-c1f8-43dd-9370-01b8976daa4c.local,
網絡中其餘的機器想要與之通信 會進行mDNS廣播查詢, 這個名稱的機器收到後會回覆其IP地址.
新版本的webrtc,我目前是 79.0.3945.88(正式版本), NND就是用了這個功能,替代了原有IP地址。
由於google webrtc 的ip地址以前是直接暴漏的,一直被你們吐槽, 如今用了這個mDNS功能,將IP給隱藏起來了。。
想必不少不支持這個mDNS功能的webrtcServer都被這個功能給搞的不能通信。
而且目前W3C webrtc接口中沒有這方面的設置,
https://www.w3.org/TR/webrtc/#rtcicecandidate-interface
https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addIceCandidate
雖然google強制開啓使用mDNS功能, 還好有個開關,
chrome://flags/#enable-webrtc-hide-local-ips-with-mdns
折騰了我好幾天, 就是這麼一個配置。 我一個作服務器的就爲了搞個測試demo, 太不容易了。。。tcp