日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux怎么检测nat类型,STUN(RFC3489)的NAT类型检测方法

發(fā)布時(shí)間:2024/1/1 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux怎么检测nat类型,STUN(RFC3489)的NAT类型检测方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在現(xiàn)實(shí)Internet網(wǎng)絡(luò)環(huán)境中,大多數(shù)計(jì)算機(jī)主機(jī)都位于防火墻或NAT之后,只有少部分主機(jī)能夠直接接入Internet。很多時(shí)候,我們希望網(wǎng)絡(luò)中的兩臺(tái)主機(jī)能夠直接進(jìn)行通信(即所謂的P2P通信),而不需要其它公共服務(wù)器的中轉(zhuǎn)。由于主機(jī)可能位于防火墻或NAT之后,在進(jìn)行P2P通信之前,我們需要進(jìn)行檢測(cè)以確認(rèn)它們之間能否進(jìn)行P2P通信以及如何通信。這種技術(shù)通常被稱(chēng)為NAT穿透(NAT Traversal)。最常見(jiàn)的NAT穿透是基于UDP的技術(shù)(如下面的RFC3489/STUN),也有基于TCP的穿透技術(shù)。NAT穿透技術(shù)最重要的是識(shí)別目標(biāo)主機(jī)的NAT類(lèi)型,這也是本文所要介紹的內(nèi)容。

在RFC3489/STUN[1]中,基于UDP的NAT穿透技術(shù)把主機(jī)劃分為如下七種NAT類(lèi)型:UDP Blocked、Open Internet、Symmetric Firewall、Full Cone NAT、Restricted Cone NAT、Port Restricted Cone NAT、Symmetric NAT。具體解釋如下:

(1)Open Internet:主機(jī)具有公網(wǎng)IP,允許主動(dòng)發(fā)起和被動(dòng)響應(yīng)兩種方式的UDP通信。

(2)UDP Blocked:位于防火墻之后,并且防火墻阻止了UDP通信。

(3)Symmetric Firewall:主機(jī)具有公網(wǎng)IP,但位于防火墻之后,且防火墻阻止了外部主機(jī)的主動(dòng)UDP通信。

(4)Full Cone NAT:當(dāng)內(nèi)網(wǎng)主機(jī)創(chuàng)建一個(gè)UDP socket并通過(guò)它第一次向外發(fā)送UDP數(shù)據(jù)包時(shí),NAT會(huì)為之分配一個(gè)固定的公網(wǎng){IP:端口}。此后,通過(guò)這個(gè)socket發(fā)送的任何UDP數(shù)據(jù)包都是通過(guò)這個(gè)公網(wǎng){IP:端口}發(fā)送出去的;同時(shí),任何外部主機(jī)都可以使用這個(gè)公網(wǎng){IP:端口}向該socket發(fā)送UDP數(shù)據(jù)包。即是說(shuō),NAT維護(hù)了一個(gè)映射表,內(nèi)網(wǎng)主機(jī)的內(nèi)網(wǎng){IP:端口}與公網(wǎng){IP:端口}是一一對(duì)應(yīng)的關(guān)系。一旦這個(gè)映射關(guān)系建立起來(lái)(內(nèi)部主機(jī)向某一外部主機(jī)發(fā)送一次數(shù)據(jù)即可),任何外部主機(jī)就可以直接向NAT內(nèi)的這臺(tái)主機(jī)發(fā)起UDP通信了,此時(shí)NAT透明化了。

(5)Restricted Cone NAT:當(dāng)內(nèi)網(wǎng)主機(jī)創(chuàng)建一個(gè)UDP socket并通過(guò)它第一次向外發(fā)送UDP數(shù)據(jù)包時(shí),NAT會(huì)為之分配一個(gè)公網(wǎng){IP:端口}。此后,通過(guò)這個(gè)socket向外發(fā)送的任何UDP數(shù)據(jù)包都是通過(guò)這個(gè)公網(wǎng){IP:端口}發(fā)送出去的;而任何收到過(guò)從這個(gè)socket發(fā)送來(lái)的數(shù)據(jù)的外部主機(jī)(由IP標(biāo)識(shí)),都可以通過(guò)這個(gè)公網(wǎng){IP:端口}向該socket發(fā)送UDP數(shù)據(jù)包。即是說(shuō),NAT維護(hù)了一個(gè)內(nèi)網(wǎng){IP:端口}到公網(wǎng){IP:端口}的映射,還維護(hù)了一個(gè){外部主機(jī)IP, 公網(wǎng){IP:端口}}到內(nèi)網(wǎng){IP:端口}的映射。因此,要想外部主機(jī)能夠主動(dòng)向該內(nèi)部主機(jī)發(fā)起通信,必須先由該內(nèi)部主機(jī)向這個(gè)外部發(fā)起一次通信。

(6)Port Restricted Cone NAT:當(dāng)內(nèi)網(wǎng)主機(jī)創(chuàng)建一個(gè)UDP socket并通過(guò)它第一次向外發(fā)送UDP數(shù)據(jù)包時(shí),NAT會(huì)為之分配一個(gè)公網(wǎng){IP:端口}。此后,通過(guò)這個(gè)socket向外部發(fā)送的任何UDP數(shù)據(jù)包都是通過(guò)這個(gè)公網(wǎng){IP:端口}發(fā)送出去的;一旦外部主機(jī)在{IP:端口}上收到過(guò)從這個(gè)socket發(fā)送來(lái)的數(shù)據(jù)后,都可以通過(guò)這個(gè)外部主機(jī){IP:端口}向該socket發(fā)送UDP數(shù)據(jù)包。即是說(shuō),NAT維護(hù)了一個(gè)從內(nèi)網(wǎng){IP:端口}到公網(wǎng){IP:端口}的映射,還維護(hù)了一個(gè)從{外部主機(jī){IP:端口}, 公網(wǎng){IP:端口}}到內(nèi)網(wǎng){IP:端口}的映射。

(7)Symmetrict NAT:當(dāng)內(nèi)網(wǎng)主機(jī)創(chuàng)建一個(gè)UDP socket并通過(guò)它第一次向外部主機(jī)1發(fā)送UDP數(shù)據(jù)包時(shí),NAT為其分配一個(gè)公網(wǎng){IP1:端口1},以后內(nèi)網(wǎng)主機(jī)發(fā)送給外部主機(jī)1的所有UDP數(shù)據(jù)包都是通過(guò)公網(wǎng){IP1:端口1}發(fā)送的;當(dāng)內(nèi)網(wǎng)主機(jī)通過(guò)這個(gè)socket向外部主機(jī)2發(fā)送UDP數(shù)據(jù)包時(shí),NAT為其分配一個(gè)公網(wǎng){IP2:端口2},以后內(nèi)網(wǎng)主機(jī)發(fā)送給外部主機(jī)2的所有UDP數(shù)據(jù)包都是通過(guò)公網(wǎng){IP2:端口2}發(fā)送的。公網(wǎng){IP1:端口1}和公網(wǎng){IP2:端口2}一定不會(huì)完全相同(即要么IP不同,要么端口不同,或者都不同)。這種情況下,外部主機(jī)只能在接收到內(nèi)網(wǎng)主機(jī)發(fā)來(lái)的數(shù)據(jù)時(shí),才能向內(nèi)網(wǎng)主機(jī)回送數(shù)據(jù)。

RFC3489/STUN協(xié)議過(guò)程

STUN協(xié)議定義了三類(lèi)測(cè)試過(guò)程來(lái)檢測(cè)NAT類(lèi)型,如下所述:

Test1:STUN Client通過(guò)端口{IP-c1:Port-c1}向STUN Server{IP-s1:Port-s1}發(fā)送一個(gè)Binding Request(沒(méi)有設(shè)置任何屬性)。STUN Server收到該請(qǐng)求后,通過(guò)端口{IP-s1:Port-s1}把它所看到的STUN Client的IP和端口{IP-m1,Port-m1}作為Binding Response的內(nèi)容回送給STUN Client。

Test1#2:STUN Client通過(guò)端口{IP-c1:Port-c1}向STUN Server{IP-s2:Port-s2}發(fā)送一個(gè)Binding Request(沒(méi)有設(shè)置任何屬性)。STUN Server收到該請(qǐng)求后,通過(guò)端口{IP-s2:Port-s2}把它所看到的STUN Client的IP和端口{IP-m1#2,Port-m1#2}作為Binding Response的內(nèi)容回送給STUN Client。

Test2:STUN Client通過(guò)端口{IP-c1:Port-c1}向STUN Server{IP-s1:Port-s1}發(fā)送一個(gè)Binding Request(設(shè)置了Change IP和Change Port屬性)。STUN Server收到該請(qǐng)求后,通過(guò)端口{IP-s2:Port-s2}把它所看到的STUN Client的IP和端口{IP-m2,Port-m2}作為Binding Response的內(nèi)容回送給STUN Client。

Test3:STUN Client通過(guò)端口{IP-c1:Port-c1}向STUN Server{IP-s1:Port-s1}發(fā)送一個(gè)Binding Request(設(shè)置了Change Port屬性)。STUN Server收到該請(qǐng)求后,通過(guò)端口{IP-s1:Port-s2}把它所看到的STUN Client的IP和端口{IP-m3,Port-m3}作為Binding Response的內(nèi)容回送給STUN Client。

NAT類(lèi)型檢測(cè)過(guò)程如下(在RFC3489中或者在Wiki上都可以找到流程圖):

1. 進(jìn)行Test1。如果STUN Client不能夠收到STUN Server的應(yīng)答(重復(fù)多次確認(rèn)),那么說(shuō)明該STUN Client是UDP Blocked類(lèi)型(也有可能是STUN Server不可到達(dá),這里不考慮這種情形);否則,STUN Client把返回的{IP-m1,Port-m1}和本地的{IP-c1:Port-c1}進(jìn)行比較(只需要比較IP即可),如果相同,說(shuō)明本機(jī)直接連接于公網(wǎng),否則本機(jī)位于NAT之后,但還需要進(jìn)一步判斷具體類(lèi)型。

1.1. 如果本機(jī)直接連接于公網(wǎng),進(jìn)行Test2。如果STUN Client不能夠收到STUN Server的應(yīng)答(重復(fù)多次確認(rèn)),那么說(shuō)明該STUN Client是Symmetric Firewall類(lèi)型;否則,該STUN Client是Open Internet類(lèi)型。

1.2. 如果本機(jī)位于NAT之后,進(jìn)行Test2。如果STUN Client能夠收到STUN Server的應(yīng)答,那么說(shuō)明該STUN Client是Full Cone NAT;否則,需要進(jìn)一步進(jìn)行測(cè)試。

1.2.1. 進(jìn)行Test1#2。STUN Client比較IP-m1和IP-m1#2是否相同,如果不相同,那么說(shuō)明該STUN Client是Symmetric NAT類(lèi)型;否則,需要進(jìn)一步進(jìn)行測(cè)試。

1.2.1.1 進(jìn)行Test3。如果STUN Client能夠收到STUN Server的應(yīng)答,那么說(shuō)明該STUN Client是Restricted Cone NAT類(lèi)型;否則,該STUN Client是Port Restricted Cone NAT類(lèi)型。

一些說(shuō)明:

1. 只需要進(jìn)行Test2,即可判斷出是否為Open Internet或Full Cone Nat類(lèi)型。

STUN實(shí)現(xiàn)

1.STUN Client and Server

library()

這個(gè)庫(kù)實(shí)現(xiàn)了RFC3489中的STUN協(xié)議。其中,Client程序輸出結(jié)果意義如下:

(1)"Open"表示這里的Open Internet

(2)"Independent Mapping, Independent Filter"表示這里的Full Cone NAT

(3)"Independedt Mapping, Address Dependendent Filter"表示這里的Restricted

Core NAT

(4)"Indepndent Mapping, Port Dependent Filter"表示這里的Port Restricted Core

NAT

(5)"Dependent Mapping"表示這里的Symmetric NAT

(6)"Firewall"表示這里的Symmetric Firewall

(7)"Blocked or could not reach STUN server"表示這里的UDP Blocked

2. reTurn ()

實(shí)現(xiàn)了RFC5389中的STUN協(xié)議和TURN協(xié)議。

網(wǎng)上一些可用STUN Server(注意:STUN協(xié)議指定默認(rèn)端口為3478)

stun01.sipphone.com

stun.iptel.org

stun.softjoys.com

stun.xten.com(這個(gè)STUN Server的實(shí)現(xiàn)好像有問(wèn)題,測(cè)試結(jié)果與前面三個(gè)不相同)

注解

[1] RFC3489中的STUN協(xié)議(Simple Traversal of UDP Through

NATs)是一個(gè)完整的NAT穿透方案,但其修訂版本(RFC5389)把STUN協(xié)議(Session Traversal Utilities

for

NAT)定位于為穿透NAT提供工具,并不提供一個(gè)完整的解決方案。此外,RFC3489只提供了UDP的NAT穿透,而RFC5389還支持TCP的穿

透)。

Reference

1.

2.

閱讀(2418) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(0) |

總結(jié)

以上是生活随笔為你收集整理的Linux怎么检测nat类型,STUN(RFC3489)的NAT类型检测方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av网址观看 | 亚洲熟妇中文字幕五十中出 | 成人午夜视频一区二区播放 | 国产一区二区视频免费在线观看 | 亚洲 欧洲 日韩 | a天堂中文在线观看 | 美女无遮挡免费网站 | 人妻奶水人妻系列 | 国产精品视频免费播放 | 91二区 | 黄色网战在线观看 | 97视频久久 | 成人短视频在线观看 | 日韩欧美在线一区 | 成片免费观看视频大全 | 91一二区 | 成人午夜sm精品久久久久久久 | 久草三级 | 国产精品久久久久久99 | 久草香蕉在线 | 四季av中文字幕 | 国产麻豆精品久久一二三 | 成人小说亚洲一区二区三区 | 人人插人人看 | 色偷偷资源 | 亚洲aaaaa特级 | 97人人人 | 日韩黄网站 | 免费黄色国产视频 | 亚洲精品2 | 一级女人毛片 | 久久久一区二区三区四区 | 日韩国产一区二区三区 | 欧美成人69 | 国产精品va无码一区二区 | 熟妇的味道hd中文字幕 | 影音先锋激情 | 久久久夜夜夜 | 亚洲综合网在线观看 | 在线不卡av | 91久久国产精品 | 亚洲码欧美码一区二区三区 | 日本成人小视频 | 成人免费福利视频 | 99久久婷婷国产一区二区三区 | 麻豆免费在线观看视频 | 日韩另类在线 | 美女毛片视频 | 91视频爱爱 | 麻豆久久久久久久 | 国产精品一区二区精品 | 丰满少妇久久久久久久 | 久久成人午夜 | 国产精品 欧美激情 | 亚洲国产精品成人综合 | 久久丝袜视频 | 丁香六月综合 | 9.1成人免费看片 | 看片免费黄在线观看入口 | 久久久久国产精品国产 | 亚洲熟女乱色一区二区三区 | 国产在线精品二区 | 国产a级精品 | 免费无码不卡视频在线观看 | 成年人视频在线免费看 | 97久久国产亚洲精品超碰热 | 麻豆网站在线 | 亚洲成熟女性毛茸茸 | 国产片在线 | 国产h在线 | 日批小视频 | 婷婷在线视频观看 | 九九热在线免费观看 | 国产欧美一区二区在线观看 | 日韩av免费网站 | 黄色电影在线视频 | 天天插天天摸 | 伊人222成人综合网 亚洲日本中文 | 日本色视频 | 国产夜色精品一区二区av | 91中文字日产乱幕4区 | 狠狠插狠狠干 | 国产一线在线观看 | 欧美日韩一级二级三级 | 国产免费无遮挡 | 大尺度床戏揉捏胸视频 | 四虎影院免费 | 夜夜爽天天操 | 性色浪潮av| 国产黄色美女视频 | av天堂永久资源网 | 久久爱一区 | 森泽佳奈av | 在线成人日韩 | h成人在线 | 亚洲天堂区 | 小镇姑娘高清播放视频 | 成人在线免费观看网站 | 欧美精品自拍 |