Многие, кто работают с интернет-сокетами в любой сфере IT, задаются вопросом о
пробросе портов. Связано это с тем, что практически во всех домашних/общественных/корпоративных роутерах реализован механизм
NAT, который перекрывает прямой доступ к устройствам в этих подсетях извне, общаясь с внешним интернетом от их имени.
У NAT есть киллер-фича — он представляет собой идеальный
фаервол: атаки извне не могут использовать порты локальных устройств напрямую, следовательно, это решает проблему
атак на сетевую уязвимость ОС.
Но, это доставляет и неудобства, например, если ты захочешь подключиться или хотя бы увидеть устройство
за NAT в благих целях, то ты чисто теоретически не сможешь это сделать —
у него относительно тебя нет IP-адреса.
Разнообразные сервисы работают на серверах, т. е. имеют некую ноду, которая имеет белый адрес в интернете (находится не за NAT). Все пользователи же подключаются к этому единому серверу. В таком случае проблема «невидимости» пользователей отпадает. Однако чисто серверное взаимодействие ограничивает скорость участников, так ещё и не отказоустойчиво. Если сервер упадёт, то все клиенты отправятся за ним (считаем, что это одноклеточный сервис не на всяких там kubernetes).
Как вы уже могли были догадаться, даже в реалиях, когда практически все устройства находятся за NATами,
P2P реален. Когда вы являетесь участником bittorrent-раздачи, трансфер больших данных осуществляется напрямую. Как это работает? Поиск ответа на этот вопрос завёл меня в глубокие дебри, разгребая которые я написал оверлейную
p2p-сеть, где
трекерами являются сами её участники. Интересно? Тогда добро пожаловать под кат.