關於TCP打洞和UDP打洞

2022-09-14 16:03:19 字數 629 閱讀 4618

解決辦法是:a向b的公網ip傳送乙個資料報,則nat-a能接收來自nat-b的資料報並**給a了(即b現在能訪問a了);再由s命令b向a的公網ip傳送乙個資料報,則nat-b能接收來自nat-a的資料報並**給b了(即a現在能訪問b了)。以上就是「打洞」的原理。但是tcp和udp在打洞上卻有點不同。這是因為伯克利socket(標準socket規範)的api造成的。udp的socket允許多個socket繫結到同乙個本地埠,而tcp的socket則不允許。

這 是這樣乙個意思:a b要連線到s,肯定首先a b雙方都會在本地建立乙個socket,去連線s上的socket。建立乙個socket必然會繫結乙個本地埠(就算應用程式裡面沒寫埠,實際上也是 繫結了的,至少j**a確實如此),假設為8888,這樣a和b才分別建立了到s的通訊通道。接下來就需要打洞了,打洞則需要a和b分別傳送資料報到對方 的公網ip。但是問題就在這裡:因為nat裝置是根據埠號來確定session,如果是udp的socket,a b可以分別再建立socket,然後將socket繫結到8888,這樣打洞就成功了。但是如果tcpsocket,則不能再建立socket並繫結到 8888了,這樣打洞就無法成功。

出處:

email: [email protected]

qq交流:903639067

TCP打洞和UDP打洞

1,tcp協議通訊 現在有兩台電腦a和b。在 假設a的位址為 192.168.0.100 假設b的位址為 192.168.0.102 a想給b傳送乙個字串hello,如果a,b之間採用tcp協議,那麼b收到hello的過程是怎樣的呢?首先建立連線 3次握手成功之後,a和b的鏈結才算成功 然後a在給b...

簡單說一下 TCP打洞和UDP打洞

1,tcp協議通訊 現在有兩台電腦a和b。在 假設a的位址為 192.168.0.100 假設b的位址為 192.168.0.102 a想給b傳送乙個字串hello,如果a,b之間採用tcp協議,那麼b收到hello的過程是怎樣的呢?首先建立連線 3次握手成功之後,a和b的鏈結才算成功 然後a在給b...

linux udp打洞 UDP打洞和心跳包設計

一 裝置終端 class deviceclient int deviceid int ip int port char connectid 16 time t lasttime struct event timeoutev 超時器 typedef list devicelist 二 移動控制終端 c...