Наверное, многим интересно, как же команде Telegram удалось сделать популярную для мессенджеров функцию голосовых звонков уже сразу после запуска разительно отличающейся по качеству в лучшую сторону перед многими другими VoIP — сервисами.

Во время изучения работы Telegram Calls я обратил внимание на интересную техническую деталь, которая используется на сетевом уровне и помогает уменьшить задержки при прохождении пакетов, когда при соединении используются релейные сервера.

Если взглянуть на дамп трафика, который проходит при звонке, в котором использовался релейный сервер, можно заметить, что трафик определяется протоколом RIP. IP на 91. — это сервер Telegram. Я снимал дамп трафика на своём VPN — сервере, поэтому адрес клиента из локальной подсети.



А вот скриншот из дебага клиента, но уже при P2P. Стоит отметить, что 520 порт назначен только серверам, поэтому этот метод работает тогда, когда P2P — соединение между клиентами невозможно и один из серверов из списка выступает в роли релея.



Вспомним, что нам известно про протокол RIP?
RIP — протокол маршрутизации. RIP работает на 3 уровне (сетевой) стека TCP/IP, используя UDP порт 520. UDP, то есть доставка, не требующая подтверждения приёма, как известно, сам по себе отлично подходит для трафика реального времени, коим является голос.

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

Эта приоретизация реализуется в маршрутизаторах с помощью DSCP — кодов ( Differentiated Services Code Point ), и по-умолчанию, например, в Cisco согласно RFC 791 и RFC 2474 протоколы маршрутизации RIP/RIP2/OSPF/EIGRP маркируются кодом 6. А это, на минуточку, предвысший, Internetwork Control приоритет.



Кроме приоритизации DSCP, Cisco IOS также имеет внутренний механизм PAK_priority, который служит для предоставления приоритета для важных датаграмм именно в момент их прохождения через роутер. PAK_priority designation был задуман разработчиками Cisco (и, можно предположить, некоторыми другими) оборудования как критически важный для корректной работы Cisco IOS, и поэтому его никак нельзя конфигурировать. Что исключает возможность администраторам как-либо влиять на приоритетный пропуск трафика, имеющего для системы характеристики Control.

Похоже, вспомнив про древний протокол и особенности его работы (полезный UDP, существование возможности Unicast — обмена), архитекторы Telegram использовали его порт, тем самым заставили многие маршрутизаторы на пути следования пакетов обрабатывать их трафик как очень важный, тем самым, очевидно, несколько сократив задержки.

Вроде бы небольшая деталь в мире мощных кодеков, но, как говорится, дьявол кроется в мелочах — так почему бы не заставить эти мелочи работать на благо конечной цели?
Поделиться с друзьями
-->

Комментарии (37)


  1. Furriest
    15.04.2017 06:17
    +5

    Ммм… Я всегда считал, что PAK priority работает не для транзитного в data plane трафика, а для трафика, выходящего из control plane в data plane. Если это так — то для трафика телеграма этот механизм бесполезен.

    Не исключаю, что я считал неправильно, но, например, http://www.cisco.com/c/en/us/support/docs/quality-of-service-qos/qos-congestion-management-queueing/18664-rtgupdates.html говорит как раз о том, что «The RIP and OSPF routing processes that run on the core CPU of a router mark all traffic they originate with both IP precedence 6 and pak_priority». Тут важно, что это именно процессы контрол-плейна, создающие трафик. А разбирать транзитный трафик в датаплейне на предмет развешивания на них неуправляемых приоритетных флагов, было бы не только трудоемко, но и несколько опрометчиво.


    1. ksg222
      15.04.2017 10:48
      +6

      Вы всё верно пишите. PAK_priority — сугубо внутренняя функция маршрутизатора.

      Наиболее важные пакеты, генерируемые control plane'ом маршрутизатора, маркируются внутренним идентификатором pak_priority. Такие пакеты маршрутизатор будет стараться передавать в первую очередь и не отбрасывал при переполнении исходящей очереди. Флаг pak_priority в отличии от IPP/DSCP может назначаться не только IP-пакетам. Что очень важно для передачи пакетов(кадров) IS-IS, ARP, PPP и пр.

      Pak_priority работает только для исходящих пакетов.

      В самой сети pak_priority флаг никак не фигурирует. Он не представлен ни в одном заголовке пакета. Там работают флаги IPP/DSCP.

      Что касается статьи уважаемого crypby, было бы интересно посмотреть не на порт, который использует телеграм, а на значения IPP/DSCP. Т.е. как раскрашиваются пакеты. Именно это зачастую определяет то, как данный пакет будет обрабатываться в сети (при использовании модели DiffServ). Промежуточное устройство смотрит на значения IPP/DSCP в пакете и уже на основании их принимает решения, как его обработать в плане QoS (в какую очередь поместить, как дропать в случае переполнении и пр.).

      При этом в сети интернет значения IPP/DSCP чаще всего игнорируются или же просто сбрасываются, чтобы обычные пользователи не могли влиять, как им вздумается, на обработку пакетов промежуточными устройствами.

      В связи с этим у меня есть больше сомнения, что использование порта 520 с закосом под RIP, хоть как-то способствует лучшей проходимости трафика через сеть интернет.


      1. VitMain
        15.04.2017 12:48

        Вот плюсану. Самая простая лаба это доказывает
        Достаточно по дороге оператора, который сделал вот так
        !
        policy-map tst
        class class-default
        set dscp default
        !
        на исходящем интерфейсе и вся раскраска летит к чертям.


  1. sotnikdv
    15.04.2017 08:42
    +32

    > так почему бы не заставить эти мелочи работать на благо конечной цели?

    Я не очень понимаю восхищения автора этим решением. Как по мне — обычная хитрожопость, которая приведет к т.н. "Трагедии общин".

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

    А теперь из-за одного хитрожопого приложения будет страдать маршрутизация для всех.

    Все аналогии лживы, да, но это приложение-обочечник и приложение-тротуарный-ездун.

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


    1. mikhailian
      15.04.2017 10:20

      Странно, что минусуют вас на сайте, суть которого в увеличении общего блага с помощью стимулов вроде кармы.


      1. avost
        15.04.2017 14:02

        Банят нахрен на магистральных каналах ;)


    1. ksg222
      15.04.2017 21:28
      +3

      Телеграм не забанят, так как использование стандартного порта протокола RIP (520) никак не влияет на обработку этого трафика на промежуточных устройствах, тем более в сети интернет. Он ничем не будет выделяться среди другого трафика. Приоритет определяется значениями IPP/DSCP, при условии, что сеть настроена их учитывать. А сеть интернет по своей природе, как мы знаем, best effort (весь трафик обрабатывает с одинаковым приоритетом).

      Добрая половина этой статьи рассказывает про приоритезацию пакетов протокола динамической маршрутизации, что к пакетам телеграм не имеет абсолютно никакого отношения. Их связывает только то, что wireshark идентифицировал телеграм, как RIP. А сделал он это, так как увидел там порт с номером 520. А это совсем не означает, что все будут думать также.


  1. mikhailian
    15.04.2017 10:11
    +5

    Ну где же, где же граммарнаци? Грамматика в опасносте! Ошибка в заголовке!


    1. xenon
      15.04.2017 10:27
      -4

      А мне норм. Я вчера машину смотрел по объявлению. Каробка без нареканий зашита двигателя капот обклеен противо ударной пленкой не прокуриный салон музыка с хорошим качественым телевизорам люк вовсю крышу без ключивой доступ. продает собственик. возможен обмен на грузовечка трех тоника не дороже 500 соотвецтвено с вашей доплатой. (там еще текст есть, если кому не верится, могу дать. ссылку. машина очень битая на самом деле, так что не реклама :-) )

      Нормальный заголовок.


  1. servancho
    15.04.2017 10:16
    +2

    Когда гоняешь кучу UDP трафика на портах протоколов маршрутизации, это может выглядеть как подозрительная активность и тебя забанят. Так же что там с фрагментацией пакетов?


    1. D_T
      15.04.2017 19:12

      MTU не превышай и фрагментации не будет. По моему опыту достаточно знать MTU подключения конечной точки, т.к. оно меньше за счет всяких VPN при подключению к инету. В самом инете стандартные 1500 отлично проходят.
      Для определения MTU из конкретной точки достаточно посыла десятка пакетов с IP_DONTFRAGMENT на эхосервер в инете.


  1. Pas
    15.04.2017 11:45
    +7

    Не разделяю восхищение "находчивостью". Ни что иное, как злоупортебление. Учитывая, что RIP таки всё же уже по большей части rip, особенно в интер-нетворкинге, может быть и подропано на некоторых пограничных маршрутизаторах. Другое дело, что у Телеграма может быть какой-то следующий fallback механизм связи на обычных портах.


    1. servancho
      15.04.2017 15:08

      TCP на тех же портах )))


  1. nehrung
    15.04.2017 13:33
    +7

    Если здесь бывают ребята из команды Telegram, мне хотелось бы донести до них следующее:
    Прикручивать новые полезные фишки в ваш мессенджер — хорошее дело, но не первоочередное, ПМСМ. А в качестве первоочередного я бы предложил изменить способ авторизации новых пользователей, убрав оттуда требование ввести номер своей мобилы, и придумать что-то не столь деанонимизирующее пользователя. Задача не слишком сложная — ведь, скажем, команда, разрабатывающая Токс, смогла же её решить! А до тех пор вы не заманите в свои пользователи тех, кто реально заботится о своей приватности, а также тех, кто по каким-то личным причинам не желает иметь мобилу (таких в мире всё ещё немало).


    1. n1nj4p0w3r
      15.04.2017 13:55
      +5

      А разве телеграм позиционируется как анонимный im?
      Анонимные im — удел меньшинства готового обмениваться публичными сертификатами, общим секретом, придумывать свои механизмы синхронизации истории переписки и хранения приватного ключа. Широкой аудитории такие сложности не нужны, телеграм — это компромис между безопасностью и удобством пользования, что и обусловливает его популярность


      1. lgorSL
        16.04.2017 08:43

        Анонимные im — удел меньшинства готового обмениваться публичными сертификатами, общим секретом, придумывать свои механизмы синхронизации истории переписки и хранения приватного ключа.

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


        1. n1nj4p0w3r
          16.04.2017 16:39
          +1

          Спамеры выберут анонимный и тоже ничего не потеряют, а вот обычные пользователи только лишний головняк приобретут. Темболее присутствие у вас анонимной учетки не делает вас абсолютно анонимным до тех пор пока в вашем кругу общения есть хоть один не_параноик


    1. mistergrim
      16.04.2017 02:10

      > Задача не слишком сложная — ведь, скажем, команда, разрабатывающая Токс, смогла же её решить!

      Как бы нам решить, что же делать с противостоянием пчёл против мёда.
      Тут нечего решать. Номер телефона здесь — абсолютно лишняя сущность, которая, естественно, приватность лишь понижает катастрофически, а не повышает.


  1. phikus
    15.04.2017 14:28
    -2

    Не заметил особого качества — чудовищное эхо отбило всё желание пользоваться


    1. Sayonji
      15.04.2017 15:56

      Вы звонили на телефон в той же комнате что ли?


      1. za90
        15.04.2017 19:16

        Мы так втроём видеоконференцию по скайпу устроили… Было весело. Но у тс получился отрицательный опыт совсем не по этой причине.


      1. phikus
        17.04.2017 15:12

        Нет


    1. gvitalik
      15.04.2017 16:35

      Почему-то при подключении через WiFi тоже наблюдаю эхо. При звонках через мобильный интернет, качество отличное.


      1. crypby
        15.04.2017 16:40

        Вы звоните, наверное, через 2.4gHz WiFi. А соединение через секунд 10-20 после разговора подстраивается даже под самый плохой коннект. На крайний случай, после звонка всегда можно поставить 1* и написать в комменте echo. Вас заметят ;)


        1. za90
          15.04.2017 19:12

          как же команде Telegram удалось
          А им и не удалось. Подтверждаю эхо в 1 из 3 случившихся звонков. Разговаривал правда не долго, зато перезванивать пришлось, ибо звонок из сети опсоса в мой вайфай был вообще глухой. В двух других случаях через однояйцевого опсоса с обеих сторон никакой подстройки не потребовалось, звук был сразу нормальный. Мессенджер он и есть мессенджер. Счёт 2:1.


          1. D_T
            15.04.2017 19:16

            Опсосы очень сильно не любят UDP. Несколько лет назад потери пакетов были до 90%+, сейчас вроде получше, но все-равно рубят.


    1. asmrnv777
      16.04.2017 00:16

      Та же ерунда, услышал достаточно раздражающее эхо. При том, через 5 минут общался с тем же собеседником по скайпу, используя те же каналы связи — и все было ок.


  1. maiketa
    15.04.2017 15:56

    Не совсем понятно в какой момент снят дамп.
    Вы должны понимать, что сигнализация и голос это разные понятия.
    Сигнализация идет по порту RIP?
    Голос идет по порту RIP?
    Все вместе идет по порту RIP?
    Может с помощью RIP идет выбор ближайшего шлюза?


    Мессадж разработчикам:
    Было бы интересно помочь ребятам, можно ли поднять до вашего шлюза SIP trunk и присвоить каждому корп. абоненту 5 знаков? Может это можно даже как-то монетизировать.
    Было бы здорово встретиться, может получилось бы заключить коммерческий договор на оказание услуг.


    Компания в 5к абонентов по всему миру.


    1. kirillaristov
      16.04.2017 01:48

      Компания в 5к — это еще не круто.


  1. Ivan_83
    15.04.2017 23:54
    +4

    «протоколы маршрутизации RIP/RIP2/OSPF/EIGRP маркируются кодом 6. А это, на минуточку, предвысший, Internetwork Control приоритет.» —

    Клали все магистралы и провайдеры с прибором на IP QoS метки и будут класть, не нужно выдумывать.
    Многие просто сбрасывают на входе в свою сеть все метки.
    Хотите приоритета — платите, иначе очередь для всех одна.
    Любой желающий убедится может повесить свой любимый торрент клиент на этот порт и попробовать локально промаркировать трафик.

    И отдельно нужно понимать что далеко не все юзаюзают кошек, хуавей много кого потеснил и много где.

    Поэтому не надо тут мифотворчества, 1 апреля уже кончилось.
    Или тащите тесты/пруфы.

    PS: телеграм = фигня: привязывание к номеру мабилы и централизация — полный отстой.

    2 Pas
    Маршрутизаторы не будут трогать никакой клиентский траф, если только админ сам не зарезал для того чтобы DDoS уменьшить, но как правило этого не делают, и тот же ntp ещё жив, и днс запросы к клиентам пускают.
    Некоторые только smtp и самбу подрезали для клиентов.

    2 nehrung
    Не будут они от мабилы отвязываться. Наоборот, они будут в свой месенгер тянуть всё подряд, потому что по другому показать движуху они не могут, у них больше ничего нужного нет.
    Тут надо понимать что раньше там была популярная социалочка, в которой можно было воротить что угодно, а теперь ущербный месенгер где только текст. Ну вот теперь месенгер будут дотягивать до социалочки.
    Они продают себя как пастухов некоторого стада хомяков. Если они сделают p2p как в токсе то они станут никем и денег им никто не даст.
    Кроме uTorrent никто не отважился открыть исходники, протокол, и не привязывать юзеров к себе.

    2 n1nj4p0w3r
    Нет никакого компромисса.
    Мне удобнее почти что угодно, где не нужен номер мабилы.
    Скайп, мейл ру агент, аська, ирк, джаббер — это всё давно и круче.


    1. SirEdvin
      16.04.2017 13:07
      +1

      Вот про скайп было больно :)


      1. Ivan_83
        17.04.2017 01:08
        +4

        Это было очень мягко.

        Я ненавижу телеграм, потому что мне приходится его использовать по работе.
        Я ненавижу телеграм потому что это ущербный месенгер, который ни чем не лучше ирк которому уже более 20 лет, а хуже тем что привязан к своему серверу и требует номер мабилы, тем что под него нет удобных мне клиентов и при всём этом этот кусок дерьма подаётся как какое то достижение.

        Давайте я расскажу про историю IM, которую я пережил.
        1999 год.
        IRC, ICQ, Net Meeting (прямо в 98се венде из коробки)
        — передача текстовых сообщений
        — передача файлов
        — груповые чаты (кроме аськи)
        Дальше про нетмитинг:
        — возможность расшарить рабочий стол с приложениями и дать совместный контроль над клавой и мышкой — фактически удалённый мощник теперь.
        — возможность совместно рисовать во встроенном паинте — меня оч впечатлило
        — голосовой чат
        — видео звонки.
        Да, видео звонки. Да, в 1999 году. Во времена когда процов едва хватало чтобы жать звук на лету, а каналов модемных хватало тоже только на звук.

        2006-2008 год
        Скайп, мейл агент, мсн месенгер: чат, файлы, голос, видео.
        Аська и ирк на мобильниках с джавой.

        2010 или по позже.
        Жабер клиенты доросли до голоса и видео. (жабером не интересовался, может и раньше).

        2017 год.
        мсн давно мёртв.
        скайп теперь у мс и она его убивает, он стал похож на кусок говна которым противно пользоваться.
        мейл агент расжирел и оброс кучей свистелок, появился в мобиле, всосал аську, аол… и по сравнению со скайпом очень даже пригоден для чатов.
        появились p2p чаты типа токса и битмесаджа.

        И вот тут появляются какие то ущербные чатики для телефонов, которым подавай номер мабилы.
        Нет, это не оригинально, и даже не первая попытка. Когда то в мобилы встраивали какие то такие чатики но оно тогда не взлетело.
        Чего там в этих чатиках хорошего и нового?
        Да нихера там нет, продукт маркетинга и пеара для дрочеров телефонов, которые в жизни ни чем нормальным на компе не пользовались.

        Мегановость: в телеграмме появился голос.
        Ох, нихерасебе!
        В нетмитинге он был в 1999 году, в скайпе поди в 2004, в мейл агенте — 2006.
        С разморозкой!

        А там же ещё мегафича — боты?
        — боты всех в IRC успели задрать ещё к началу 200-х, в аське они перевелись году к 2005.

        Крипта.
        Да, раньше это было не актуально.
        Сейчас доверять можно только себе, а не каким то непонятным клиентам в дырявой на сквозь мобиле управляемой вендором через инет, а в случае андройда ещё и гуглом.
        Токс и битмесадж вполне себе на голову выше в этом вопросе, потому что каждый генерит закрытый ключ локально и он случайно не обновится когда чат сервер где то там прикажет.

        Те телега всё ещё по фичам не догнала даже нетмитинг 1999 года, мейл агент 2007 года.
        При этом жёстко привязана к своим серверам и мобиле.
        Как такое убожество вообще может существовать само, без вливания бабла в маркетинг и пеар?

        И сигнал, и вацапп и всё остальное — такой же продукт пеара и маркетинга с целью набрать стадо хомяков по больше и продаться по дороже, попутно реализуя чьи то политические/социальные амбиции (стать большим боссом к которому силовики челом бьют).

        Ну и про скайп.
        Он жутко скатился под МС.
        А после того как эти придурки убрали от туда P2P смерть скайпа стала неизбежной.
        Чисто по экономическим причинам.
        Любом массовый сервис это большие нагрузки. Авторы скайпа это поняли уже давно и он был p2p чтобы не грузить их сервера и каналы не нужными потоками трафика.
        Теперь мс будет платить за это, или анб это будет дотировать. Но однажды деньги и профиты посчитают и лавочку прикроют.

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


        1. gvitalik
          17.04.2017 09:10

          Ivan_83 ваш посыл относительно телеграма ясен. Но не понял только что вы бы использовали в качестве мессенжера? Судя по позитивным упоминаниям, то Net Meeting, но он вроде скопытился в последних версиях Windows.

          Мне например, не нравится токс тем что все реализации под IOS через несколько минут после переключения в другое приложение обрывают соединение, а а клиент у другого пользователя не может доставить сообщение, потому что клиент не в сети. Получается, чтобы вести переписку нужно заранее договариваться о времени и все пользователи должны сидеть в программе (проверял несколько месяцев назад, после этого пришел к выводу, что токс пока невозможно использовать, для переписки с большинством своих контактов). Хотя он вроде на голову выше многих вышеупомянутых месенджеров.


          1. Ivan_83
            21.04.2017 10:29

            Так это проблема IOS.
            У меня есть идеи как гонять оффлайн, но в токсе этого наверное не будет.
            Токс это реально следующее поколение месенгеров, хоть какое значимое технологическое улучшение.

            2 SirEdvin
            В миранде есть плагин для скайпа, так что чатится вполне реально.
            Поэтому я бы лучше в скайпе работал.
            На мобиле он у меня есть — иногда видео с родственниками, ну и нумера мобилы он не требует.
            Хотя скайп это тоже не серьёзно, там вон акки легко угоняют/блочат, но мне плевать чес говоря, ибо ценности я в этом не вижу.


        1. SirEdvin
          19.04.2017 16:25

          Конкретно в этом случае я к тому, что говорить, что скайп круче телеграма — это очень странно.


          Если у меня на работе перейдут со скайпа на телеграм — я буду только рад. Телеграм удобнее раз в 100, чем тот же скайп, он не глючит по крайне мере.


          Я не говорю, что Телеграм лучший месенджер на века (хотя на мой взгляд, он довольно неплох), но это первый месенджер после скайпа, который смог стать нашумевшим.


          Или вы бы лучше работали в скайпе?


          1. ivlad
            24.04.2017 19:40

            Я не говорю, что Телеграм лучший месенджер на века (хотя на мой взгляд, он довольно неплох), но это первый месенджер после скайпа, который смог стать нашумевшим.

            Вы серьезно так думаете?


            У Whatsapp и FB Messenger по 900 миллионов пользователей, у WeChat и QQ — по 850 миллионов, у Line — 200 с лишним миллионов. Телеграм — это просто небольшой локальный игрок, а не "нашумевший мессенджер". Даже у Viber число пользователей больше в разы.


            1. SirEdvin
              25.04.2017 09:37

              Как-то так сложилось, что для меня это так.
              Скажем, я не видел групп для IT-сообществ в Viber или FB Messenger.