關(guān)于NAT和P2P約會
NAT是什么擂找?
簡介
網(wǎng)絡地址轉(zhuǎn)換(NAT,NetworkAddress Translation)屬接入廣域網(wǎng)(WAN)技術(shù)霹俺,它將內(nèi)網(wǎng)地址轉(zhuǎn)換為外網(wǎng)地址嗡载,能夠讓多個的內(nèi)網(wǎng)地址共用一個外網(wǎng)地址來連接互聯(lián)網(wǎng)揽咕。
出現(xiàn)的原因
IPv4公網(wǎng)地址不夠用。
基本設計思想
IP不夠端口來湊拗踢。NAT設備將內(nèi)網(wǎng)的不同地址(1. IP不同岩臣;2.IP相同但端口不同)轉(zhuǎn)換為外網(wǎng)同一個IP的不同端口溜嗜,從而就減少了對外網(wǎng)地址的需求量。
NAT行為類型
按照RFC 4787的分類方法架谎,NAT主要有兩種行為:
- mapping Behavior(映射行為):即炸宵,內(nèi)網(wǎng)地址向外發(fā)送數(shù)據(jù)時,NAT設備按照什么規(guī)則來創(chuàng)建或重用端口谷扣。
- Filtering Behavior(過濾行為):即土全,當外網(wǎng)地址向NAT映射的地址發(fā)送數(shù)據(jù)時,NAT設備按照什么規(guī)則來過濾數(shù)據(jù)会涎。
每種行為有三種類型:
- Endpoint-Independent(地址端口都不依賴型)
- Address-Dependent(地址依賴型)
- Address and Port-Dependent(地址端口依賴型)
為方便理解裹匙,先假設一個已建立的NAT關(guān)系:內(nèi)網(wǎng)地址A:a<——>NAT設備B:b<——>外網(wǎng)地址C:c。
映射行為 | 解釋說明(內(nèi)網(wǎng)向外網(wǎng)發(fā)送數(shù)據(jù)時的行為) |
---|---|
地址端口都不依賴型 | 內(nèi)網(wǎng)地址A:a向外網(wǎng)發(fā)送數(shù)據(jù)末秃,不管外網(wǎng)地址是多少概页,NAT設備都會映射為B:b。 |
地址依賴型 | A:a向外網(wǎng)發(fā)送數(shù)據(jù)练慕,只要外網(wǎng)的IP地址為c惰匙,不管端口是多少,NAT設備就會映射為B:b铃将;否則映射為其它地址项鬼。 |
地址端口依賴型 | A:a向外網(wǎng)發(fā)送數(shù)據(jù),只有當外網(wǎng)的IP地址為c且端口為3劲阎,NAT設備才會映射為B:b秃臣;否則映射為其它地址。 |
過濾行為 | 解釋說明(外網(wǎng)向內(nèi)網(wǎng)發(fā)送數(shù)據(jù)時的行為) |
---|---|
地址端口都不依賴型 | B:b收到外網(wǎng)數(shù)據(jù)哪工,不管外網(wǎng)的IP和端口是多少,NAT設備都會轉(zhuǎn)發(fā)給A:a弧哎。換句話說雁比,來者不拒。 |
地址依賴型 | B:b收到外網(wǎng)數(shù)據(jù)撤嫩,只要外網(wǎng)的IP地址為c偎捎,不管端口是多少,NAT設備就會轉(zhuǎn)發(fā)給A:a;否則茴她,過濾掉寻拂。 |
地址端口依賴型 | B:b收到外網(wǎng)數(shù)據(jù),只有外網(wǎng)的IP地址為c且端口為3丈牢,NAT設備才會轉(zhuǎn)發(fā)給A:a祭钉;否則,過濾掉己沛。 |
說明:NAT映射后慌核,如果沒有數(shù)據(jù)交互,會在一段時間內(nèi)被釋放掉申尼。
P2P約會
背景
因為NAT的存在垮卓,所以兩個不同局域網(wǎng)內(nèi)的終端A和終端B想要建立點對點的通信就會遇到障礙,原因:
- 不知道對方經(jīng)過NAT轉(zhuǎn)換后的公網(wǎng)地址师幕;
- 即使知道對方的公網(wǎng)地址粟按,但由于NAT過濾行為的限制,數(shù)據(jù)也可能因被過濾掉而無法傳達給對方霹粥;
下面介紹一種在某些情況下可以建立點對點通信的方法灭将,我們擬人化地稱之為P2P約會,約會過程需要借助一個約會服務器來進行牽線蒙挑。
實現(xiàn)步驟和原理
步驟1:注冊
約會雙方A和B要先注冊到約會服務器宗侦,并定時向約會服務器發(fā)送心跳包來維持NAT不會被刷新掉。
注冊成功后忆蚀,約會服務器能夠獲取終端的信息矾利,主要包括:
- 身份唯一標示符
- 內(nèi)網(wǎng)地址(例如:A:a和B:b)
- 外網(wǎng)地址 (例如:A1:a1和B1:b1)
步驟2:約會請求
當A想要和B約會時
- A先向約會服務器請求要和B進行約會;
- 約會服務器向A提供B的聯(lián)系方式(內(nèi)網(wǎng)地址B:b和外網(wǎng)地址B1:b1)馋袜;
- 另外男旗,約會服務器把A的約會請求轉(zhuǎn)告給B,并向B提供A的聯(lián)系方式(內(nèi)網(wǎng)地址A:a和外網(wǎng)地址A1:a1)欣鳖;
步驟3:互發(fā)PING消息
-
后面的事情就和約會服務器沒有任何關(guān)系了察皇,A和B同時嘗試分別向?qū)Ψ降膬?nèi)外網(wǎng)地址發(fā)送PING消息;
?
?
?
說明:
- 對于終端A泽台,a1是和約會服務器打的洞什荣,a2是向B發(fā)送PING消息打的洞。a1和a2可能是同一個洞怀酷,也可能不是稻爬,這取決于NAT設備的映射行為類型,當映射行為類型是“地址端口都不依賴型”時蜕依,a1等于a2桅锄;
- 對于終端B琉雳,和終端A同理。
什么情況下可以一方可以收到另一方的PING消息友瘤?
- 雙方在同一個局域網(wǎng)內(nèi)翠肘;
- 雖然不在一個局域網(wǎng)內(nèi),但滿足以下幾種情況辫秧;
(此處以A向B發(fā)送的PING消息進行講解束倍,反之亦然。)
- 情況一:B1的NAT過濾行為屬于“地址端口都不依賴型”茶没,其他條件不限
- 情況二:B1的NAT過濾行為屬于“地址依賴型”肌幽,且b1==b2(即B1的NAT映射行為類型屬于“地址端口都不依賴型”),其他條件不限
- 情況三:B1的NAT過濾行為屬于”地址端口依賴型“抓半,且b1==b2(即B1的NAT映射行為類型屬于“地址端口都不依賴型”)喂急,且a1==a2(即,A1的NAT映射類型屬于”地址端口都不依賴型“)笛求,其他條件不限
步驟三:響應PONG
當一方收到另一方的PING消息后廊移,就響應PONG消息。當任意一方收到對方的PONG消息探入,就說明雙方已經(jīng)打通可以進行雙向交互的通道狡孔,即約會成功。
步驟四:do what you want
當約會成功后蜂嗽,A和B就可以進行直接通信了苗膝,根據(jù)業(yè)務需要想做啥就做啥,比如下載文件等植旧。