我曾經認爲我對TCP和UDP協議的理解雖然有限,但是是正確的。儘管最近,當我意識到共享一個公共洪流的對等端可以通過TCP或UDP協議相互連接而不需要實際的端口轉發時,我就感到困惑。路由器如何知道本地網絡中的哪臺機器將數據包轉發到哪裏?任何幫助清除這一點,將不勝感激。互聯網上的洪流協議圖表和文章被大大簡化,因此不包含任何有用的信息。Torrent點對點連接
回答
路由器(運行NAT)跟蹤所有傳出的數據包,然後允許傳入的數據包作爲對這些傳出數據包的響應。
因此,如果您向外發送TCP連接到google.com:80,那麼它將允許數據包從google.com:80返回(作爲響應)。如果兩個內部主機連接到同一個端口,可以區分它們,因爲本地端口不同,例如:
1)主機A與Google建立連接,路由器使用其自己的本地端口10001作爲TCP連接
2)主機B也有類似的連接和路由器使用它自己的本地端口10002 TCP連接
如果一個數據包從google.com:80進來,它解決了在端口10001路由器的WAN IP,則路由器知道將其發送到主機A.如果它的地址爲端口10002,路由器知道將其發送到主機B.
如果你在路由器後面有兩個對等主機(兩個NAT),那麼就沒有辦法建立連接,除非有什麼東西可以傳輸關於其他IP的信息(即,一個他們可以用來交換信息的服務器),他們可以嘗試猜測路由器將選擇哪個端口作爲本地端口,然後開始在該端口上將每個其他數據發送給路由器WAN IP。因爲兩臺路由器都看到數據發送出去,所以他們設置了一個允許數據輸入的規則。如果端口被猜測正確,那麼來自每邊的數據包都可以通過,因爲兩個路由器都有一個規則設置。這被稱爲UDP/TCP打孔。
http://en.wikipedia.org/wiki/UDP_hole_punching
相信Skype是它使用UDP和不打孔一個應用程序的一個例子。
謝謝你的深刻反應!我相信我現在已經充分理解了這個話題,讓我的思想休息...現在。 順便說一句,Skype是一個聰明的野獸。我認爲它可能會檢測到您正在與本地網絡中的某個人進行對話時(在路由器重新啓動後仍然連接到Internet時,我可以與我的姐姐聊聊) – Neob91
嚴格來說,由於您沒有使用'NAT'來限定路由器路由器,因此答案是路由器使用ARP來確定目標主機的MAC地址,然後將具有該MAC地址的以太網幀作爲目標地址。
但我認爲這不是你的意思。
你的意思是NAT路由器如何知道在哪裏轉發入站數據包?
答案是路由器維護一個活動的「連接」列表,使其能夠進行地址轉換。它使用外部端口號映射到內部主機地址和端口號。在TCP的情況下,「連接」的概念僅僅是是否存在TCP連接(儘管通常有超時停止泄漏)。在UDP的情況下,它更難,因爲沒有UDP連接本身,所以通常是通過超時跟蹤它的情況。
- 1. GCDAsyncSocket點對點連接
- 2. 點對點在線連接問題
- 3. python中的點對點SSL連接
- 4. 通過WiFi進行點對點連接
- 5. 點對點連接的類型
- 6. 沒有adobe cirrus的點對點連接
- 7. 互聯網上的點對點連接
- 8. 連接相對節點
- 9. 連接圖像點的點
- 10. 連接點
- 11. 連接點
- 12. 站連接點
- 13. 連接2點drawRect?
- 14. 連接點的線
- 15. 連接點與jquery
- 16. 連接點功能
- 17. 如何連接點?
- 18. 點的連接圖
- 19. ThreeJS對象3d連接2點
- 20. VB.net數據庫連接有點不對
- 21. 連接點功能只有對話
- 22. 如何在torrent協議中使用對等連接?
- 23. 點對點套接字IO
- 24. 是否有可能在trackerless torrent文件中包含對等點?
- 25. 連接deepstream節點直接
- 26. 如何使用GFSH連接點對點環境?
- 27. webrtc媒體服務器點對點連接
- 28. 您可以連接UWP應用程序點對點嗎?
- 29. iPhone - 通過互聯網的點對點連接
- 30. 使用NSNetService在iOS 7上Blutooth點對點連接
僅供參考:大多數路由器/防火牆的90%阻止UDP! –
你從哪裏得到這個統計數據?我從來沒有遇到過我的UDP應用程序問題(家中有多個SOHO,咖啡店或辦公室),無論是tftp,遊戲還是自定義的東西。 –
默認情況下,大多數路由器阻止UDP *廣播*。 –