Eşler arası internet üzerinden nasıl çalışır?


15

Anladığım kadarıyla, yönlendirici tarafından kullanılan yönlendirme mekanizmasını bilmedikçe, yerel bir ağdaki bir bilgisayara ağ dışından bir paket göndermenin bir yolu yoktur .

Şöyle görünen bir kurulumumuz olduğunu varsayarsak:

  1. Bilgisayar-A, IP 192.168.1.2 (varsayılan ağ geçidi 192.168.1.1)

  2. Bilgisayar-B, IP 192.168.1.3 (varsayılan ağ geçidi 192.168.1.1)

  3. Yönlendirici-C, IP 192.168.1.1 (harici IP 1.1.1.1)

  4. Yönlendirici-D (harici IP 2.2.2.2)

Bilgisayar-A, Bilgisayar-B ve Yönlendirici-C aynı yerel ağa aittir. Router-D, Computer-A'ya veri göndermek istiyor, ancak Router-C'den geçmeden bunu yapamaz.

Şimdi hedef bağlantı noktası 1000 ise Router-C paketleri Bilgisayar-A'ya iletir ve hedef bağlantı noktası 2000 ise paketleri Bilgisayar-B'ye iletir. Ama elbette, bu yönlendirme mekanizmasını bilen tek cihaz Router-C'nin kendisidir! Bilgisayar-A veya Bilgisayar-B bile bunu bilemez, değil mi?

Bu nedenle, Router-D, 1000 numaralı bağlantı noktası üzerinden Router-C'ye bir paket gönderirse Computer-A'ya bir paket gönderebilir, ancak Router-D, bağlantı noktası 1001'den değil, 1000 numaralı bağlantı noktasından paket göndermeyi nasıl bilebilir?

Bittorrent gibi eşler arası programlar bu sorunu nasıl aşar? Düşünebildiğim tek çözüm, Router-D'nin paketi tüm bağlantı noktalarından Router-C'ye göndermesi, böylece Computer-A'ya iletilmesidir, ancak daha iyi bir çözüm var mı?

Yanıtlar:


9

Karışıklıklarınız bazı yanlış varsayımlardan kaynaklanıyor.

Ama elbette, bu yönlendirme mekanizmasını bilen tek cihaz Router-C'nin kendisidir! Bilgisayar-A veya Bilgisayar-B bile bunu bilemez, değil mi?

Ne, neden‽ Peki yönlendirici neden bu bağlantı noktalarını bu IP'lere yönlendirecek şekilde yapılandırıldı? P2P istemcisini belirli bir bağlantı noktasını kullanacak şekilde ayarlamanız ve ardından yönlendiriciyi karşılık gelecek şekilde ayarlamanız gerekir.

ancak Router-D, 1000 numaralı bağlantı noktasından paket göndermeyi nasıl bilir ve 1001 numaralı bağlantı noktasını söylemez?

Çünkü P2P istemcisini belirli bir bağlantı noktası kullanacak şekilde yapılandırırsınız (bu protokol için standart veya standart olmayan).

Düşünebildiğim tek çözüm, Router-D'nin paketi tüm bağlantı noktalarından Router-C'ye göndermesi, böylece Computer-A'ya iletilmesidir, ancak daha iyi bir çözüm var mı?

Bundan çok daha basit. İstemci bir eşle bağlantı kurduğunda, kullanmak istediği bağlantı noktasını belirtir, böylece eş bu bağlantı noktasındaki verileri gönderir.

Hmm, ama Bittorrent yönlendiricinin davranışını değiştirmiyor değil mi? Bazı yönlendirme mekanizmaları superuser.com/a/187190/78897 dosyasında gösterildiği gibi dinamik olabileceğinden, Bilgisayar-A bunu nasıl bilebilir?

İstemci yönlendiriciyi doğrudan etkilemez, ancak yönlendirici istemcinin davranışına uyum sağlayacak şekilde yapılandırılabilir / akıllı olabilir. Yönlendiricideki ve istemcideki UPnP'yi bağlantıyı otomatik olarak yapılandırmak için etkinleştirebilirsiniz ve çoğu yönlendirici bağlantı noktası yönlendirme mekanizmasının bir parçası olarak durum bilgisi olan denetim yeteneklerine sahiptir .

Birlikte ele alacağınız şey, bir bağlantının rastgele bir bağlantı noktasında dinamik olarak yapılabileceği ve ardından yönlendiricinin her şeyi rastgele, anlamsız bağlantılar olarak görmek yerine neler olduğunu takip edebilmesidir. Bu şekilde, bir bağlantı gerektiği şekilde iletilebilir, çünkü örneğin, bu gerçekleşen diğer bağlantıya bir yanıttır .

Aynı programı kullanan birden fazla sisteminiz olduğunda sorun ortaya çıkar. Aynı yönlendiriciye bağlı birden fazla sisteme sahip olmak, aynı IP'yi paylaşmak ve dinamik bağlantı noktalarını kullanmak hızlı bir şekilde yönetilemez hale gelir ve durumsal denetimle bile, düzgün çalışmasını sağlamak imkansız değilse bile zordur. Bu durumda, statik bağlantı noktalarının (varsayılan veya başka türlü) kullanılması gerekir.


Bağlantılarınızı izlemek için SmartSniff veya TCPView gibi bir program kullanırsanız , P2P bağlantılarının genellikle gelen bağlantıların hedefi olarak yapılandırdığınız bağlantı noktasına (veya istemci için varsayılana) ve varsayılan veya özel / kaynak için rastgele bağlantı noktası ve giden bağlantılar için tersi.


Hmm, ama Bittorrent yönlendiricinin davranışını değiştirmiyor değil mi? Bazı yönlendirme mekanizmaları superuser.com/a/187190/78897 dosyasında gösterildiği gibi dinamik olabileceğinden , Bilgisayar-A bunu nasıl bilebilir?
Pacerier

Port Yönlendirme. Önceden ayarladın.
UtahJarhead

@Pacerier Hem yönlendirici hem de p2p uygulaması UPnP kullanıyorsa , bağlantı noktası iletme dinamik olarak yapılabilir. Bu durumda, evet Bittorrent yapar yönlendiricinin davranışını değiştirmek.
zero2cx

@ zero2cx, yönlendiricinin davranışını değiştirmeden eşler arası yapmak için yine de var mı?
Pacerier

@Pacerier, NAT (bir bağlantıyı paylaşan birden fazla sistem) istiyorsanız , bir şekilde yönlendiriciyi nerede bağlantı yapacağını bilecek şekilde yapılandırmalısınız (iyi, teknik olarak herkesin önerdiğiniz gibi tüm bağlantı noktalarına her bağlantıyı yapmasını sağlayabilirsiniz , ancak bu en iyi, korkunç olurdu). Bunu statik olarak (IP'leri ve bağlantı noktalarını yapılandırın) veya dinamik olarak (UPnP) yapabilirsiniz.
Synetech

4

Sorunuz İnternet'in kalbine ve yönlendirme tanımına değiniyor. Örneğin, Yönlendirici D, verileri iki binaya göre A Bilgisayarına gönderir:

  • A Bilgisayarına veri göndermesi söylendi.
  • Zaten A Bilgisayarındaki veriler işleniyor.

Senaryonuz ilk seçeneği kabul ediyor gibi görünüyor - Yönlendirici D Bilgisayar A'ya göndermek istiyor. Ama oraya nasıl ulaşıyor? Bunu, yönlendiriciler tarafından birbirleri arasında paylaşılan yönlendirme tablolarını kullanarak yapar .

Yönlendirici C, Yönlendirici D de dahil olmak üzere "192.168. *" Ağını "bildiğini" bilen tüm yönlendiricilere düzenli olarak güncellemeler gönderir (gerçekte - bu, ağın yönlendirilmediği için olmaz - özel olarak kabul edilir. Bu nedenle, Yönlendirici D, Yönlendirici C'nin o ağı bildiğini zaten biliyor.

Yani A Bilgisayarı için veri hedeflendiğinde, önce ağ tarafından ele alınır. Router D, "192.168. * Ağını bulmam gerekiyor. Biliyor muyum? Hayır. Bunu yapan birini tanıyor muyum? Evet. Router C yapar. C yönlendiricisine nasıl ulaşabilirim? 2.2. 2.2 arayüzü. "

Yönlendirici D daha sonra verileri Yönlendirici C'ye gönderir. Yönlendirici C bunu alır ve "Oh, Yönlendirici D'den veri var ama 192.168 ağ için. Bu ağı tanıyor muyum? Evet, 192.168.1.1 ağım üzerinden" iletir.

IP ve MAC adreslemesini çözmek için yapılması gereken başka işler var, ancak ARP ve yerel ağları değil, yönlendirmeyi ele alıyorum.

İlk varsayımınızı göreceksiniz - uzak yönlendirici yönlendirme mekanizmasını bilmelidir - burada devreye girmez. Yönlendirici C EIGRP, RIP, RIPv2, OSPF veya başka bir yöntem kullanıyorsa Yönlendirici D umursamaz. Tek umurunda bir güncelleme var. (Elbette , ikisinin senkronize kalmasını sağlamak için nasıl bir güncelleme aldığı önemlidir. Ama yine, bu farklı bir konudur.)

İkinci varsayımınız - bu bağlantı noktası numarası, yönlendirmede bir faktördür - yanlıştır. Yönlendiricilerin (genellikle) yönlendirme kararları almak için bağlantı noktası bilgilerine ihtiyacı yoktur. (Bu, bazı yeni ağ teknolojileri nedeniyle biraz değişti ve esas olarak güvenlik duvarları ve proxy'ler için geçerlidir, ancak yine de daha geniş varsayım hala "gerçek" yönlendiriciler için geçerlidir.)

Örneğinize devam ederseniz, Yönlendirici C, bağlantı noktası 1000'deki verileri (senaryonuza göre) iletecektir, çünkü A Bilgisayarında belirli bir bağlantı noktasında veri bekleyen bir hizmet mümkündür. Ancak bunu yapmayı bilir, çünkü Yönlendirici D 1000 numaralı bağlantı noktasına gönderir. Ve yönlendirici D yalnızca bu bağlantı noktasına gönderir, çünkü verilerin kaynağı bu bağlantı noktasındaki Yönlendirici D'ye gönderir.

Bittorrent veya P2P programlarını, sorduğunuz soruyu yansıtan olarak eklemenizi anlamıyorum. Aynı açıklamalar geçerlidir. Yönlendiriciler ayrıca belirli bir aygıtı (veya IP) belirli bir bağlantı noktasıyla ilişkilendiren bağlantı noktası tetikleme ile yapılandırılabilir. Öyle ki, trafik 1234 numaralı bağlantı noktasına geldiğinde, yönlendiriciler Aygıt ABCD'sine veri göndermeyi bilir. Bu genellikle giden bir TCP bağlantı noktasıyla ilişkilendirilir. yani 7890 numaralı bağlantı noktasına trafik gönderirsem, yönlendirici gelen trafiğin 1234 numaralı bağlantı noktasında olacağını bilir ve bana gönderir.

Ancak bağlantı noktası tetikleme (uzak) yönlendirme kararlarıyla ilişkili değildir - bunun yerine yönlendiricinin LAN için kullandığı dahili MAC / IP tablosu ile ilgilidir.

Güncelle / düzenle : Yorumunuzdan sonra daha fazla cevap vermek ve detaylandırmak için. D Yönlendiricisi A Bilgisayarını yalnızca IP adresi (192.168.2.2) ile tanır. Ancak Yönlendirici C Bilgisayar A'yı IP adresi ve MAC adresi ile tanır. MAC (Ortam Erişim Denetimi), uluslararası standart tarafından tanımlanan benzersiz (genellikle ...) 48 bitlik bir tanımlayıcıdır. Bir LAN'a (kablolu ve kablosuz) bağlı her cihazın benzersiz bir MAC adresine sahip olması gerekir.

Yönlendirici (Yönlendirici C) IP adresini ve MAC adresini bir tabloda (MAC adres tablosu) birlikte ilişkilendirir. Böylece, Yönlendirici C'ye trafik geldiğinde ve yönlendirici "yerel" değerini gerçekleştirdiğinde, bir MAC adres tablosu araması yapar. Ardından yönlendirici, çerçeve adres bilgilerini tam anlamıyla değiştirir.

A Bilgisayarının hedef MAC adresine sahip olması için Katman 2 hedef bilgilerini yeniden yapılandırır (yeniden yazar), ancak IP adresi bilgilerinin (Katman 3) aynı kalmasını sağlar.

Rota MAC adresini bilmiyorsa. Veya tablosunda bir IP-MAC ilişkisi yok, "HEY, bu ağdaki herkes. Bu MAC adresiniz var mı?" Veya bazen - "Herkes, MAC adresiniz nedir?"). Uygun aygıt / aygıtlar yanıt verir ve yönlendirici IP-MAC tablosunu oluşturur.


Router-D, 60000 numaralı bağlantı noktası (önceden yapılandırılmış) aracılığıyla Router-C'ye bir paket gönderir, Router-C paketi alır, ancak bu paketin Bilgisayar-A'ya iletileceğini nasıl bilebilir?
Pacerier

1
Yönlendirici D zaten nihai hedefi biliyor - Bilgisayar A. (Yönlendirici D) Bilgisayar A'yı sadece IP adresi ile tanıyor: 192.168.2.2. Ancak, Yönlendirici C Bilgisayar A'yı iki yöntemle bilir: IP adresi (192.168.2.2) ve MAC adresi adı verilen bir şey. Cevabı daha fazla bilgi ile güncelleyeceğim.
John

2

Port Tetikleme. Bir web sunucusu bir web sayfasını istedikten sonra size nasıl gönderir? Çünkü siz istediniz. Talep ettiğinizde, yönlendirici bir cevap beklemeyi bilir ve cevap verdiğinde uygun PC'ye iletir. Bazı programlar, gerçekten yolda olmasa bile, belirli bir bilgisayardan gelen bir sinyal beklentisiyle bir açılımı tetiklemek için yazılmıştır.

Bazı modellerde temel iletişim için kullanılan merkezi bir sunucu bulunur. Örneğin:

  • Client1, 2 yönlü iletişim için Sunucu ile oturum açar.
  • Client2 aynı şey için oturum açar.

Sunucu artık Client1 ve Client2'nin sahip olduğu tüm dosyaları biliyor.

  • Client2, Server'a "X dosyasını Client1'den istiyorum" diyor.
  • Sunucu, Client1'e "Client2 X dosyası istiyor."
  • İstemci 1, İstemci2'nin genel IP'sine bir çöp parçası gönderir ve Bağlantı Noktası Tetikleyicisini kapatır, böylece İstemci2'den gelen bir yanıt için bağlantı noktasını açar.
  • İstemci2 ilk sinyalini İstemci1'in genel IP'sine gönderir.

İstemci1, yönlendiriciyi İstemci2 için bu bağlantı noktasını açmak üzere kandırdı.

BitTorrent veya orijinal Napster (iirc) gibi bazı durumlarda, en iyi şekilde çalışması için yönlendiricinizdeki bir bağlantı noktasını iletmeniz gerekir.

Başlangıçta hangi bağlantı noktasına bağlanacağını bilen diğer istemciler, müşterinizin hangi bağlantı noktasını kullandığınızı belirtmesi nedeniyle olur. BitTorrent sıklıkla bir izleyici kullanır ve hangi portların hangi istemciler tarafından kullanıldığını takip eder.


Hangi portları kullanacaklarını bildikleri sürece ... istemciyi belirli bir portu dinleyecek şekilde yapılandırırsınız. Müşteriniz sürüye (BitTorrent örneğinde olduğu gibi) hangi bağlantı noktasını kullandığınızı söyler, böylece diğer istemciler ne bağlanmak gerektiğini bilir. Bilgisayarınız onlara söyledi.
UtahJarhead

Sanırım ilk zeyilnamem yazılırken cevap verdiniz. Doğru?
UtahJarhead

ancak PC bunu yapan yönlendirici olduğunda yönlendirme mekanizmasını nasıl bilebilir? Bazı mekanizmalar superuser.com/a/187190/78897
Pacerier

Hayır, yönlendirmeyi bilmek gerekmez. Çoğu P2P istemcisinin düzgün çalışması için, Yönlendiricinizde Bağlantı Noktası Yönlendirme'nin düzgün yapılandırılmış olması gerekir. Bu olmadan, yalnızca ilk konuştuğunuz diğer müşterilerle iletişim kurabilirsiniz. Konuşmayı başlatamazlar.
Cevabımda

Ancak bağlantı noktası iletme yalnızca yönetici önceden yapılandırılmışsa mümkündür .. Bittorrent'in yönlendiricilerimizi yeniden yapılandırdığını mı söylemek istersiniz ?
Pacerier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.