R>>Кто обеспечит поддержку UDP hole punching, чтобы клиенты, которые оба сидят за NAT могли обмениваться сообщениями
R>>Например, твой компьютер :) R>>Смотри выше — уже писал. FR>Разумеется, мой компьютер этого сделать не сможет. Ему может даже быть неизвестен адрес гейта NAT в интернет. Мне кажется, вы плохо представляете себе как происходит обмен информацией между клиентами, находящимися за NAT. Попробуйте прочитать вот это: http://www.brynosaurus.com/pub/net/p2pnat/
Это ты, по-моему, ничего не понял:) Адрес гейта ему и не нужно знать: ему нужно знать, что ему на определённый порт (который он передал в соответствующем месте протокола) должен прийти пакет определённого содержания, а уже по его обратному адресу (хост, порт) можно будет вычислить, какой адрес оказался внешним для порта данных каждого клиента. С другой стороны, ты прав в том смысле, что это (связывание клиентов за NAT'ом), если оно может быть успешно выполнено без mediaproxy, незачем переваливать на другие (клиентские) хосты — это сложнее чем сделать поддержку на центральных серверах. (Хотя они могли это и намеренно увести к клиенту...)
А вот если все эти панчинги не прошли (по мнению автора статьи, 18% NAT'ов их не поддерживает; значит, в ~32% случаев не получится сделать простой punching) — потребуется явный mediaproxy на хосте с мировым адресом. И вот тут-то твой компьютер и заюзают ради чужого трафика.
Я с этими пробоями NAT'ов наобщался, хотя с SIP сигнализацией:)
Кстати, что авторы STUN, что автор твоей ссылки слишком упрощённо представляют себе типы NAT'а — например, FreeBSD'шный natd+libalias в их схему не укладывается. Они потеряли как минимум фактор времени (маппинг статический или динамический) — NAT с динамическим назначением, который до истечения времени жизни пробы будет port restricted cone, после такого истечения спокойно может стать детектируемым как symmetric.
Здравствуйте, remark, Вы писали:
FR>>Кто-то должен проверять логин клиента при его подключении и обеспечить безопасность соединения, чтобы один клиент не выдал себя за другого. Эти серверы являются основными серверами Skype сети, без которых сеть не сможет работать. R>Что будет, если американские телекоммуникационные компании лоббируют закон, что бы все
американские интернет-провайдеры закрыли доступ к Skype-серверам? Skype будет недоступен в Америке? А вот и неправильно! Skype будет работать как работал!
НЕТ. Будут работать текущие разговоры. Могут быть установлены разговоры на направления, адреса которых уже известны (ибо закэшированы). Операция установления соединения с произвольным получателем, до этого неизвестным, сорвётся по причине невозможности достучаться до вызываемого абонента — его адрес и порт неизвестен, а даже если известен — он может быть 192.168.0.2:1030:), и надо будет послать запрос с центрального сервера (определённые хост и порт) "начни командное взаимодействие с вот этим посредником" чтобы пробить этот NAT в направлении внутрь.
Без центральной группы серверов, которая даёт первичную идентификацию в среде, не будет работать ничего. Те P2P которые не имеют одного выделенного центрального сервера — вместо этого имеют их много и схему установления контактов друг с другом. Но всё равно какой-то первичный локальный центр есть.
А вот дальше уже можно и другие узлы нагружать ролью локальных связывателей (это ещё ничего) и медиапрокси (а вот это уже диверсия).
N>НЕТ. Будут работать текущие разговоры. Могут быть установлены разговоры на направления, адреса которых уже известны (ибо закэшированы). Операция установления соединения с произвольным получателем, до этого неизвестным, сорвётся по причине невозможности достучаться до вызываемого абонента — его адрес и порт неизвестен, а даже если известен — он может быть 192.168.0.2:1030, и надо будет послать запрос с центрального сервера (определённые хост и порт) "начни командное взаимодействие с вот этим посредником" чтобы пробить этот NAT в направлении внутрь.
И все равно я не понимаю. Как будут работать текущие разговоры, если клиенты залогинится не могут на сервер? База данных, хранящая учетные записи клиентов ведь на сервере лежит
Здравствуйте, FractalizeR, Вы писали:
N>>НЕТ. Будут работать текущие разговоры. Могут быть установлены разговоры на направления, адреса которых уже известны (ибо закэшированы). Операция установления соединения с произвольным получателем, до этого неизвестным, сорвётся по причине невозможности достучаться до вызываемого абонента — его адрес и порт неизвестен, а даже если известен — он может быть 192.168.0.2:1030:), и надо будет послать запрос с центрального сервера (определённые хост и порт) "начни командное взаимодействие с вот этим посредником" чтобы пробить этот NAT в направлении внутрь. FR>И все равно я не понимаю. Как будут работать текущие разговоры, если клиенты залогинится не могут на сервер? База данных, хранящая учетные записи клиентов ведь на сервере лежит
Так разговор-то уже установлен, учётная запись уже сработала и до следующего разговора не требуется. Сигнализация и голосовой поток идут напрямую, или через ещё одного клиента.
N>Так разговор-то уже установлен, учётная запись уже сработала и до следующего разговора не требуется. Сигнализация и голосовой поток идут напрямую, или через ещё одного клиента.
А-а Ну так и ICQ если вырубится, теоретически можно продолжить разговор, если Direct Connection установлено.
N>Так разговор-то уже установлен, учётная запись уже сработала и до следующего разговора не требуется. Сигнализация и голосовой поток идут напрямую, или через ещё одного клиента.
Как это установлен? Ведь по условию задачи доступ к серверу Skype блокировали злобные лоббисты. Вернее, лоббировали злобные блокисты. Нет. Короче, блокировали ведь доступ. Или мы вот разговаривали, вдруг блокисты нас лоббировали, а мы еще можем говорить? Ну в этом я не сомневаюсь.
Мне показалось, что уважаемый netch80 имел ввиду, что центральный сервер скайпа вообще никакой критической роли не выполняет. Ну не будет его — никто и не заметит.
R>Что будет, если американские телекоммуникационные компании лоббируют закон, что бы все американские интернет-провайдеры закрыли доступ к Skype-серверам? Skype будет недоступен в Америке? А вот и неправильно! Skype будет работать как работал!
Здравствуйте, FractalizeR, Вы писали:
N>>Так разговор-то уже установлен, учётная запись уже сработала и до следующего разговора не требуется. Сигнализация и голосовой поток идут напрямую, или через ещё одного клиента. FR>Как это установлен? Ведь по условию задачи доступ к серверу Skype блокировали злобные лоббисты. Вернее, лоббировали злобные блокисты. Нет. Короче, блокировали ведь доступ. Или мы вот разговаривали, вдруг блокисты нас лоббировали, а мы еще можем говорить? Ну в этом я не сомневаюсь.
Видите ли... я не знаю skype, совсем. И не планирую его знать (разве что чтобы изучить конкурентов). Но я знаю SIP, на котором строятся практически такие же сети. Моя текущая работа — поддержка программных реализаций SIP. Так вот — в SIP оно может быть устроено многими различными методами, но вот например один из методов. Представим себе: vasya@1.2.3.4 хочет поговорить с petya@pupkin.com. Он вызывает SRV запись для _sip._udp.pupkin.com, получает 100.101.102.103:5060, посылает на него (100.101.102.103:5060) INVITE petya@pupkin.com и получает 302 с редиректом на petya@5.6.7.8. Теперь он посылает INVITE petya@5.6.7.8 на 5.6.7.8:5060, там его принимают. В INVITE было сказано слать голосовой поток на 1.2.3.4:16400, в ответе просят слать встречный поток на 5.6.7.8:39000, обе стороны начинают генерировать голосовой трафик на взаимно согласованном кодеке на хост/порт указанные другой стороной, и успешно производят свой разговор.
Видите, при чём тут центральный сервер? Он просто разместил объя...^W^W сказал, где реально живёт вызываемый участник. Всё дальнейшее взаимодействие, и сигнализация, и голосовой поток — не идёт через него.
FR>Мне показалось, что уважаемый netch80 имел ввиду, что центральный сервер скайпа вообще никакой критической роли не выполняет. Ну не будет его — никто и не заметит.
Нет и ещё раз нет. Он нужен, чтобы сказать где искать вызываемого. Его не будет — все, кто пытается позвонить, это сразу заметят. Но дальнейшие операции могут идти без него. А могут — и с ним, если этого захотят те кто строит сервер. И такой подход тоже имеет смысл, если надо скрыть, где второй участник.
Здравствуйте, netch80, Вы писали:
N>Здравствуйте, FractalizeR, Вы писали:
N>>>Так разговор-то уже установлен, учётная запись уже сработала и до следующего разговора не требуется. Сигнализация и голосовой поток идут напрямую, или через ещё одного клиента.
Например, через компьютер FractalizeR
FR>>Мне показалось, что уважаемый netch80 имел ввиду, что центральный сервер скайпа вообще никакой критической роли не выполняет. Ну не будет его — никто и не заметит.
Это был я
N>Нет и ещё раз нет. Он нужен, чтобы сказать где искать вызываемого. Его не будет — все, кто пытается позвонить, это сразу заметят. Но дальнейшие операции могут идти без него. А могут — и с ним, если этого захотят те кто строит сервер. И такой подход тоже имеет смысл, если надо скрыть, где второй участник.
С этим никто не спорит. Но почему именно центральный сервер? Почему не просто сервер? Если Skype "грязно" юзает любой попавшийся комп для посреднечества в разговоре, почему Вы отрицаете возможность юзания самих компьютеров p2p сети в качестве серверов и для других операций?
Как-то же он, кстати, выбирает комп для посреднечества. Возможно, этро комп, который поближе, а не на другом конце света. Он может так же адаптивно выбирать сервера для авторизации, а потом распространять списки этих серверов. А потом те сервера начнут делать тоже самое. И т.д. У Skype даже в названии есть что-то похожее со Skynet из терминатора
Вы поглядите какая крысота получается. Допустим есть локальная сеть района, члены которой активно переговариваются с помощью Skype, и через некоторое время внутри этой сети выбираются сервера и все локальные компьютеры о них узнают и понимают, что это действительно самые близкие и быстрые сервера. И разговоры внутри сети становятся автономными. Крысота.
R>С этим никто не спорит. Но почему именно центральный сервер? Почему не просто сервер? Если Skype "грязно" юзает любой попавшийся комп для посреднечества в разговоре, почему Вы отрицаете возможность юзания самих компьютеров p2p сети в качестве серверов и для других операций? R>Как-то же он, кстати, выбирает комп для посреднечества. Возможно, этро комп, который поближе, а не на другом конце света. Он может так же адаптивно выбирать сервера для авторизации, а потом распространять списки этих серверов. А потом те сервера начнут делать тоже самое. И т.д. У Skype даже в названии есть что-то похожее со Skynet из терминатора
Блин, ну вот центральный сервер выключили, загрузил ты винду, запустил скайп.
Вперёд коннектиться к компьютеру в p2p сети.
Только вот где он этот компьютер, такой близкий и быстрый?
Можно поискать броадкастами в локалке. Но, не всякое подключение это локалка и не во всякой локалке обязательно будут другие скайпы.
Можно ломануться к старым скайпам, известным с прошлого запуска. Но они тоже могут быть выключены или их IP могут поменяться (типичный случай для dialup/DSL).
Ну, ты готов пользоваться технологией, которая периодически будет тебе говорить: "Сегодня не судьба, позвонишь завтра"?
Я уж молчу про случай, когда все сидят за фаерволами.
А>Можно поискать броадкастами в локалке. Но, не всякое подключение это локалка и не во всякой локалке обязательно будут другие скайпы. А>Можно ломануться к старым скайпам, известным с прошлого запуска. Но они тоже могут быть выключены или их IP могут поменяться (типичный случай для dialup/DSL). А>Ну, ты готов пользоваться технологией, которая периодически будет тебе говорить: "Сегодня не судьба, позвонишь завтра"? А>Я уж молчу про случай, когда все сидят за фаерволами.
Странная у нас беседа получилась, вы не находите?
R>С этим никто не спорит. Но почему именно центральный сервер? Почему не просто сервер?
Мне кажется, разницы в терминологии нет. Хоть это один сервер сети, хоть их группа, хоть они главные, хоть нет — если их вырубить — сетка Skype работать не будет.
R>Если Skype "грязно" юзает любой попавшийся комп для посреднечества в разговоре, почему Вы отрицаете возможность юзания самих компьютеров p2p сети в качестве серверов и для других операций?
Ну, хотя бы потому, что было бы крайним идиотизмом хранить на компьютере не принадлежащем Скайп-компании учетные данные клиентов для логина. Компьютеры клиентов могут только трафик передавать, и то я сомневаюсь, чтобы они это делали, ибо смысла в этом я не вижу. Хотя бы потому, что задержки в разговоре стали бы неприемлемыми. А передавать трафик через пользователей модемов — это вообще бессмысленно.
R>Как-то же он, кстати, выбирает комп для посреднечества. Возможно, этро комп, который поближе, а не на другом конце света. Он может так же адаптивно выбирать сервера для авторизации, а потом распространять списки этих серверов.
А базу логинов как реплицировать на эти компы? У меня вот 800Кбит интернет канал. Но я не думаю, чтобы на моем компе лежала база данных клиентов скайпа.Да и вообще, как вы представляете себе безопасность использования клиентского компьютера в качестве сервера авторизации сети Skype?
R>А потом те сервера начнут делать тоже самое. И т.д. У Skype даже в названии есть что-то похожее со Skynet из терминатора [] Вы поглядите какая крысота получается. Допустим есть локальная сеть района, члены которой активно переговариваются с помощью Skype, и через некоторое время внутри этой сети выбираются сервера и все локальные компьютеры о них узнают и понимают, что это действительно самые близкие и быстрые сервера. И разговоры внутри сети становятся автономными. Крысота.
Это что-то из области терминатора. Завтра мой компьютер станет сервером нашей локальной сети Скайп, я поправлю базу данных логинов, позвоню другу и скажу, что звонит это не Вася, а Петя на самом деле. И никто не узнает, что я Вася, ибо я — сервер! И потом, получается, что узнать online клиент или нет, нужно опросить сервер, на котором находится его учетная запись. А как узнать, что это за сервер? А может, таких серверов несколько? Их ведь надо оповестить о том, что я вышел online.....
Нет, саморегулирующийся автономный Скайп — это что-то фантастическое, мне кажется. Служебный трафик сети может через ваш компьютер по разным причинам и с разным назначением проходить. Не понимаю, почему вы считаете, что это именно голосовой трафик.
Здравствуйте, FractalizeR, Вы писали:
FR>Нет, саморегулирующийся автономный Скайп — это что-то фантастическое, мне кажется.
Ничего фантастического нет. Если Skype реализовать на открытом протоколе и не с одним центральным сервером, а со многими, получится SIP. Что давно уже многие используют: дают для контактов адрес вида "sip:bob@biloxi.com", и средствами протокола можно найти ответственные за этот домен сервера, послать им INVITE и установить разговор.
У Skype немного преимуществ перед подобными открытыми сетями. Первое — кодеки, очень хорошо работающие в любых условиях вплоть до среднезагруженного диалапа. Второе — формально работающая защита от подмены своего identity в сети (что позволяет строить фильтры по контакт-листам без дополнительной авторизации). Третье — готовая криптография во флаконе с остальным. Больше преимуществ нет. Канала даже на 128Kbit/s достаточно, чтобы использовать нормальный кодек без завязывания на Skype. Локальный номер тоже можно получить без особых проблем (разве что не так централизованно).
По сравнению с SIP Skype — как ICQ по сравнению с Jabber'ом — закрытая и глючная.
И ещё и неизвестный посторонний трафик гоняет.
FR> Служебный трафик сети может через ваш компьютер по разным причинам и с разным назначением проходить. Не понимаю, почему вы считаете, что это именно голосовой трафик.
Здравствуйте, remark, Вы писали:
N>>Нет и ещё раз нет. Он нужен, чтобы сказать где искать вызываемого. Его не будет — все, кто пытается позвонить, это сразу заметят. Но дальнейшие операции могут идти без него. А могут — и с ним, если этого захотят те кто строит сервер. И такой подход тоже имеет смысл, если надо скрыть, где второй участник. R>С этим никто не спорит. Но почему именно центральный сервер? Почему не просто сервер? Если Skype "грязно" юзает любой попавшийся комп для посреднечества в разговоре, почему Вы отрицаете возможность юзания самих компьютеров p2p сети в качестве серверов и для других операций?
Этих центральных серверов могут быть тысячи. Но Вы сами себе ответите на этот вопрос, если обдумаете следующие вопросы:
1. Клиент запустился, ему надо откуда-то узнать адреса тех, кто на ближайшее время будет выступать в роли сервера сети для него. Откуда он узнает эти адреса?
2. Клиент запустился, откуда-то нашёл адрес ближайшего такого сервера и зарегистрировался на нём. Хорошо, своей локалке он представился ("я online, звонить вот сюда"). Как и откуда узнает его статус и адрес абонент на другом конце планеты?
Думаю, после размышления над этим роль центральных серверов станет очевидна:)
R>Как-то же он, кстати, выбирает комп для посреднечества. Возможно, этро комп, который поближе, а не на другом конце света. Он может так же адаптивно выбирать сервера для авторизации, а потом распространять списки этих серверов. А потом те сервера начнут делать тоже самое. И т.д. У Skype даже в названии есть что-то похожее со Skynet из терминатора :) R>Вы поглядите какая крысота получается. Допустим есть локальная сеть района, члены которой активно переговариваются с помощью Skype, и через некоторое время внутри этой сети выбираются сервера и все локальные компьютеры о них узнают и понимают, что это действительно самые близкие и быстрые сервера. И разговоры внутри сети становятся автономными. Крысота.
А теперь один из тех кто целый месяц держал свой ноут в этой сети района — сел на самолёт и на следующий день вошёл в Сеть из Праги. А "самые близкие и быстрые" сервера по-прежнему тычутся искать его на 10.0.43.15. Вот теперь точно крЫсота.
Здравствуйте, netch80, Вы писали:
N>Ничего фантастического нет. Если Skype реализовать на открытом протоколе и не с одним центральным сервером, а со многими, получится SIP. Что давно уже многие используют: дают для контактов адрес вида "sip:bob@biloxi.com", и средствами протокола можно найти ответственные за этот домен сервера, послать им INVITE и установить разговор.
Мы же не про SIP говорим. Да и SIP я так понимаю, использует сеть серверов, отвечающих за авторизацию пользователей. На эти серверы, видимо, реплицируется основная база данных? Кстати, посоветуйте, что можэно прочитать по архитектуре SIP. Мне стало интересно
N>У Skype немного преимуществ перед подобными открытыми сетями. Первое — кодеки, очень хорошо работающие в любых условиях вплоть до среднезагруженного диалапа. Второе — формально работающая защита от подмены своего identity в сети (что позволяет строить фильтры по контакт-листам без дополнительной авторизации). Третье — готовая криптография во флаконе с остальным. Больше преимуществ нет. Канала даже на 128Kbit/s достаточно, чтобы использовать нормальный кодек без завязывания на Skype. Локальный номер тоже можно получить без особых проблем (разве что не так централизованно).
У Skype и 56k вполне достаточно для разговора.
N>По сравнению с SIP Skype — как ICQ по сравнению с Jabber'ом — закрытая и глючная.
Глючная? Давно им пользуюсь. Вроде ничего не глючит.
N>И ещё и неизвестный посторонний трафик гоняет.
Это точно
Здравствуйте, FractalizeR, Вы писали:
FR>Мы же не про SIP говорим. Да и SIP я так понимаю, использует сеть серверов, отвечающих за авторизацию пользователей. На эти серверы, видимо, реплицируется основная база данных? Кстати, посоветуйте, что можэно прочитать по архитектуре SIP. Мне стало интересно :)
А у него нету какой-то распределённой или центральной архитектуры как таковой. Есть URL "куда звонить", есть поиск сервера по домену URL. Всё. Если на всех один домен — получится скайп/ICQ. Если разные — получится как в Jabber'е.
N>>У Skype немного преимуществ перед подобными открытыми сетями. Первое — кодеки, очень хорошо работающие в любых условиях вплоть до среднезагруженного диалапа. Второе — формально работающая защита от подмены своего identity в сети (что позволяет строить фильтры по контакт-листам без дополнительной авторизации). Третье — готовая криптография во флаконе с остальным. Больше преимуществ нет. Канала даже на 128Kbit/s достаточно, чтобы использовать нормальный кодек без завязывания на Skype. Локальный номер тоже можно получить без особых проблем (разве что не так централизованно). FR>У Skype и 56k вполне достаточно для разговора.
Ну если g.729 применить — и 24k IP потока достаточно. Но он платный. Свободные — ну где-то 30 потребуют. Но загвоздка не в них, а в том, чтобы их все поддерживали. Коммерческие изделия обычно умеют g.711/g.729/g.723.1/g.726, бесплатные — g.711/gsm/ilbc/speex. Гарантированное пересечение — только по g.711. А это 80k. У скайпа гарантирован договор на диалапной скорости, и это существенно. Реализации на открытых стеках до такого только года через два дойдёт.
Впрочем, это детали не SIP, это всех VoIP протоколов (хоть H.323).
N>>По сравнению с SIP Skype — как ICQ по сравнению с Jabber'ом — закрытая и глючная. FR>Глючная? :) Давно им пользуюсь. Вроде ничего не глючит.
Я про ICQ. Skype не настолько проблемна в этом, но жутко засекречена в деталях.
Здравствуйте, FractalizeR, Вы писали:
FR>Вы не правы. Как тогда я могу отправить сообщение на скайп своего друга? Кто подскажет, на какой IP Skype должен отправить сообщение? Кто уведомит меня о том, что мой друг вышел online с такого-то IP? Кто обеспечит поддержку UDP hole punching, чтобы клиенты, которые оба сидят за NAT могли обмениваться сообщениями? Кто обеспечит поддержку SkypeOut, SkypeIn?
Советую почитать здесь skype_BHEU06.handout.pdf и ваши вопросы отпадут.
Здравствуйте, squiz, Вы писали:
S>Здравствуйте, FractalizeR, Вы писали:
FR>>Вы не правы. Как тогда я могу отправить сообщение на скайп своего друга? Кто подскажет, на какой IP Skype должен отправить сообщение? Кто уведомит меня о том, что мой друг вышел online с такого-то IP? Кто обеспечит поддержку UDP hole punching, чтобы клиенты, которые оба сидят за NAT могли обмениваться сообщениями? Кто обеспечит поддержку SkypeOut, SkypeIn?
S>Советую почитать здесь skype_BHEU06.handout.pdf и ваши вопросы отпадут.
Я же говорил! [старческим дрожащим голосом ]
When a skype client has a good score (bandwidth+no firewall+good cpu) he can be promoted to supernode
That means » 20k supernodes in the world
Скайпу надо только один раз выйти в сеть по зашитому в код адресу, далее он становится автономным. Сейчас уже явно нет возможности "убить" скайп.
Ну так и о чем это говорит? Что сервер скайпа реплицирует на суперноды всю базу логинов и паролей? Да еще и приватные RSA ключи, наверное? Вы документ прочитайте.
Здравствуйте, netch80, Вы писали:
N>А у него нету какой-то распределённой или центральной архитектуры как таковой. Есть URL "куда звонить", есть поиск сервера по домену URL. Всё. Если на всех один домен — получится скайп/ICQ. Если разные — получится как в Jabber'е.
Здравствуйте, FractalizeR, Вы писали:
R>>Я же говорил! [старческим дрожащим голосом ]
FR>Ну так и о чем это говорит? Что сервер скайпа реплицирует на суперноды всю базу логинов и паролей?
Адрес центрального сервера нужен Skype только для самого первого выхода в сеть
FR>Да еще и приватные RSA ключи, наверное?
"Приватные" RSA ключи зашиты в коде программы. Все кому очень интересно могут их выцепить и расшифровать трафик, что собственно автор статьи и сделал.
FR>Вы документ прочитайте.
Здравствуйте, remark, Вы писали:
R>Здравствуйте, netch80, Вы писали:
N>>А у него нету какой-то распределённой или центральной архитектуры как таковой. Есть URL "куда звонить", есть поиск сервера по домену URL. Всё. Если на всех один домен — получится скайп/ICQ. Если разные — получится как в Jabber'е.
R>Вы сильно-сильно недооцениваете Skype. См. здесь