Первое:
Как осуществляется связь?
1) вы отправляете запрос со своего компьютера к примеру с IP 1.2.3.4, на http://ya.ru.
2) "запрос" - это пакет с информацией, там есть IP адрес получателя и его порт, в данном случае 213.180.204.3:80. Кроме того, там есть ваш IP и ваш порт, к примеру 1.2.3.4:12345. Порт - случайное число 1024..65534. Вы ждёте ответ на этот порт (12345).
3) сервер ya.ru отправляет вам ответ,
4) и тут начинается обмен информацией.
Это протокол TCP
Второе:
Протокол UDP отличается от TCP тем, что в нём не требуется ответов - вы просто разбрасываете кучу пакетов, в надежде на то, что какие-то из них дойдут до адресата. Дойдут или нет - нам не известно.
Третье:
В сети имеется множество транзитных узлов на пути наших пакетов, часто первый, ближайший к нам транзитный узел представляет собой шлюз, т.е. переходное звено из одной сети в другую. Например из сети 10.хх.хх.хх в Глобальную сеть.
Шлюз имеет 2 адреса - из вашей сети он виден как 10.1.1.1, а из Интернетов 1.2.3.4. Ваш-же адрес получен от шлюза, и равен 10.20.30.40
Когда вы отправляете свой пакет на яндекс, в действительности он отправляется не на яндекс, а на шлюз (10.1.1.1:80), а уже шлюз отправляет его на яндекс. Причём шлюз меняет заголовок пакета таким образом, что-бы ответ от яндекса пришёл ему а не вам (адресов начинающихся на 10 в Интернете не существует). При этом шлюз запоминает номер порта, который вы слушаете (12345), и его не переделывает.
Когда от яндекса приходит ответ, он приходит на 1.2.3.4:12345, и шлюз, по 12345 понимает, что данный пакет предназначен не кому-то, а лично вам. И переправляет заголовок пакета так, как будто этот пакет должен идти на 10.20.30.40:12345.
Получается так, что мы можем установить связь с яндексом, а яндекс с нами не может - адреса 10.20.30.40 в Интернете нет, а если отправить пакет на шлюз, то шлюз не узнает, кому из его сетки этот пакет передать.
Можно настроить шлюз таким образом, что-бы он ВСЕ пакеты идущие на порт 12345 переправлял именно на конкретный ваш компьютер 10.20.30.40, это называется проброской порта. Но так провайдеры не делают (ибо портов немного, в отличие от клиентов. Им проще дать клиенту (не бесплатно разумеется) свой личный IP, потому как провайдеры покупапют эти IP оптом, пулами по 65536 штук).
Вся эта CENSORED называется NATом
Четвёртое:
В итоге, если вы за натом, у вас нет денег на свой личный IP, и админ шлюза не желает пробрасывать вам какой-нибудь порт, то установить соединение с вами невозможно. Можно только лишь ждать, пока ВЫ установите с кем-нибудь соединение. Это называется "серый IP".
Пятое:
Есть одна лазейка:
1) вы устанавливаете соединение с яндексом, и вам шлюз открывает (временно) порт 12345.
2) я тоже устанавливаю соединение с яндексом, и мне шлюз открывает порт 54321
3) и тут ВНЕЗАПНО я отправляю пакеты не яндексу, а вам, на порт 12345 вашему шлюзу.
4) шлюз не врубится в такую подставу, и отфорвардит пакеты вам
5) ну а вы можете слать пакеты мне, на порт 54321, моему шлюзу
Однако, УСТАНОВИТЬ СОЕДИНЕНИЕ будет невозможно, именно потому и применяется простое разбрасывание пакетов, без всяких подтверждений и т.д. По протоколу UDP.
Эта подстава и называется "Hamachi". Только нам с вами не яндекс нужен, а какой-нибудь другой сервер, что-бы узнать IP:port друг-друга.
Как-то так...
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)