Рассказывая про IP-адреса, я писал, что невозможно установить прямое соединение между двумя серыми IP-адресами, так как ни к одному из них нельзя обратиться напрямую. Теперь мне приходится признать, что я был неправ - существует малораспространенный трюк под названием UDP hole punching, позволяющий соединить два компьютера с серыми адресами. Конечно, без посредника не обойтись, но этот посредник нужен лишь на стадии установки соединения, дальше данные будут идти исключительно напрямую.
Сразу хочу предупредить - эта техника работает не всегда - если один из адресов находится за так называемым "симметричным NAT" или же за жестко настроенным прокси-сервером, то подобные действия будут пресечены. Но очень часто она может сработать.
Эта статья будет исключительно теоретической, если же вам нужны конкретные примеры использования UDP hole punching, то далеко идти не нужно - эту технологию использует Skype, сервисы типа Hamachi и TeamView, а также механизм туннелирования IPv6 трафика через IPv4 сети под названием Teredo. Обо всем этом я еще буду писать (и, соответственно, научу, как подобным способом повысить скорость раздачи в торрентах), но пока нужно привести теоретические обоснования...
Сразу хочу предупредить - эта техника работает не всегда - если один из адресов находится за так называемым "симметричным NAT" или же за жестко настроенным прокси-сервером, то подобные действия будут пресечены. Но очень часто она может сработать.
Эта статья будет исключительно теоретической, если же вам нужны конкретные примеры использования UDP hole punching, то далеко идти не нужно - эту технологию использует Skype, сервисы типа Hamachi и TeamView, а также механизм туннелирования IPv6 трафика через IPv4 сети под названием Teredo. Обо всем этом я еще буду писать (и, соответственно, научу, как подобным способом повысить скорость раздачи в торрентах), но пока нужно привести теоретические обоснования...
Проблема
Проблема заключается в том, что к серому IP адресу невозможно просто так отправить запрос - он принадлежит зарезервированному диапазону типа 192.168.*.*, и запрос на такой адрес не пройдет ближайший маршрутизатор или фаервол. Допустим теперь у нас есть пользователь A с подобным адресом, и он выходит в интернет через сетевое устройство N c реальным адресом. Что будет, если мы отправим запрос на устройство N? А ничего хорошего не будет - этот запрос до пользователя А не дойдет, если, конечно, на устройстве N не настроена "переброска портов" (подобное можно проделать, если сетевое устройство находится в вашем распоряжении, но мы сейчас рассматриваем более сложный случай). Read more: Sander.su
0 comments:
Post a Comment