Как работают такие приложения, как LogMeIn и TeamViewer?

Уже есть вопрос Как именно удаленная программа как команда просмотрщик, который дает базовое описание, но меня интересует, как работает связь после того, как клиент зарегистрировался на сервере. Если клиент находится за NAT, то у него не будет собственного IP-адреса, так как же сервер (или другой клиент) может отправить ему сообщение? Или клиент просто продолжает опрашивать сервер, чтобы узнать, есть ли у него какие-либо запросы?

Существуют ли какие-либо эквиваленты LogMeIn или TeamViewer с открытым исходным кодом?


person parsley72    schedule 24.01.2015    source источник
comment
Если вы голосуете за закрытие вопроса, то хотя бы скажите мне, почему!   -  person parsley72    schedule 21.02.2015


Ответы (1)


Самый простой и надежный способ (хотя и не всегда самый эффективный) состоит в том, чтобы каждый клиент установил исходящее TCP-соединение с известным сервером где-то и оставил это соединение открытым. Пока соединение TCP открыто, данные могут передаваться по этому соединению TCP в любом направлении в любое время. Похоже, что и LogMeIn, и TeamViewer используют этот метод, по крайней мере, в качестве запасного варианта. Основные недостатки этого метода заключаются в том, что все данные должны проходить через сервер компании TeamViewer/LogMeIn (что может стать узким местом), и что протокол TCP не очень хорошо обрабатывает отброшенные пакеты — он останавливается и ждет отброшенных пакетов. чтобы возмущаться, а не отказываться от них и вместо этого отправлять новые данные.

Другой метод, который они могут иногда использовать (для повышения производительности), — это пробивка отверстий UDP. Этот метод основан на том факте, что многие брандмауэры будут принимать входящие пакеты UDP от удаленных хостов, на которые хост-брандмауэр недавно отправил исходящий пакет UDP. Учитывая это, сервер компании TeamViewer/LogMeIn может сказать обоим клиентам отправить исходящий пакет на IP-адрес брандмауэра другого клиента, и после этого (надеюсь) каждый брандмауэр будет принимать UDP-пакеты с IP-адреса другого клиента, обращенного к Интернету. Однако это не всегда работает, поскольку разные брандмауэры работают по-разному и могут не включать вышеупомянутую логику разрешения UDP.

person Jeremy Friesner    schedule 24.01.2015
comment
В этом случае у клиента есть сервер RTSP, который обеспечивает видеопоток с экрана. После установки TCP-соединения сервер может открыть к нему какое-либо соединение? - person parsley72; 25.01.2015