Как Skype отправляет файлы напрямую?

4917
Rok

Мне интересно, как Skype может отправлять файлы напрямую пользователям, которые обычно находятся за брандмауэром? Как это работает, так как мне нужно разработать нечто подобное, когда один локальный веб-сервер (за брандмауэром) должен иметь возможность отправлять / передавать файлы напрямую на другой идентичный?

Я понимаю, что должен быть какой-то общедоступный центральный сервер, через который оба обнаруживают друг друга, и я планирую иметь этот, но как после этого происходит прямое соединение?

Спасибо

3
См. [Как Skype & Co. обходят межсетевые экраны - The H Security] (http://www.h-online.com/security/features/How-Skype-Co-get-round-firewalls-747197.html) slhck 11 лет назад 2
Спасибо, это здорово! Надеюсь, я смогу найти библиотеку Python, чтобы упростить это. Ура! Rok 11 лет назад 0

1 ответ на вопрос

9
slhck

Skype не полагается на сервер для отправки файлов как таковой . Skype использует технику, называемую дыроколом, чтобы обеспечить связь между двумя ограничительными межсетевыми экранами. По сути, он откроет канал связи, таким образом «пробивая дыру» через локальный брандмауэр, который другой клиент Skype может использовать для передачи данных.

Связь Skype практически полностью основана на одноранговой связи, поэтому для реальной передачи данных централизованный сервер не требуется. Однако для создания первоначальной связи необходим суперузел.

Поэтому маршрутизатор NAT хранит таблицы того, какой внутренний компьютер связывался с каким внешним компьютером и какие порты использовались этими двумя. Уловка, используемая программным обеспечением VoIP, состоит в том, чтобы убедить брандмауэр в том, что установлено соединение, которому он должен распределить последующие входящие пакеты данных.

Итак, в основном, сообщение выглядит так: