Перейти к содержимому

Force tcp telegram что это

  • автор:

Занятная приоритизация голосового трафика в Telegram

Наверное, многим интересно, как же команде 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 использовали его порт, тем самым заставили многие маршрутизаторы на пути следования пакетов обрабатывать их трафик как очень важный, тем самым, очевидно, несколько сократив задержки.

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

  • IT-инфраструктура
  • Cisco
  • Сетевые технологии

Telegram составил инструкцию по обходу блокировки

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

На неофициальном канале команды Telegram была выложена инструкция, как обойти блокировку сервиса в России, если она вдруг случится. Читайте ее тут.

В инструкции сообщается, что команда включила в функционал поддержку соединения с прокси-серверами на основе протокола SOCKS5. Чтобы Telegram работал даже после блокировки, эту функция необходимо активировать (причем желательно до того, как месенджер заблокируют). Как действовать дальше, написано в инструкции.

1) Зайдите в настройки настольного Telegram и нажмите «По умолчанию (сейчас:TCP)»;
2) Переключите в меню «Тип соединения» на «TCP SOCKS5-прокси»;
3) Введите адрес прокси-сервера (например, 192.254.68.37), соответствующий порт (1080). Лучше использовать прокси-адреса Америки, Германии, Швеции или Англии. Затем ставите галочку «Использовать IPv6» и сохраняете.

Как найти прокси-серверы? Просто перейдите по следующим ссылкам:

Только берите сервер для SOCKS5, не перепутайте с HTTP.

Возможна настройка из этого бесплатного списка (socks — sockslist.net).

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

Протокол TCP: что нужно знать специалисту по анализу сетевого трафика!

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

В каких случаях нам нужен анализ TCP пакетов?

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

База анализатора трафика не имеет информации, в каком бите содержится код реквеста, какой код соответствует респонсу и т.д. В таких ситуациях приходится прибегать к самым азам сетевой науки – TCP анализу. Давайте рассмотрим, что прячет внутри себя этот протокол.

По своей сути TCP является протоколом транспортного уровня. Он позволяет осуществить соединение одного сокета (IP-адрес + порт) хоста источника с сокетом хоста назначения. Заголовок IP будет содержать информацию, связанную с IP-адресами, а заголовок TCP — информацию о порте.

Заголовок TCP

Заголовки TCP перемещаются по сети для установления, поддержки и завершения TCP-соединений, а также передачи данных.

Заголовок TCP

Рисунок 1. Заголовок TCP

В заголовке TCP содержаться следующие поля:

  • Source port (16 бит): порт источника. Порт хоста, от которого исходит запрос.
  • Destination port (16 бит): порт назначения. Порт хоста, куда направляется запрос.
  • Sequence number, SYN (32 бита): порядковый номер. Позволяет контролировать порядок сообщений. Каждая конечная точка (как порт источника, так и порт назначения) будут поддерживать свой уникальный порядковый номер для отправляемых сообщений. При установлении соединения TCP (используется сообщение с установленным флагом SYN) в качестве изначального порядкового номера будет сгенерировано случайное число. Вернее, не совсем случайно сгенерировано, а будет содержать конкретное 32-битное число, то есть в пределах от 0 до 4294967295 (или 2 в 32-ой степени возможных вариантов), которое будет соответствовать времени, прошедшему после перегрузки системы отправителя (из расчета +1 за каждые прошедшие 4 микросекунды), а также увеличенное на 64000 каждый раз при установлении нового соединения. Так как сгенерированное число будет уникальным для периода времени почти в пять часов (если при этом никакие соединения не устанавливались), то такой подход к выбору порядкового номера позволяет избежать случайных коллизий при передаче данных, когда для нескольких пакетов из разных соединений будет совпадать порядковый номер. В дальнейшем, при отправке следующих пакетов, значение порядкового номера будет увеличиваться на +1 для всех пакетов с флагом SYN, пакетов с флагом FIN и для каждого байта отправленных данных. Это позволяет принимающей системе обрабатывать пакеты в правильной последовательности, как они были сформированы при отправлении, а не в том порядке, как они были получены.
  • Acknowledgement number, ACK (32 бита): номер подтверждения. Когда сообщение содержит флаг ACK, то значение в номере подтверждения должно соответствовать следующему порядковому номеру (SYN), которое отправитель сообщения с флагом ACK ожидает получить от передающей системы. Таким образом, отправка одного номера подтверждения способна подтвердить получение всех байтов с информацией, полученных до этого. Более наглядно об использовании порядкового номера и номера подтверждения вы можете посмотреть на этом видео:
  • Data offset (4 бита): длина заголовка, известная также как смещение данных. Содержит размер заголовка TCP, измеряемый в 32-битных сегментах. Минимальный размер заголовка TCP составляет пять 32-битных сегментов (всего 20 байт), а максимальный — пятнадцать 32-битных сегмента (или 60 байт).
  • Reserved (3 бита): зарезервировано. Зарезервировано для будущего использования, пока просто забивается нулями. На данный момент осталось три незадействованных бита, в то время как еще три ранее зарезервированных бита уже используются как флаги.
  • Flags, 9 бит (флаги или управляющие биты):
    • NS (1 бит): одноразовая сумма (Nonce Sum). Используется для улучшения работы механизма явного уведомления о перегрузке (Explicit Congestion Notification, ECN).
    • CWR (1 бит): окно перегрузки уменьшено (Congestion Window Reduced). Данный флаг устанавливается отправителем, чтобы показать, что TCP-фрагмент был получен с установленным полем ECE. Таким образом, это является подтверждением получения пакета данных с флажком ECE от хоста получателя и включением отправителем механизма уменьшения перегрузки (Congestion Control), позволяющим оптимизировать отправку пакетов с данными в перегруженных сетях, избежав серьезных задержек из-за отбрасывания пакетов.
    • ECE (1 бит): ECN-Эхо (ECN-Echo). Выполняет двойственную роль, в зависимости от значения флага SYN. При установленном флаге SYN это указывает на то, что отправитель пакета поддерживает ECN. Если флаг SYN сброшен (SYN=0), а ECE установлен, то это означает, что пакет с установленным флагом CE (Congestion Experienced, Подтвержденная перегрузка) был получен в заголовке IP во время обычной передачи. Таким образом, это служит индикатором перегрузки сети (или предстоящей перегрузки) для TCP-отправителя.
    • URG (1 бит). Устанавливается, если необходимо передать ссылку на поле указателя срочности (Urgent pointer).
    • ACK (1 бит). Устанавливается, когда пакет содержит значение номера подтверждения в поле подтверждения. Все пакеты после стартового пакета SYN будут иметь установленный флаг ACK.
    • PSH (1 бит). Делает этот пакет пакетом PUSH (проталкивания). При нормальном потоке передачи данных система получателя не будет подтверждать получение каждого пакета сразу же после его получения. Вместо этого система получателя в течении некоторого времени будет собирать и хранить полученные данные в буфере, пока не передаст их приложению пользователя. Пакет PUSH инструктирует систему получателя немедленно передать все полученные ранее данные из буфера в приложение пользователя и сразу же отправить сообщение с подтверждением.
    • RST (1 бит): сброс данного соединения. Отправкой пакета RST одна из сторон сообщает о немедленном разрыве соединения. При этом соединение обрывается, а буфер очищается. Самые распространенные причины отправки пакета с установленным флагом RST — ответ на пакет, полученный для закрытого сокета; пользователь сам прервал соединение (например, закрыв браузер, не дожидаясь ответа); соединение не было нормально закрыто, но находится в неактивном состоянии некоторое время.
    • SYN (1 бит). Начинает соединение и синхронизирует порядковые номера. Первый пакет, отправленный с каждой стороны, должен в обязательном порядке иметь установленным этот флаг.
    • FIN (1 бит). Одна из конечных точек отправляет пакет с установленным флагом FIN для другой конечной точки, чтобы сообщить, что все пакеты были отправлены, и соединение пора завершить.

    Механизм передачи сообщений TCP

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

    1. Инициализация соединения.

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

    Трехстороннее рукопожатие TCP

    Рисунок 2. Трехстороннее рукопожатие TCP

    (Пакет №1). Клиент отправляет пакет с установленным флагом SYN и случайным числом («R1»), включенным в поле порядкового номера (sequence number).

    (Пакет №2). При получении пакета №1 сервер в ответ отправляет пакет с установленным флагом SYN, а также с установленным флагом ACK. Поле порядкового номера будет содержать новое случайное число («R2»), а поле номера подтверждения будет содержать значение порядкового номера клиента, увеличенного на единицу (то есть «R1 + 1»). Таким образом, он будет соответствовать следующему порядковому номеру, который сервер ожидает получить от клиента.

    (Пакет №3). В ответ на пакет SYN от сервера (пакет №2) клиент отправляет пакет с установленным флагом ACK и полем номера подтверждения с числом «R2 + 1». По аналогии, это число будет соответствовать следующему порядковому номеру, который клиент ожидает получить от сервера.

    1. Загрузка данных.

    После инициализации соединения полезная нагрузка будет перемещаться в обоих направлениях TCP-соединения. Все пакеты в обязательном порядке будут содержать установленный флаг ACK. Другие флаги, такие как, например, PSH или URG, могут быть, а могут и не быть установленными.

    1. Завершение соединения.

    При нормальном завершении TCP-соединения в большинстве случаев инициализируется процедура, называемая двухсторонним рукопожатием, в ходе которой каждая сторона закрывает свой конец виртуального канала и освобождает все задействованные ресурсы. Обычно эта фаза начинается с того, что один из задействованных процессов приложения сигнализирует своему уровню TCP, что сеанс связи больше не нужен. Со стороны этого устройства отправляется сообщение с установленным флагом FIN (отметим, что этот пакет не обязательно должен быть пустым, он также может содержать полезную нагрузку), чтобы сообщить другому устройству о своем желании завершить открытое соединение. Затем получение этого сообщения подтверждается (сообщение от отвечающего устройства с установленным флагом ACK, говорящем о получении сообщения FIN). Когда отвечающее устройство готово, оно также отправляет сообщение с установленным флагом FIN, и, после получения в ответ подтверждающего получение сообщения с установленным флагом ACK или ожидания определенного периода времени, предусмотренного для получения ACK, сеанс полностью закрывается. Состояния, через которые проходят два соединенных устройства во время обычного завершения соединения, отличаются, потому что устройство, инициирующее завершение сеанса, ведет себя несколько иначе, чем устройство, которое получает запрос на завершение. В частности, TCP на устройстве, получающем начальный запрос на завершение, должен сразу информировать об этом процесс своего приложения и дождаться от него сигнала о том, что приложение готово к этой процедуре. Инициирующему устройству не нужно это делать, поскольку именно приложение и выступило инициатором. Более подробно завершении TCP-соединения смотрите здесь (http://www.tcpipguide.com/free/t_TCPConnectionTermination-2.htm).

    Завершение TCP-соединения

    Рисунок 3. Завершение TCP-соединения

    • Keep-alive или повторное использование соединений

    На уровне TCP нет сообщений типа «keep-alive», и поэтому, даже если сеанс соединения в какой-то момент времени становится неактивным, он все равно будет продолжаться до тех пор, пока не будет отправлен следующий пакет.

    Когда мы отправляем HTTP-запрос по сети, нам сразу нужно создать TCP-соединение. Однако в HTTP 1.0 возможность повторного использования соединения по умолчанию закрыта (если заголовок «keep-alive = close» дополнительно не включен в заголовок HTTP), то есть TCP-соединение автоматически закрывается после получения запроса и отправки ответа. Так как процесс создания TCP-соединения относительно затратный (он требует дополнительных затрат процессорных ресурсов и памяти, а также увеличивает сетевой обмен между сервером и клиентом, что особенно становится актуальным при создании защищенных соединений), то все это увеличивает количество лагов и повышает вероятность перегрузки сети. Поэтому для HTTP 1.1 было решено оставлять TCP-соединение открытым до тех пор, пока одна из сторон не решит прекратить его.

    С другой стороны, если соединения не будут закрываться после того, как клиенты получат все необходимые им данные, задействованные ресурсы сервера для поддержания этих соединений не будут доступны другим клиентам. Поэтому HTTP-серверы, чтобы обеспечить больший контроль над потоком данных, используют временные интервалы (таймауты) для поддержки функциональности «keep-alive» для неактивных соединений (длящихся по умолчанию, в зависимости от архитектуры и конфигурации сервера, не более нескольких десятков секунд, а то и просто нескольких секунд), а также максимальное число отправляемых запросов «keep-alive», прежде чем сеанс без активного соединения будет остановлен. Более подробно о функциональности «keep-alive» вы можете узнать здесь (https://blog.stackpath.com/glossary/keep-alive/).

    Вступайте в Telegram канал проекта NetworkGuru, чтобы не пропустить интересные статьи и вебинары.

    Подписывайтесь на рассылку, делитесь статьями в соцсетях и задавайте вопросы в комментариях!

    Вечный параноик, Антон Кочуков.

    Скрытые возможности мессенджера Telegram: функции, о которых вы могли не знать

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

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

    Отправить самоуничтожающийся файл, который нельзя переслать

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

    Самоуничтожающийся файл нельзя посмотреть на десктопной версии телеграм, только на мобильной. На десктоп приходит сообщение с текстом «Contact_Name отправил(а) Вам самоуничтожающееся фото (видео). Посмотрите его на своём мобильном устройстве»

    Функция очень интересная, но для этого вам нужно будет использовать дополнительные меры безопасности. Данная функция доступна на смартфонах под управлением iOS и Android.

    Чтобы отправить самоуничтожающийся файл:

    • Открыть мессенджер «Telegram»;
    • Найти диалог и нажать на кнопку в виде скрепки, которая находится в поле для ввода текста;
    • Выбрать нужный файл для отправки;
    • Зажать синюю кнопку со стрелкой на несколько секунд;
    • Установить нужное время;
    • Нажать на кнопку «Задать таймер».
    Скрыть статус Онлайн в Telegram

    Еще одна интересная и полезная функция в Telegram, которая пригодится каждому, например, если вам нужно спрятаться от начальника или нежелательного собеседника. Данную функцию вы можете настроить самостоятельно.

    Для настройки данной функции вам необходимо выполнить несколько простых действий:

    • Запустить приложение «Telegram»;
    • Перейти в раздел «Настройки»;
    • В списке выбрать раздел «Конфиденциальность»;
    • Изменить время вашего последнего посещения в разделе «Последняя активность».

    Вы можете заблокировать всех или только ваши контакты, а также выбрать контакты, которые смогут всегда видеть ваш статус в сети или тех, кто никогда не сможет этого сделать.

    Однако, если вы скрываете от кого-то из контактов свой статус нахождения в сети, то и для вас статус этого контакта будет скрыт, и вместо времени последнего визита будет надпись «был(а) недавно».

    Секретный просмотр сообщений

    Иногда очень хочется прочитать полученное сообщение, которое вы не хотите сознательно открывать, так как собеседник получит уведомление о прочтении и не ответить — значит обидеть. Но, согласитесь, любопытство часто берет свое. Так что делать в данной ситуации?

    В настоящее время в Telegram вы не можете отключить оповещение для собеседника о прочитанном сообщении, так как данная функция не предусмотренна. Однако, если знать некоторые секреты и следовать инструкции, то можно просмотреть сообщение, при этом уведомление о прочтении не будет отправлено.

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

    Если вы будете следовать инструкции, то сообщение у вашего собеседника не будет отображаться как прочитанное.

    Есть еще один небольшой секрет для iOS. Чтобы незаметно прочитать сообщение, после его получения, вам стоит зажать палец на чате на несколько секунд. На экране вашего смартфона отобразится небольшое окошко, в котором вы можете прочитать полный текст сообщения.

    Бесплатный файлообменник «Избранное«

    В Telegram есть собственное хранилище, поэтому каждый пользователь мессенджера может бесплатно хранить свои личные фотографии, видео и другие файлы. Само хранилище создано на основе чата с самим собой, а вся загружаемая информация не занимает много места на смартфоне, так как хранится на серверах компании.

    Вы можете сохранять в хранилище «Избранное» любые файлы до 1,5 ГБ. С его помощью удобно передавать файлы, фото и простые ссылки с компьютера на смартфон, а также сохранять интересные записи с Telegram-каналов, файлы, которые могут понадобиться вам в офлайн-режиме и другое. Например, если вы собрались в поездку и вам нужно знать расписание движения транспорта, то сохранив его в «Избранное» расписание будет всегда под рукой.

    Таким образом в «Избранное» очень удобно хранить большое количество файлов совершенно бесплатно.

    Создать напоминание в мессенджере

    Наверняка у вас бывали такие ситуации, когда просто забываешь о предстоящем событии, а это порой влечет за собой большие неприятности. В такой ситуации пригодится дополнительная функция Telegram.

    Мессенджер вовремя напомнит вам о заранее запланированном событии. Напоминание придет в виде обычного сообщения.

    Чтобы создать напоминание нужно выполнить следующие действия:

    • Открыть мессенджер «Telegram»;
    • Перейти в раздел «Избранное»;
    • Написать текст напоминания;
    • Зажать кнопку отправки;
    • Выбрать «Задать напоминание»;
    • Указать дату и время;
    • Нажать кнопку «Напомнить».

    Все очень просто. Telegram пришлет вам сообщение с вашим текстом в указанный срок.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *