UDP Hole Punching

Тема в разделе "WASM.NETWORKS", создана пользователем _DEN_, 15 мар 2010.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Если я все правильно понял, то работает это так:

    A и B хотят общаться p2p. A отправляет пакет на сервер S, B отправляет пакет на S. Remote endpoint (ip:port), который сервер увидит в пакете от A (то есть ip:port NAT-овского сервера A, с которого ушел пакет) сервер подсовывает в качестве отправителя, когда отвечает компьютеру B. Тоже самое делается для ответа компьютеру A. Далее A и B общаются напрямую.

    Все так, или я что-то упустил? У меня есть два вывода (поправьте, если я ошибаюсь):

    1. Средствами UDP дырку не просверлить, т.к. нужно хачить пакеты. Получается, на сервере нужно юзать raw sockets?
    2. Клиенты ничего не знают про сверление дырок, знают только что сначала надо отправить запрос и ждать ответа. Сделовательно они могут юзать любые сетевые библиотеки.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Нет, так не выйдет. Cервер передаёт клиентам информацию и далее они работают напрямую. Возможно это далеко не всегда, а именно когда Cone NAT или Address-Restricted cone NAT. http://aoz.com.ua/2009/01/26/nat-types/
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Я конечно извиняюсь, но по-моему именно это я и написал в первом посте, просто более подробно.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    По пункту 1, я понял что подразумевается подмена адреса и порта. Такого нет, как и не нужны сырые сокеты, по-этому по-моему другое.
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Booster

    Если не делать подмену адреса и порта, то каким образом будет идти p2p? NAT ведь не пустит пакеты, пришедшие от левого отправителя?
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Они просто каким-либо образом передаются клиентам в юзер протоколе, а те уже коннектятся друг к другу. Подмена в пакете ничего не даёт и это ахтунг.
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    И да, протокол подразумевает поддержку этого со стороны клиентов, иначе никак.
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Дык не могут они коннектиться друг к другу без хаков - NAT же такие прямые соединения не пустит.
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    >Дык не могут они коннектиться друг к другу без хаков - NAT же такие прямые соединения не пустит.
    Как это не могут? На сервер уже пришли внешние адреса клиентов, по ним клиенты и коннектятся друг к другу. Но опять таки, это далеко не всегда возможно, зависит от типа ната. Если нат под каждое соединение заводит отдельный адрес, то обломс. Почитай про типы натов, по ссылке которую я дал, должно проянить.
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    UDP без соединения, по-этому проходят.
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    I WIN. Заработало, вопрос снят :)