Bagaimana cara peer-to-peer bekerja melalui internet?

15

Dari apa yang saya mengerti, tidak ada cara untuk mengirim paket ke komputer di jaringan lokal dari luar jaringan, kecuali kita tahu mekanisme routing yang digunakan oleh router.

Dengan asumsi kita memiliki set-up yang terlihat seperti ini:

  1. Computer-A, IP 192.168.1.2 (gateway default 192.168.1.1)

  2. Computer-B, IP 192.168.1.3 (gateway default 192.168.1.1)

  3. Router-C, IP 192.168.1.1 (IP eksternal 1.1.1.1)

  4. Router-D (IP eksternal 2.2.2.2)

Komputer-A, Komputer-B, dan Router-C milik jaringan lokal yang sama. Router-D ingin mengirim data ke Komputer-A, tetapi tidak dapat melakukan ini tanpa melalui Router-C.

Sekarang Router-C akan meneruskan paket ke Computer-A jika port tujuan adalah 1000, dan akan meneruskan paket ke Computer-B jika port tujuan adalah 2000. Namun yang pasti, satu-satunya perangkat yang mengetahui mekanisme routing ini adalah Router-C itu sendiri! Bahkan Komputer-A maupun Komputer-B tidak akan mengetahuinya, kan?

Jadi Router-D dapat mengirim paket ke Komputer-A jika ia mengirim paket ke Router-C melalui port 1000, tetapi bagaimana Router-D tahu untuk mengirim paket melalui port 1000, dan tidak mengatakan port 1001?

Bagaimana program peer-to-peer seperti Bittorrent dapat mengatasi masalah ini? Satu-satunya solusi yang dapat saya pikirkan adalah untuk Router-D mengirim paket ke Router-C melalui semua port, sehingga diteruskan ke Computer-A, tetapi apakah ada solusi yang lebih baik?

Pacerier
sumber

Jawaban:

9

Kebingungan Anda berasal dari beberapa asumsi yang salah.

Namun yang pasti, satu-satunya perangkat yang mengetahui mekanisme routing ini adalah Router-C itu sendiri! Bahkan Komputer-A maupun Komputer-B tidak akan mengetahuinya, kan?

Apa, mengapa‽ Lalu mengapa router dikonfigurasikan untuk meneruskan port tersebut ke IP tersebut? Anda harus mengatur klien P2P untuk menggunakan port tertentu dan kemudian mengatur router agar sesuai.

tetapi bagaimana Router-D tahu untuk mengirim paket melalui port 1000, dan tidak mengatakan port 1001?

Karena Anda mengonfigurasi klien P2P untuk menggunakan port tertentu (standar atau non-standar untuk protokol itu).

Satu-satunya solusi yang dapat saya pikirkan adalah untuk Router-D mengirim paket ke Router-C melalui semua port, sehingga diteruskan ke Computer-A, tetapi apakah ada solusi yang lebih baik?

Jauh lebih sederhana dari itu. Ketika klien membuat koneksi ke peer, itu menentukan port mana yang ingin digunakan, sehingga peer mengirim data pada port itu.

Hmm, tapi Bittorrent tidak mengubah perilaku router, kan? Karena beberapa mekanisme perutean bisa dinamis seperti yang ditunjukkan dalam superuser.com/a/187190/78897, bagaimana Computer-A dapat mengetahuinya?

Klien tidak secara langsung mempengaruhi router, tetapi router dapat dikonfigurasi / cukup cerdas untuk beradaptasi dengan perilaku klien. Anda dapat mengaktifkan UPnP di router dan klien untuk secara otomatis mengkonfigurasi koneksi dan sebagian besar router memiliki kemampuan inspeksi stateful sebagai bagian dari mekanisme port-forwarding mereka .

Secara bersamaan, apa artinya adalah bahwa suatu koneksi dapat dibuat secara dinamis pada port acak, dan kemudian router dapat melacak apa yang terjadi alih-alih melihat segala sesuatu sebagai koneksi acak dan tidak berarti. Dengan begitu, itu dapat meneruskan koneksi yang diperlukan karena misalnya, itu adalah respons terhadap koneksi lain yang baru saja terjadi .

Masalahnya muncul ketika Anda memiliki beberapa sistem menggunakan program yang sama. Memiliki beberapa sistem yang terhubung ke router yang sama, berbagi IP yang sama dan menggunakan port dinamis dengan cepat menjadi tidak terkelola dan bahkan dengan inspeksi stateful, sulit jika bukan tidak mungkin untuk membuatnya bekerja dengan benar. Dalam hal ini, port statis (default atau lainnya) perlu digunakan.


Jika Anda menggunakan program seperti SmartSniff atau TCPView untuk memantau koneksi Anda, Anda akan melihat bahwa koneksi P2P biasanya memiliki port yang Anda konfigurasikan (atau default untuk klien) sebagai tujuan untuk koneksi yang masuk dan baik default atau custom / port acak untuk sumber, dan sebaliknya untuk koneksi keluar.

Synetech
sumber
Hmm, tapi Bittorrent tidak mengubah perilaku router, kan? Karena beberapa mekanisme perutean bisa dinamis seperti yang ditunjukkan dalam superuser.com/a/187190/78897 , bagaimana Computer-A dapat mengetahuinya?
Pacerier
Penerusan Port. Anda mengaturnya sebelumnya.
UtahJarhead
@Pacerier Jika router dan aplikasi p2p menggunakan UPnP , port forwarding dapat dilakukan secara dinamis. Dalam hal ini, ya Bittorrent tidak mengubah perilaku router.
zero2cx
@ zero2cx, adakah yang bisa melakukan peer-to-peer tanpa mengubah perilaku router?
Pacerier
@ Peracerier, jika Anda ingin memiliki NAT (beberapa sistem berbagi koneksi), maka Anda harus mengkonfigurasi router untuk mengetahui di mana membuat koneksi (well, secara teknis Anda bisa meminta semua orang memuntahkan setiap koneksi ke semua port seperti yang Anda sarankan, tetapi itu akan menjadi yang terbaik, mengerikan). Anda dapat melakukan ini secara statis (mengkonfigurasi IP dan port) atau secara dinamis (UPnP).
Synetech
4

Pertanyaan Anda menyentuh inti Internet dan definisi perutean. Dalam contoh Anda, Router D mengirim data ke Komputer A berdasarkan pada dua premis:

  • Diberitahu untuk mengirim data ke Komputer A.
  • Ini sudah memproses data dari Komputer A.

Skenario Anda tampaknya menganggap opsi pertama - Router D ingin mengirim ke Komputer A. Tapi bagaimana cara sampai di sana? Itu melakukannya melalui penggunaan tabel routing yang dibagi oleh router antara satu sama lain.

Router C secara teratur mengirimkan pembaruan ke semua router yang tahu tentang - termasuk Router D - bahwa ia "mengetahui" 192.168. * "Jaringan (pada kenyataannya - ini tidak akan terjadi karena jaringan itu tidak dialihkan - itu dianggap pribadi. Tetapi abaikan itu.) Jadi, Router D sudah tahu bahwa Router C tahu jaringan itu.

Jadi, ketika data diperuntukkan untuk Komputer A, itu ditangani oleh jaringan terlebih dahulu. Jadi, Router D bertanya, "Saya perlu menemukan jaringan 192.168. *. Apakah saya mengetahuinya? Tidak. Apakah saya mengenal orang lain yang melakukannya? Ya. Router C tidak. Bagaimana saya bisa sampai ke router C? Melalui 2.2 saya. 2.2 antarmuka. "

Router D kemudian mengirimkan data ke Router C. Router C mendapatkannya dan berkata, "Oh, saya punya data dari Router D tapi itu untuk jaringan 192.168. Apakah saya tahu jaringan itu? Ya, melalui jaringan 192.168.1.1 saya" Dan kemudian ke depan itu.

Ada beberapa pekerjaan lain yang harus dilakukan untuk menyelesaikan pengalamatan IP dan MAC, tapi saya membahas perutean, per se, bukan ARP dan jaringan lokal.

Anda akan melihat asumsi pertama Anda - router jarak jauh harus tahu mekanisme perutean - tidak ikut bermain di sini. Router D tidak peduli jika Router C menggunakan EIGRP, RIP, RIPv2, OSPF, atau apa pun. Yang penting hanyalah mendapat pembaruan. (Tentu saja, cara mendapatkan pembaruan penting untuk memastikan keduanya tetap selaras. Tapi sekali lagi, itu masalah yang berbeda.)

Asumsi kedua Anda - bahwa nomor port merupakan faktor dalam perutean - juga salah. Router (umumnya) tidak memerlukan informasi port untuk membuat keputusan routing. (Itu telah sedikit berubah, karena beberapa teknologi jaringan baru dan berlaku terutama untuk firewall dan proksi, tetapi masih asumsi yang lebih luas masih berlaku untuk router "benar".)

Melanjutkan dengan contoh Anda, Router C akan meneruskan data pada port 1000 (per skenario Anda) karena mungkin ada layanan di Komputer A mengharapkan data pada port tertentu. Tetapi hanya tahu yang harus dilakukan karena Router D mengirimnya ke port 1000. Dan router D hanya mengirimkannya ke port itu karena pencetus data mengirimnya ke Router D di port itu.

Saya tidak mengerti bahwa Anda memasukkan bittorrent atau program P2P sebagai cerminan dari pertanyaan yang Anda ajukan. Penjelasan yang sama akan berlaku. Router juga dapat dikonfigurasi dengan port trigger yang menghubungkan perangkat tertentu (atau IP) dengan port tertentu. Sehingga ketika lalu lintas datang di port 1234, router tahu untuk mengirim data ke Device ABCD. Ini biasanya terkait dengan port TCP keluar. yaitu Jika saya mengirim lalu lintas di port 7890, router tahu lalu lintas masuk akan di port 1234 dan mengirimkannya kepada saya.

Tetapi pemicu port tidak terkait dengan keputusan routing (jarak jauh) - sebaliknya hal itu berkaitan dengan tabel MAC / IP internal yang digunakan router untuk LAN.

Perbarui / edit : Untuk menjawab dan menguraikan lebih lanjut setelah komentar Anda. Router D tahu Komputer A hanya dengan alamat IP-nya (192.168.2.2). Tapi Router C tahu Komputer A dengan alamat IP dan alamat MAC-nya. MAC (Kontrol Akses Media) adalah pengidentifikasi 48-bit unik (biasanya ...) yang ditentukan oleh standar internasional. Setiap perangkat yang terhubung ke LAN (berkabel dan nirkabel) seharusnya memiliki alamat MAC yang unik.

Router (Router C) mengaitkan alamat IP dan alamat MAC bersama-sama dalam sebuah tabel (tabel alamat MAC). Jadi ketika lalu lintas masuk ke Router C, dan router menyadari "lokal" -nya, itu melakukan pencarian tabel alamat MAC. Router kemudian benar-benar mengubah informasi pengalamatan frame.

Itu merekonstruksi (menulis ulang) informasi tujuan Layer 2 untuk memiliki alamat MAC tujuan dari Komputer A tetapi menjaga informasi alamat IP (Layer 3) tetap sama.

Jika rute TIDAK tahu alamat MAC. Atau tidak memiliki hubungan IP-MAC di tabelnya, ia melakukan sesuatu yang disebut ARP (address resolution protocol) untuk bertanya "HEY, semua orang di jaringan ini. Apakah Anda memiliki alamat MAC ini?" Atau kadang-kadang - "Semua orang, Apa alamat MAC Anda?"). Perangkat / perangkat yang sesuai merespons dan router membuat tabel IP-MAC-nya.

John
sumber
Jadi Router-D mengirimkan paket ke Router-C melalui port 60000 (pra-konfigurasi), Router-C menerima paket, tetapi bagaimana ia tahu bahwa paket ini akan diteruskan ke Komputer-A?
Pacerier
1
Router D sudah tahu tujuan akhir - Komputer A. Ini (Router D) tahu Komputer A hanya dengan alamat IP-nya: 192.168.2.2. Tapi, Router C tahu Komputer A dengan dua metode: alamat IP (192.168.2.2) dan sesuatu yang disebut alamat MAC-nya. Saya akan memperbarui jawabannya dengan info lebih lanjut.
John
2

Port Triggering. Bagaimana server web mengirim halaman web kepada Anda setelah Anda memintanya? Karena Anda sudah memintanya. Saat Anda memintanya, router tahu untuk mengharapkan balasan dan ketika mendapatkannya, meneruskannya ke PC yang sesuai. Beberapa program ditulis untuk memicu pembukaan untuk mengantisipasi sinyal dari PC tertentu, bahkan jika seseorang tidak benar-benar dalam perjalanan.

Beberapa model memiliki server pusat yang digunakan untuk komunikasi dasar. Sebagai contoh:

  • Client1 masuk dengan Server untuk komunikasi 2 arah.
  • Client2 masuk untuk hal yang sama.

Server sekarang tahu semua file yang dimiliki Client1 dan Client2.

  • Client2 mengatakan "Saya ingin file X dari Client1" ke Server.
  • Server memberi tahu Client1 "Client2 ingin file X."
  • Klien 1 mengirim sepotong data sampah ke IP publik Client2, menetapkan Port Triggering sehingga membuka port untuk balasan dari Client2.
  • Client2 mengirimkan sinyal awalnya ke IP publik Client1.

Client1 hanya membodohi router untuk membuka port itu untuk Client2.

Dalam beberapa kasus, seperti BitTorrent atau Napster asli (iirc), Anda harus meneruskan porta pada router Anda agar dapat bekerja secara optimal.

Sejauh klien lain mengetahui port mana yang akan disambungkan pada awalnya, itu karena klien Anda memberi tahu swarm atau server port mana yang Anda gunakan. BitTorrent sering menggunakan pelacak dan yang melacak port mana yang digunakan oleh klien mana.

Utah Jarhead
sumber
Sejauh mereka mengetahui port mana yang akan digunakan ... Anda mengonfigurasi klien untuk mendengarkan pada port tertentu. Klien Anda memberitahu segerombolan (seperti dalam kasus BitTorrent) port apa yang Anda gunakan sehingga klien lain tahu apa yang harus disambungkan. PC Anda memberi tahu mereka.
UtahJarhead
Saya pikir Anda menjawab sementara adendum pertama saya sedang ditulis. Benar?
UtahJarhead
tetapi bagaimana PC mengetahui mekanisme routing ketika router yang melakukannya? Beberapa mekanisme bisa jadi dinamis seperti yang ditunjukkan dalam superuser.com/a/187190/78897
Pacerier
Tidak, itu tidak perlu tahu peruteannya. Agar sebagian besar klien P2P berfungsi dengan baik, Anda perlu mengonfigurasi Port Forwarding dengan benar di router Anda. Tanpanya, Anda hanya dapat berkomunikasi dengan klien lain yang pertama kali Anda ajak bicara. Mereka tidak dapat memulai pembicaraan. Saya secara singkat menyinggung ini dalam jawaban saya (paragraf kedua hingga terakhir)
Utah James pada
Tetapi penerusan port hanya mungkin jika administrator telah mengkonfigurasinya sebelumnya .. Apakah Anda bermaksud mengatakan bahwa Bittorrent mengkonfigurasi ulang router kami?
Pacerier