2015-01-24 2 views
2

У вас уже есть вопрос How exactly does a remote program like team viewer work, который дает базовое описание, но меня интересует, как коммиты работают после того, как клиент зарегистрировался на сервере. Если клиент находится за NAT, у него не будет собственного IP-адреса, так как сервер (или другой клиент) может отправить ему сообщение? Или клиент просто продолжает опрос сервера, чтобы узнать, получили ли его какие-либо запросы?Как работают такие приложения, как LogMeIn и TeamViewer?

Есть ли какие-либо эквиваленты с открытым исходным кодом LogMeIn или TeamViewer?

+0

Если вы голосуете, чтобы закрыть вопрос, то, по крайней мере, скажите мне, почему! – parsley72

ответ

5

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

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

+0

В этом случае клиент имеет сервер RTSP, который предоставляет видеопоток экрана. Как только соединение TCP установлено, есть ли способ, которым сервер может открыть соединение с этим? – parsley72

Смежные вопросы