2012-02-24 83 views
2

這是我的場景。使用Tcp/Udp發送數據

我有我的設備(android手機)。 而我知道另一個設備(這是互聯網中的一些遠程設備)的IP地址

那麼我該如何發送數據到其他設備? 我是否使用Tcp或Udp協議?

編輯:而且我知道有公共IP地址和私人IP地址(如當設備通過WiFi連接時)。在這種情況下,甚至可以使用Tcp或Udp?

回答

5

您正在尋找的是一個常見問題(通常的解決方案)。你想從一個設備(電腦/電話/等..)發送數據到另一個。下面是它在幕後的工作方式:

世界上有很多計算機。每臺計算機都有一個標識 - 一個名稱,如果你願意的話,稱爲計算機的IP地址。 IP地址有許多版本/標準,而當前標準將IP地址命名爲「111.222.333.444」。只有12個數字的數字排列如此多 - 並且保留了整個IP地址範圍。換句話說,計算機沒有足夠的IP地址。

現在,路由器被髮明,除其他原因之外,以解決這個問題。路由器爲其局域網(LAN)內的所有計算機提供一個公共(WAN)IP地址。每戶平均有一臺路由器,這可以節省很多IP地址。不幸的是,它也打破了計算機之間的直接溝通,因爲如何與三臺使用同一名稱的計算機進行通信?當計算機C共享相同的WAN IP地址時,如何從計算機C的計算機B識別計算機A?首先,讓我們澄清 - 就像IP地址有幾個版本和標準一樣,所以有幾種類型的路由器。順便說一句,並不是路由器是計算機之間直接通信的問題 - 它實際上是路由器的網絡地址轉換(NAT)的基礎技術。無論如何,有幾種類型的NAT,雖然這些類型的互聯網上的信息相對較少,但您仍然可以通過Wikipedia並閱讀幾篇大學的研究論文。類型有Full Cone NAT,Restricted NAT,Port Restricted NAT和Symmetric NAT。

因此,LAN中的計算機共享相同的WAN IP。這是個問題。什麼是一個解決方案?如果我們指示路由器將所有到達某個端口的傳入流量路由到本地局域網中的某臺計算機,該怎麼辦?例如,如果三臺LAN計算機共享1.1.1.1的WAN IP,我們可以設置一個稱爲端口轉發的過程來指示路由器將到達端口6000的所有數據包路由到192.168.1.101:3500。

uPnP只是一個奇特的技術(並不總是出現在路由器中 - 或者更重要的是,幾乎沒有默認啓用),允許您使用代碼進行端口轉發。

如果我們不能使用uPnP端口轉發,因爲並非所有設備都啓用它,必須有另一種解決方案 - 並且存在:打孔。

打孔有兩種風格:UDP和TCP,但TCP打孔有點複雜,因爲TCP本質上是第一個面向連接的協議。 UDP打孔更容易,因爲您可以在沒有連接的情況下發送數據包(事實上,是否真的有連接這樣的東西?)

您可以閱讀維基百科和其他網站上的UDP打孔程序。雖然這個概念是這樣的。任何發送出站數據包的計算機都會收到回覆,這意味着路由器將允許入站數據包的回覆。起初,兩臺計算機不會期望彼此的回覆,因此每臺計算機發送的第一個數據包將被路由器拒絕。但是,如果我們繼續發送數據包,則路由器將允許其餘數據包通過,因爲每臺計算機都會收到答覆。只要這個打孔的連接通過偶爾保持活動的數據包保持活動狀態,它就會保持活躍狀態​​。不幸的是,這種UDP打孔方法對於對稱NAT來說是不成功的(在下面的鏈接中進行了解釋)。這就是爲什麼最終解決方案只需通過自己的服務器代理連接和流量。這需要一個電腦農場,所以它的成本很高。但是這個最終的解決方案被稱爲TURN。 STUN是一個Web服務,您可以查詢以確定您的NAT類型和公共IP(而不是解析cmyip.com)。只是你在個人研究中遇到的一些術語。

玩這些概念有所幫助。這裏有一些資源,讓您開始:

類型的NAT:http://think-like-a-computer.com/2011/09/16/types-of-nat/

對稱NAT穿透的方法(基本上是由垃圾郵件多了很多包了很多更多的端口):http://www.goto.info.waseda.ac.jp/~wei/file/wei-apan-v10.pdf

Lidgren網絡庫(內置NAT穿越,這是一個C#庫):http://code.google.com/p/lidgren-network-gen3/w/list

+1

謝謝傑森!回覆晚了非常抱歉。 我實際上已經開始工作了。使用打孔技術。 – SatheeshJM 2012-04-02 18:19:21

+0

@SatheeshJM:嗨,我正在尋找相同的,你可以提供一些我的參考或代碼。提前致謝。 – 2014-06-06 06:40:34

0

在大多數實際情況下,您可以通過將數據發送到其他手機從其中獲取數據的中間設備向其他設備發送數據。可以在兩個設備之間直接使用TCP或UDP之類的協議,根據協議以及設備如何獲得Internet訪問,這可能會也可能不會。

例如,一個設備可以發送電子郵件,另一個設備可以檢索該電子郵件。您可以將該模型概括爲其他類型的通信。

+0

我需要數據實時發送。因此,我認爲tcp/udp會很好(我再也不是專家了!)你能解釋一下互聯網訪問類型如何影響tcp/udp嗎? – SatheeshJM 2012-02-24 00:39:44

+0

「互聯網接入」可能意味着在NAT後面。 – 2012-02-24 00:56:31