TCP打洞和UDP打洞的區(qū)別

原文地址: http://f543711700.iteye.com/blog/978887

為什么網(wǎng)上講到的P2P打洞基本上都是基于UDP協(xié)議的打洞外遇?難道TCP不可能打洞埃叭?還是TCP打洞難于實(shí)現(xiàn)窄驹?
假設(shè)現(xiàn)在有內(nèi)網(wǎng)客戶端A和內(nèi)網(wǎng)客戶端B沙热,有公網(wǎng)服務(wù)端S初烘。
如果A和B想要進(jìn)行UDP通信,則必須穿透雙方的NAT路由比伏。假設(shè)為NAT-A和NAT-B胜卤。

A發(fā)送數(shù)據(jù)包到公網(wǎng)S,B發(fā)送數(shù)據(jù)包到公網(wǎng)S,則S分別得到了A和B的公網(wǎng)IP,
S也和A B 分別建立了會(huì)話赁项,由S發(fā)到NAT-A的數(shù)據(jù)包會(huì)被NAT-A直接轉(zhuǎn)發(fā)給A葛躏,
由S發(fā)到NAT-B的數(shù)據(jù)包會(huì)被NAT-B直接轉(zhuǎn)發(fā)給B澈段,除了S發(fā)出的數(shù)據(jù)包之外的則會(huì)被丟棄。
所以:現(xiàn)在A B 都能分別和S進(jìn)行全雙工通訊了舰攒,但是A B之間還不能直接通訊败富。

解決辦法是:

A向B的公網(wǎng)IP發(fā)送一個(gè)數(shù)據(jù)包,則NAT-A能接收來自NAT-B的數(shù)據(jù)包
并轉(zhuǎn)發(fā)給A了(即B現(xiàn)在能訪問A了)摩窃;再由S命令B向A的公網(wǎng)IP發(fā)送一個(gè)數(shù)據(jù)包兽叮,則
NAT-B能接收來自NAT-A的數(shù)據(jù)包并轉(zhuǎn)發(fā)給B了(即A現(xiàn)在能訪問B了)。

以上就是“打洞”的原理猾愿。

但是TCP和UDP在打洞上卻有點(diǎn)不同鹦聪。這是因?yàn)椴死鹲ocket(標(biāo)準(zhǔn)socket規(guī)范)的API造成的:
UDP的socket允許多個(gè)socket綁定到同一個(gè)本地端口,而TCP的socket則不允許蒂秘。
這是這樣一個(gè)意思:A B要連接到S泽本,肯定首先A B雙方都會(huì)在本地創(chuàng)建一個(gè)socket,
去連接S上的socket姻僧。創(chuàng)建一個(gè)socket必然會(huì)綁定一個(gè)本地端口(就算應(yīng)用程序里面沒寫
端口规丽,實(shí)際上也是綁定了的,至少java確實(shí)如此)撇贺,假設(shè)為8888赌莺,這樣A和B才分別建立了到
S的通信信道。接下來就需要打洞了松嘶,打洞則需要A和B分別發(fā)送數(shù)據(jù)包到對(duì)方的公網(wǎng)IP艘狭。但是
問題就在這里:因?yàn)镹AT設(shè)備是根據(jù)端口號(hào)來確定session,如果是UDP的socket喘蟆,A B可以
分別再創(chuàng)建socket缓升,然后將socket綁定到8888,這樣打洞就成功了蕴轨。但是如果是TCP的
socket港谊,則不能再創(chuàng)建socket并綁定到8888了,這樣打洞就無法成功橙弱。``

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歧寺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棘脐,更是在濱河造成了極大的恐慌斜筐,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛀缝,死亡現(xiàn)場(chǎng)離奇詭異顷链,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)屈梁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門嗤练,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榛了,“玉大人,你說我怎么就攤上這事煞抬∷螅” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵革答,是天一觀的道長(zhǎng)战坤。 經(jīng)常有香客問我,道長(zhǎng)残拐,這世上最難降的妖魔是什么途茫? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮溪食,結(jié)果婚禮上慈省,老公的妹妹穿的比我還像新娘。我一直安慰自己眠菇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布袱衷。 她就那樣靜靜地躺著捎废,像睡著了一般。 火紅的嫁衣襯著肌膚如雪致燥。 梳的紋絲不亂的頭發(fā)上登疗,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音嫌蚤,去河邊找鬼辐益。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脱吱,可吹牛的內(nèi)容都是我干的智政。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼箱蝠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼续捂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宦搬,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤牙瓢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后间校,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矾克,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年憔足,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胁附。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酒繁。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖汉嗽,靈堂內(nèi)的尸體忽然破棺而出欲逃,到底是詐尸還是另有隱情,我是刑警寧澤饼暑,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布稳析,位于F島的核電站,受9級(jí)特大地震影響弓叛,放射性物質(zhì)發(fā)生泄漏彰居。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一撰筷、第九天 我趴在偏房一處隱蔽的房頂上張望陈惰。 院中可真熱鬧,春花似錦毕籽、人聲如沸抬闯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)溶握。三九已至,卻和暖如春蒸播,著一層夾襖步出監(jiān)牢的瞬間睡榆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工袍榆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胀屿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓包雀,卻偏偏與公主長(zhǎng)得像宿崭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子馏艾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 當(dāng)今互聯(lián)網(wǎng)到處存在著一些中間件(MIddleBoxes)劳曹,如NAT和防火墻,導(dǎo)致兩個(gè)(不在同一內(nèi)網(wǎng))中的客戶端無法...
    空即是色即是色即是空閱讀 1,004評(píng)論 0 0
  • 一琅摩、什么是NAT铁孵?為什么要使用NAT? NAT是將私有地址轉(zhuǎn)換為合法IP地址的技術(shù)房资,通俗的講就是將內(nèi)網(wǎng)與內(nèi)網(wǎng)通信時(shí)...
    莫太極閱讀 1,632評(píng)論 0 9
  • 原文地址: http://f543711700.iteye.com/blog/978044 發(fā)送消息的時(shí)候是UDP...
    Caiaolun閱讀 2,401評(píng)論 0 1
  • 寒假一放蜕劝,放松下來真可怕,從起床到午飯根本也不知道自己做了些什么,就是陪著孩子玩玩玩了……
    Jessica_ff17閱讀 200評(píng)論 0 0
  • 面試補(bǔ)習(xí)知識(shí) 1:表視圖(精通iOS開發(fā))2:本地化&Core Data(精通iOS開發(fā))3月26號(hào) 后面繼續(xù)補(bǔ)3...
    莊棟棟閱讀 231評(píng)論 0 0