воскресенье, мая 11, 2008

Архитектура Skype

Skype - известная система интернет-телефонии, которой пользуется очень много народу по всему миру. Разберемся как оно работает.

Skype для работы использует P2P соединения, а не клиент-серверную модель. Что неудивительно, если вспомнить, что авторы Skype - те же люди, что работали над Kazaa. Однако совсем от клиент-серверной архитектуры им отойти не удалось. У них есть логин-серверы - это единственной централизованный компонент Скайпа (список серверов, к которым надо коннектиться запрятан в исходники Скайповского клиента). И этот единственный централизованный компонент их как-то раз подвел. В 2007 году пользователи Скайпа не могли с ним работать в течение двух дней. Причиной было то, что был выпущен Виндовый патч, который вызвал ребут всех пользовательских машин. Машины ребутнулись и стали дружно логиниться. Сервера Skype были погребены под огромным количеством одновременных логинов.

P2P соединения - это, конечно, хорошо. Однако как быть, если два пользователя, которые хотят сконнектиться, сидят за фаирволлами? Skype борется с симметричными NATами и фаирволлами следующим образом - гонит трафик через тех пользователей, кто не сидит за фаирволлом. Вообще в скайповской сети машины подразделяются на ноды - обычные машины, суперноды - которые разруливают трафик нодов, ну и на их собственные логин-серверы. Так вот, если у вас публичный IP адрес, достаточная мощность CPU, много памяти и пропускная способность сети не подкачала, то вы - супернод! И через вас пойдет чужой трафик. :-)

В качестве базы данных для работы Skype использует PostgreSQL. Но им пришлось PostgreSQL под себя затачивать. Результаты заточки распространяются под BSD лицензией. Лежат тут. Недавно поставили себе амбициозную цель: PostgreSQL должен масштабироваться до одного миллиарда пользователей.

Исходники Скайпа закрыты, протокол тоже закрыт. Есть, правда, Skype API, который позволяет расширять пользовательский интерфейс. Однако пытливые умы ковыряются в скайповском протоколе и находят интересные вещи. Есть очень известный доклад Vanilla Skype, в котором подробно рассказывается об особенностях работы Скайпа и о потенциальных его уязвимостях.

Еще парочка фактов: Для передачи звука они используют Global IP Sound (GIPS). Железо - dual или quad Opteron'ы со SCSI RAID.

Ссылки по теме:
Доклад Vanilla Skype part1[.pdf] и part2[.pdf]. Можно посмотреть видеозапись этого доклада. Осторожно, английский с сильным французским акцентом.
Skype Protocol - статья в Википедии
An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol - довольно старые слайды
Иван Золотухин в своем докладе на РИТ2007 немного говорил о скайповском PostgreSQL.

26 коммент.:

Виталий комментирует...

Молодцы они - эти ребята, что skype сделали, я достойных конкурентов как-то не наблюдаю

Abava комментирует...

вот конкурент
но в 2009 году :-)

_Andrey_ комментирует...

2Виталий:
И в чем же они молодцы?
Советую поискать в сети документик о том, что представляет из себя скайп на самом деле. Имени файла не помню, но помню, что это был PDF.

RedChrom комментирует...

Очень жаль конечно, что нет достойного open-source аналога...

Salvator комментирует...

Всегда знал что Skype - унылое дерьмо, теперь еще раз убедился. У меня трафик не бесплатный, чтоб соседи за мой счет разговаривали, да и не сильно приятно, что мои разговоры будут идти через какого-то васю пупкина.Да и считаю, не красиво поступает контора, берущая деньги за звонки наружу и из вне, перенося вычислительные мощности на клиентов. Лохов имхо делают из пользователей.

RedLiner комментирует...

что надо сделать чтобы не быть супернодом?
чтобы через тебя не гнали трафик а то он у нас дорогой =\

Salvator комментирует...

Я так понимаю, чтобы не стать супернодом, достаточно поместить машины со Skype за Nat - решение кривое, но может помочь

Андрей Валяев комментирует...

Можно просто запретить входящие соединения для Skype... входящий порт вроде бы настраивается.

Трафик там шифрованный, перенаправление его через кого-бы то ни было вряд ли позволит подслушать разговоры...

В FAQ кстати упоминается, что "и также некоторые звонки передаются через других участников сети."

Но с другой стороны при использование хоста для перекачивания трафика стоило бы спросить владельца. То есть галочка "Хочу быть супарнодом" была бы правильным решением. И за трафик начислять деньги на счет :)

Сам скайпом не пользуюсь, поэтому могу где-то наврать. Извините.

Анонимный комментирует...

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Skype]
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Skype\Phone]
"DisableSupernode"=dword:00000001

Олег Комов комментирует...

Как это конкурнетов нет? Вроде полно подобных сервисов, размах не такой конечно, но работают не хуже скайпа.

Алёна комментирует...

2Abava:
вот конкурент
но в 2009 году :-)

Им будет очень сложно влезть в уже занятую нишу. Там в статье хорошо написано: Isn’t it too little, too late? Realistically speaking, there’s a slim chance of anyone catching up with Skype.

2RedChrom
Очень жаль конечно, что нет достойного open-source аналога...

Есть! Google Talk.

2Salvator:
Всегда знал что Skype - унылое дерьмо, теперь еще раз убедился. У меня трафик не бесплатный, чтоб соседи за мой счет разговаривали

В принципе, так все P2P сети работают. Skype тут ничем от других не отличается.

2RedLiner:
что надо сделать чтобы не быть супернодом?

О, народ занервничал :-). Я так понимаю, большинство вопрошающих сидит за NATами и фаирволлами, тут супернодом не станешь.
Также Анонимный привел ключ в реестре, где это настраивается. Предполагаю, что к этому ключу можно и через настройки клиента как-то доступиться.

Алёна комментирует...

Не могу не рассказать страшилку на ночь. Мой муж как-то стал супернодом. Было это довольно давно. Он на работе в пятницу вечером скачал себе музыку и забыл закрыть P2P клиент (Shareaza если кому интересно). Который проработал все выходные. Быстрый хост с публичным айпишником быстро был признан стабильным и через него пошел поисковый трафик. В понедельник начальник с грустными глазами и логом от провайдера стал вопрошать, а не качал ли кто чего. "И тут меня осенило" (с).

mczim комментирует...

Алена, скажите от куда такая информация что для передачи звука и видео нужны Opteron'ы??? Так же хочу заметить что собственно трафику все равно куда ползти а грамотно настроенный фаервол без труда может соединить двух пользователей skype :)

Abu комментирует...

Аналоги - Twinga, Ekiga.

Самый =главный= факт - ребята из Skype пытались намедни отрицать лицензию GPL.

http://www.securitylab.ru/news/352841.php

А я борюсь с качелями =просто=. Не с грустными глазами, а с посчитанным по хостам траффиком хожу. Вообще - самая эффективная борьба - на административно-организационном уровне. Человек, заплативший 8-10 тыщ рублей за закачку, сидит потом тихо. ((:

mdegtyarev комментирует...

Интересные «ванильные» PDF-ы!

VZOChat комментирует...

Что скажете об этом, господа? Развивающийся сервес. Прекрасное качество видео даже на 32kbps

Алёна комментирует...

2mczim:
Алена, скажите от куда такая информация что для передачи звука и видео нужны Opteron'ы???

Нужны, почему нужны? Скайповцы используют Opteron'ы. Информация отсюда.

Так же хочу заметить что собственно трафику все равно куда ползти а грамотно настроенный фаервол без труда может соединить двух пользователей skype :)

Эээ... Если пользователи сидят за симметричными NATами, то их не получится без релея законнектить.

2Abu:
А я борюсь с качелями =просто=. Не с грустными глазами, а с посчитанным по хостам траффиком хожу. Вообще - самая эффективная борьба - на административно-организационном уровне. Человек, заплативший 8-10 тыщ рублей за закачку, сидит потом тихо. ((:

Жестоко. Мало ли, ошибся человек, бывает. Зачем же сразу так. Мужа моего просто попросили больше так не делать. Ну он и не делал...

2VZOChat:
Что скажете об этом, господа? Развивающийся сервес. Прекрасное качество видео даже на 32kbps

Здорово, но зарулить Skype все равно будет очень и очень непросто. Даже с прекрасным качеством видео.

Abu комментирует...

2Алёна

=
Жестоко. Мало ли, ошибся человек, бывает. Зачем же сразу так. Мужа моего просто попросили больше так не делать. Ну он и не делал...
=

А когда 200-300 человек в конторе и, допустим, ошиблось 10 ? ((: Конечно же, всякое бывает, подход не абсолютно однозначный - наказывать. Но когда начальство приходит и спрашивает - тут ничего поделать нельзя - траффик считается, все об этом знают.

Вообще проблема скайпов и прочих Р2Р-сетей на административном уровне решается лучше, чем на уровне NAT и прочего, не побоюсь этого слова, рукоблудия на стороне сисадмина.

Всегда есть открытые порты. Всегда есть Mail-agent, например, который невинно лезет во все дыры ((: и всегда есть человек.

Nesusvet комментирует...

http://www.openwengo.org/ - отличная открытая альтернатива скайпу и совместима с нормальными протоколами. И в россию я звонил нормально

Анонимный комментирует...

занятное про скайп от Касперски:
http://www.xakep.ru/magazine/xa/100/064/1.asp

Юзайте SIP телефоны и будет вам щастье ;)

Ирина Александрова комментирует...

Скайп мне очень нравится. Но опенсорсный был бы лучше :)

Сергей Семёнов комментирует...

Алёна:
В понедельник начальник с грустными глазами и логом от провайдера стал вопрошать, а не качал ли кто чего. "И тут меня осенило" (с).


The best!

dtjurev комментирует...

Пользуемся скайпом ежедневно для общения с московским офисом. Выглядит это так: минуту слушаешь нормальную речь, потом минуту слушаешь хрюканье и шипение, потом минуту объясняешь человеку с какого момент ты перестал его слышать, потом минуту ждёшь, пока он вспомнит, что успел наговорить за это время и так далее по кругу. Нет, я понимаю, что перебои трафика неизбежны, но ведь можно придумать всякое! Идея номер раз: как только клиент определяет, что трафик не доходит до оппонента, то сразу индицировать это. Чтобы не говорить зря в devnull и не вспоминать потом, что успел наговорить. Идея номер два: при нестабильном канале накапливаем буферное время, которое позволяет информации таки дойти и воспроизвестись без паузы. Идея номер три: для компенсации времени используем плавное изменение скорости проигрывания (частоту звука при этом, разумеется, не трогаем). Идея номер четыре: если звук таки пришлось прервать (данные ещё не пришли, а фора по времени исчерпана), то по прешествии данных отматываем звук слегка назад и фэйдим, чтобы легче восстанавливался контекст. Ну, и т.п.

softwarer комментирует...

Скайп хорош.
А все аналоги пока какие-то невнятные. Огорчил также скандал в Германии.

casino комментирует...

Skype рулит!!! :)

peer комментирует...

Skype и как messanger вплоне отличен