2012-01-24 14 views
6

Kiedyś myślałem, że moje zrozumienie protokołów TCP i UDP, choć ograniczone, jest poprawne. Chociaż ostatnio, gdy zdałem sobie sprawę, że rówieśnicy udostępniający wspólny torrent mogą łączyć się ze sobą za pośrednictwem protokołów TCP lub UDP bez faktycznego zapotrzebowania na przekazywanie portów, jestem zdezorientowany. W jaki sposób router wie, która maszyna w sieci lokalnej przekazuje pakiety? Każda pomoc w oczyszczeniu tego zostanie doceniona. Schematy protokołów torrentowych i artykuły w Internecie są znacznie uproszczone, a zatem nie zawierają żadnych informacji, które mogłyby pomóc.Potokowe połączenie peer-to-peer

+0

FYI: 90% większości routerów/zapór blokuje UDP! –

+1

A gdzie dostaniesz tę statystykę? Nigdy nie miałem problemu z aplikacjami UDP (w domu na wielu SOHO, w kawiarniach lub w biurach), czy to w tftp, grach czy czymś niestandardowym. –

+0

Większość routerów domyślnie blokuje UDP * broadcast *. –

Odpowiedz

6

Router (działający NAT) śledzi wszystkie wychodzące pakiety, a następnie zezwala na przychodzące pakiety, które są odpowiedziami na te wychodzące pakiety.

Jeśli więc nawiążesz wychodzące połączenie TCP z witryną google.com:80, to pozwoli to na powrót pakietów (w odpowiedzi) z domeny google.com:80. Jeśli dwa hosty wewnętrzne nawiązują połączenie z tym samym portem, można je rozróżnić, ponieważ lokalny port jest inny, na przykład:

1) Host A nawiązuje połączenie z Google, a router używa własnego lokalnego portu 10001 dla TCP połączenie

2) Host B czyni podobną połączenie i router wykorzystuje swój własny lokalny 10002 portu dla połączenia TCP

Jeśli pakiet przychodzi z google.com:80 i jego skierowana do 10001 port na WAN IP routera, router będzie wiedział, aby wysłać go do Hosta A. Jeśli adresowany jest do portu 10002, router wie, aby wysłać go do Hosta B.

Jeśli masz dwa hosty peer-to-peer za routerami (dwa NAT), nie ma możliwości ustanowienia połączenia z wyjątkiem tego, że jeśli jest coś, co przesyła informacje o innych IP (tj. serwer, którego mogą używać do wymiany informacji) mogą spróbować odgadnąć, jaki port router wybierze jako port lokalny, a następnie rozpocząć przesyłanie sobie nawzajem danych na tym porcie, do routerów WAN IP. Ponieważ oba routery widzą dane wychodzące, ustawiają regułę zezwalającą na wprowadzanie danych. Jeśli porty zostaną odgadnięte poprawnie, pakiety z każdej strony mogą się przedostać, ponieważ oba routery mają skonfigurowaną regułę. Nazywa się to dziurkaniem otworów w protokole UDP/TCP.

http://en.wikipedia.org/wiki/UDP_hole_punching

wierzę Skype przykład APP, która korzysta z UDP i czyni dziurkowanie.

+0

Dziękuję za wnikliwą odpowiedź! Wierzę, że teraz wystarczająco rozumiem ten temat, aby pozwolić mojemu umysłowi odpocząć ... na razie. Przy okazji, Skype to sprytna bestia. Myślę, że może wykryć, kiedy rozmawiasz z osobą z lokalnej sieci (mógłbym kiedyś porozmawiać z moją siostrą, gdy router połączył się z Internetem po ponownym uruchomieniu) – Neob91

1

Ściśle mówiąc, ponieważ nie zakwalifikowaliśmy terminu router z "NAT", odpowiedź brzmi, że router używa ARP do określenia adresu MAC hosta docelowego, a następnie wysyła ramkę ethernetową z tym adresem MAC jako adres docelowy.

Ale myślę, że nie to miałeś na myśli.

Masz na myśli, w jaki sposób router NATting wie, gdzie przesyłać dalej pakiety przychodzące?

Odpowiedź jest taka, że ​​router przechowuje listę aktywnych "połączeń", aby umożliwić jej tłumaczenie adresu. Używa zewnętrznego numeru portu do odwzorowania na wewnętrzny adres hosta i numer portu. W przypadku TCP pojęcie "połączenia" jest po prostu tym, czy istnieje połączenie TCP (choć zwykle z czasem oczekiwania na zatrzymanie wycieku). W przypadku UDP jest to trudniejsze, ponieważ nie ma połączenia UDP jako takiego, więc zwykle jest to śledzenie go samego limitu czasu.