1
、使用者a
登入伺服器
s,伺服器
s記錄使用者a經
nat轉換後的位址。
2、使用者
b登入伺服器
s,伺服器
s記錄使用者b經
nat轉換後的位址。
3、使用者
a想與使用者b建立
p2p通訊。
4、使用者
a向伺服器傳送請求,告訴伺服器想與使用者b建立
p2p通訊。
5、伺服器
s接收到使用者
a傳送過來的請求後,將b經
nat轉換後的位址放在乙個(可以稱之為)回饋的訊息包中傳送給使用者a。
6、同時,伺服器s將
a想與b通訊的訊息(訊息中包含了a經
nat轉換後的位址)告知b。
7、a接收到伺服器
s傳送過來的回饋訊息後(包含b經
nat轉換後的位址),開始不停向這個位址傳送資料
message。8
、b在接收到伺服器
s傳送過來的
a想與之建立
p2p通訊的訊息之後,向這個位址傳送一次打洞包,表示我接受來自這個位址的資料。
9、如果
b接收到了
a傳送過來的
message
資料。b
向伺服器告知的
a的位址傳送回饋包
message ack
,如果a
接收到了
message ack
,說明資料已經打通。
問題:除
symmetric nat
之外的三種
nat型別,一旦內部向外傳送了資料,其位址及埠的對映就不會改變,就是說所有向外部傳送的資料都是使用這個對映。
區別是:
完全錐型
nat在建立對映後,任何外部位址可以通過
nat分配的位址和埠與內網使用者通訊。限制錐型
nat在建立對映後,只有內網通過
nat分配的位址及埠傳送過的位址使用者(可以是不同的埠)才能與內網使用者通訊。那麼最後乙個埠限制錐型,自己想是什麼樣的情況。1、
symmetric nat
的真實運作情況?
就稱之為對稱型
nat。對稱型
nat與上面有乙個很大的不同,就是相同的埠對應不同的目的位址(不是說
nat,是說「目的」位址),就會有不同的位址及埠的對映。為什麼說這種型別不能通過打洞的方式解決呢?來看乙個例子。
example:a
是乙個對稱型
nat後的使用者。
b是乙個其它型別
nat後的使用者。1、
a,b登入伺服器;
2、伺服器記錄兩者的
nat轉換後的位址及埠;3、
a呼叫b;
4、伺服器給a和
b對方的位址;5、
a向b傳送資料
message
,伺服器給a的
bnat
轉換後的位址是對的。開始時候
b沒有打洞,如果是
b所處的
nat是錐型的(錐型,一旦位址埠對了的可是來者不拒),
b收到資料
message
。如果b
所處的是限制錐型或是埠限制錐型,則傳送失敗(被b的
nat據之門外了,所以
b接收不到);6、
b為a打洞,但是,a的
nat位址對
b來說是假的!那是
a對應與伺服器的時候,
nat給他分配的。7、
a還是在給
b傳送資料,現在
b打洞了(它認為它給
a打洞了),但是現在
a用的不是
b打洞的那個
nat位址及埠給
b傳送的。
b的伺服器就將其丟棄,
b還是收不到!當然6、
7中的分析僅僅說的是限制錐型或是埠限制錐型,因為
a掌握的b的
nat位址是正確的。
上面是一種情況。
a->b 來看
b->a a
為b打了乙個洞,可是
b不會將資料發到了伺服器給它的那個位址埠上,而不是傳送到這個為其專門新建的
nat對映位址埠上,
b主動發給
a是不可能的了。
這裡這樣可以看出來,如果
b所處的是限制錐型或是埠限制錐型
nat,則不管a發給
b還是b發給
a,資料都不會收到的。
b是完全錐型是不是還存有一線希望呢?a給
b傳送訊息,
b能夠收到資料報,b利用
這個位址給a
傳送反饋訊息,相當於為其打了乙個洞,
a就收到了
b的反饋。
這樣是可以通訊的。
對稱型nat
之後的使用者
a應該能與完全錐型或者無
nat的使用者b建立
p2p通訊的。
關於網上某個程式的一點分析
伺服器記錄了a以及
b經nat(如果有)轉換後的位址埠。a和
b分別從伺服器獲取到對方的註冊位址埠後,此時a
發給b訊息,由於伺服器上記錄的b的
nat轉換後的位址是有效的,
a能夠將資料傳送給b,
b就能根據這個資料中攜帶的位址資訊與
a通訊,傳送乙個反饋。這就是我們能收到
ack的原因。(這裡,表示雙發已經能夠通訊了,那麼,現在程式中
b為什麼不能向
a傳送資料,因為程式中,它使用的是當時伺服器給它的那個位址埠,這個肯定不會一樣) b
利用伺服器給他的a經
nat轉換後的位址埠發給
a,不管
a有沒有打洞(因為打洞是對應了另外乙個埠),
a都是不會收到
b過來的資料的。
NAT與NAT穿透 三
一直以來,說起nat穿透,很多人都會被告知使用udp打孔這個技術,基本上沒有人會告訴你如何使用tcp協議去穿透 甚至有的人會直接告訴你tcp協議是無法實現穿透的 但是,眾所周知的是,udp是乙個無連線的資料報協議,使用它就必須自己維護收發資料報的完整性,這常常會大大增加程式的複雜度,而且一些程式由於...
nat 穿透原理
其實很早我就已經實現了使用tcp協議穿透nat了,但是苦於一直沒有時間,所以沒有寫出來,現在終於放假有一點空閒,於是寫出來共享之。一直以來,說起nat穿透,很多人都會被告知使用udp打孔這個技術,基本上沒有人會告訴你如何使用tcp協議去穿透 甚至有的人會直接告訴你tcp協議是無法實現穿透的 但是,眾...
nat 穿透原理
其實很早我就已經實現了使用tcp協議穿透nat了,但是苦於一直沒有時間,所以沒有寫出來,現在終於放假有一點空閒,於是寫出來共享之。一直以來,說起nat穿透,很多人都會被告知使用udp打孔這個技術,基本上沒有人會告訴你如何使用tcp協議去穿透 甚至有的人會直接告訴你tcp協議是無法實現穿透的 但是,眾...