就是乙個socket 同時進行listen和 connect 是否可行。答案是可以的。而且此socket還需要bind同乙個本機ip port,同時,需要進行設定:
setsockopt(listenfd, sol_socket, so_reuseaddr, (void *) &value, sizeof (value));
測試udp穿透有兩個原因 乙個是簡單 乙個是技術應該已經比較成熟了。但是不幸的是 我還是失敗了,兩個內網客戶端互相傳送公網請求,無法收到對方的資料。
於是我開始研究為什麼會失敗,首先懷疑是硬體不支援。
網上下了檢測工具,檢測 是對稱型nat,而且還提示udp block。所以就失敗了,原因是我這種方式無法穿透對稱型nat。手動檢測,客戶端不斷連線公網伺服器,結果埠是遞增+2的,證實了是對稱型。
我查資料,網上說對稱型nat很少,大部分都是錐型的nat,但是萬萬沒想到,我這裡就是個特殊的,比較麻煩。
於是我尋找別的方法。
1、接受客戶端的請求,並且把客戶端的公網ip、port封裝到ice candidate中。
2、通過乙個複雜的機制,得到客戶端的nat型別。
這就是stun做的事情,和我手動寫的程式是一樣的。同樣,stun只支援udp,但是最新的資料顯示好像也是支援tcp了,但是同理的,stun是無法穿透對稱型nat的(或者說可能性較低、比較麻煩)()
turn server也主做了兩件事:
1為nat打洞:
如果a和b要互相通訊,那麼turn server,會命令a和b互相發一條資訊,這樣各自的nat就留下了對方的洞,下次他們就可以之間進行通訊了。
2為對稱nat提供訊息**:
當a或者b其中一方是對稱nat時,那麼給這一方發資訊,就只能通過turn server來**了。
最後補充一下,為什麼對稱nat無法打洞:
假如a、b進行通訊,而b處於對稱nat之下,那麼a與b通訊,stun拿到a,b的公網位址和埠號都為10000,然後去協調turn打洞,那麼turn去命令a發資訊給b,則a就在nat打了個b的洞,但是這個b的洞是埠號為10000的洞,但是下次b如果給a發資訊,因為b是對稱nat,它給每個新的ip傳送資訊時,都重新對應乙個公網埠,所以給a傳送請求可能是公網10001埠,但是a只有b的10000埠被打洞過,所以b的請求就被丟棄了。
顯然server是無法協調客戶端打洞的,因為協調客戶端打得洞僅僅是上次對端為server傳送埠的洞,並不適用於另乙個請求。
最後的最後再補充一點,就是nat打的洞也是具有時效性的,如果nat超時了,那麼還是需要重新打洞的。
資料顯示 還有一種方式,叫做ice
ice還在研究中。初步的了解來看,就是整合了上面兩種方式,自動判斷用哪一種(stun或者turn),不需要判斷nat型別,並將中轉方式的優先順序置為最低。
無論是那種穿透方式,都是需要乙個公網伺服器的。即讓客戶端可以直接連線的伺服器,只不過通過tcp/udp直連穿透的(stun)方式,對伺服器壓力小,只需要**對映的公網ip port即可,但是不能穿透對稱型nat,通過中繼中轉方式(turn)方式的,需要進行**操作,對伺服器壓力大,但是可以穿透對稱型nat。總之,到目前為止,穿透對稱型nat是乙個難點,我覺得qq這類的可能也是**,畢竟大部分的路由器都是錐型,只有公司之類的安全嚴格型對稱型比較少吧。
這種方法從安全的角度來說是利用了目前路由器實現對稱nat的方法中存在埠可以**的漏洞,利用這個漏洞來實現打洞。加上一次傳送大量的包,來增加命中的概率。
但是也有不成功的可能性。
資料截圖:
相關:1、voip:是一種語音通話技術,經由網際協議(ip)來達成語音通話與多**會議,也就是經由網際網路來進行通訊。voip可用於包括voip**、智慧型手機、個人計算機在內的諸多網際網路接入裝置,通過蜂窩網路、wi-fi進行通話及傳送簡訊。
2、sip:是乙個應用層的信令控制協議。用於和乙個或多個參與者建立、修改和終止會話。sip的結構與http(客戶-伺服器協議)相似。客戶機發出請求,並傳送給伺服器,伺服器處理這些請求後給客戶機傳送乙個響應,該請求與響應形成一次事務。sip 是一種源於網際網路的ip 語音會話控制協議,具有靈活、易於實現、便於擴充套件等特點。 [1] 會。
frp 內網穿透相關配置
dashboard port 埠 dashboard user 賬號 dashboard pwd 密碼 privilege token sgdf dsfd.df authentication timeout 60 privilege allow ports 10000 20000 max pool ...
利用nat123進行內網穿透
sudo apt get updatesudo apt get install mono complete如提示沒有 mono complete,使用 mono devel 或 monodevelop 或 monodevelop。mono v如果上面命令可以顯示內容的話,剛一步命令就算安裝成功了。m...
NPS內網穿透穿透
最近使用公司的虛擬專用網導致我想自己試試怎麼搞出來的,有兩個行動硬碟想嘗試買個樹莓派來做個遠端可以訪問本地的網盤,就拿電腦測試一下。我看大概有以下種工具 frp nps 蒲公英和花生殼。後兩者都是有部分限制的,但不需要自己有伺服器。前兩個適合有伺服器的,我就嘗試了一下nps,我這裡主要試了 的 具體...