Одноранговое торрент-соединение - PullRequest
7 голосов
/ 25 января 2012

Раньше я думал, что мое понимание протоколов TCP и UDP, хотя и ограниченное, является правильным.Хотя недавно, когда я понял, что одноранговые узлы, совместно использующие общий торрент, могут соединяться друг с другом по протоколам TCP или UDP без реальной переадресации портов, я запутался.Как маршрутизатор узнает, на какую машину в локальной сети направлять пакеты?Любая помощь в прояснении этого будет оценена.Схемы торрент-протокола и статьи в Интернете значительно упрощены и, следовательно, не содержат никакой информации, которая могла бы помочь.

Ответы [ 2 ]

7 голосов
/ 25 января 2012

Маршрутизатор (работает NAT) отслеживает все исходящие пакеты, а затем разрешает входящие пакеты, которые являются ответами на эти исходящие пакеты.

Так что, если вы создадите исходящее TCP-соединение с google.com:80, это позволитпакеты обратно (в ответ) от google.com:80.Если два внутренних хоста устанавливают соединение с одним и тем же портом, они могут различать их, поскольку локальный порт отличается, например:

1) Хост A устанавливает соединение с Google, а маршрутизатор использует свой собственный локальный порт 10001 дляTCP-соединение

2) Хост B устанавливает аналогичное соединение, и маршрутизатор использует собственный локальный порт 10002 для TCP-соединения

Если пакет приходит с google.com:80 и его адресдля порта 10001 на IP-адресе WAN маршрутизатора знает, что маршрутизатор знает, чтобы отправить его на хост A. Если он адресован для порта 10002, маршрутизатор знает, чтобы отправить его на хост B.

Если у вас есть два одноранговых хостаза маршрутизаторами (два NAT) тогда нет никакого способа установить соединение, за исключением того, что если есть что-то для передачи информации о IP-адресах друг друга (то есть сервера, который они оба могут использовать для обмена информацией), они могут попытаться угадать, какой порт будет маршрутизаторвыберите в качестве локального порта, а затем начните отправлять друг другу данные по этому порту на маршрутизаторы WAN IP.Поскольку оба маршрутизатора видят, что данные выходят из строя, они устанавливают правило, разрешающее ввод данных.Если порты угаданы правильно, пакеты с каждой стороны могут пройти, потому что оба маршрутизатора имеют настроенное правило.Это называется UDP / TCP Hole Punching.

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

Я считаю, что Skype является примером приложения, которое использует UDP и выполняет дырокол.

1 голос
/ 25 января 2012

Строго говоря, поскольку вы не указали свой термин «маршрутизатор» на «NAT», то ответ заключается в том, что маршрутизатор использует ARP для определения MAC-адреса целевого хоста, а затем отправляет кадр Ethernet с этим MAC-адресом в качестве целевой адрес.

Но я думаю, что это не то, что вы имели в виду.

Вы имеете в виду, как NAT-маршрутизатор узнает, куда пересылать входящие пакеты?

Ответ заключается в том, что маршрутизатор поддерживает список активных «соединений», чтобы он мог выполнять преобразование адресов. Он использует внешний номер порта для сопоставления с внутренним адресом хоста и номером порта. В случае TCP концепция «соединения» заключается просто в том, есть ли соединение TCP (хотя обычно с таймаутом для остановки утечки). В случае UDP это сложнее, потому что нет UDP-соединения само по себе , поэтому обычно это отслеживание только по таймауту.

...