воскресенье, мая 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 комментариев:

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

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

    ОтветитьУдалить
  3. Анонимный12/5/08 04:58

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

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

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

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

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

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

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

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

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

    ОтветитьУдалить
  8. Анонимный12/5/08 18:10

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

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

    ОтветитьУдалить
  10. 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ами и фаирволлами, тут супернодом не станешь.
    Также Анонимный привел ключ в реестре, где это настраивается. Предполагаю, что к этому ключу можно и через настройки клиента как-то доступиться.

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

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

    ОтветитьУдалить
  13. Аналоги - Twinga, Ekiga.

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

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

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

    ОтветитьУдалить
  14. Интересные «ванильные» PDF-ы!

    ОтветитьУдалить
  15. Анонимный14/5/08 08:22

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

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

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

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

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

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

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

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

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

    ОтветитьУдалить
  17. 2Алёна

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

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

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

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

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

    ОтветитьУдалить
  19. Анонимный19/5/08 18:15

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

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

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

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


    The best!

    ОтветитьУдалить
  22. Анонимный26/5/08 23:17

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

    ОтветитьУдалить
  23. Анонимный30/5/08 20:01

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

    ОтветитьУдалить
  24. Анонимный7/6/08 21:19

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

    ОтветитьУдалить