К основному контенту

Транспортный уровень модели OSI или как осуществляется передача по TCP/IP


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


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

Наверное, многие из вас слышали такие слова как SYN-FLOODING или IP-SPOOFING. Все это разновидности атак - первая D.O.S. (атака на вывод из строя ресурса сети интернет), вторая состоит в подмене IP-адреса. На первый взгляд между этими примерами нет ничего общего, но между тем, это не так - обе эти атаки не возможны без знания протокола TCP, протокола на котором построена сеть Интернет.

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

Начнём

Данные в сети, передаются в виде пакетов. Такая организация передачи означает, что данные, какого размера они ни были, разбиваются на отдельные фрагменты, которые формируются в пакеты (формирование пакетов предполагает, что к данным прибавляется служебный заголовок), после чего в виде пакетов данные передаются по сети (причем порядок передачи пактов может нарушаться). Принимающая система "собирает" из пакетов исходный массив данных на основании заголовков пакетов. Это не очень понятно, но только до тех пор, пока не рассмотрим структуру пакетов.

Структура TCP-пакета:

Структура TCP-пакета




Поясню только самые важные места:

Адрес получателя, порт получателя и адрес отправителя, порт отправителя - это надеюсь понятно.

Sequence Number (SYN) - номер очереди или последовательный номер, показывает порядковый номер пакета при передаче, именно поэтому принимающая система собирает пакеты именно так, как надо, а не в том порядке, как они пришли.

Acknowledgment Number (ACK) - номер подтверждения, показывает, на пакет с каким SYN отвечает удаленная система, таким образом мы имеем представление, что удаленная система получила наш пакет с данным SYN.

Контрольные биты- 6 бит (на схеме между reversed и window). Значения битов:

URG: поле срочного указателя задействовано
ACK: поле подтверждения задействовано
PSH: функция проталкивания
RST: перезагрузка данного соединения
SYN: синхронизация номеров очереди
FIN: нет больше данных для передачи

DATA - это непосредственно те данные, которые мы хотим передать.

Думаю, для начала это все, что нужно, чтобы понять принцип работы протокола. Более подробно о значении остальных полей ты можешь прочитать в в RFC793. Ну а мы лучше разберем как же все-таки это работает на практике.

Когда мы хотим установить соединение, мы отправляем удаленной системе пакет следующей структуры:

Client --- SYN (856779) --- Host

Где Client- это мы, a Host - это удаленная система. Как ты видишь, мы посылаем пакет лишь с указанием SYN - это значит, что этот пакет первый, мы ни на что не отвечаем (отсутствует ACK). Данный пакет выглядит примерно так:

20 53 52 43 00 00 44 45 53 54 00 00 08 00 45 00 00 2C C3 00 40 00 20 06 10 0C CB 5E FD BA CB 5E F3 47 04 07 00 17 00 0D 12 CB 00 00 00 00 60 02 20 00 D9 70 00 00 02 04 05 B4 2D

Интересный момент в том, откуда берется SYN. SYN образуется от первоначального номера очереди (ISN) - это 32-битный номер от 1 до 4294967295 (2 в 32-ой степени). ISN при перезагрузке системы равен 1, затем каждую секунду он увеличивается на 128000 (строго говоря изменение происходит каждые 4 микросекунды) + при каждом установленном соединении он увеличивается на 64000. Получается, что цикл уникальности ISN, при условии того, что никакие соединения не устанавливались, составляет примерно 4,55 часа. Поскольку ни один пакет так долго по сети не путешествует, мы можем полагать, что SYN будет абсолютно уникальным.

Получив наш пакет, удаленная система отвечает, что получила и готова установить соединение. Данные пакет выглядит так:

Host --- SYN (758684758) и ACK (856780) --- Client

Как видишь, удаленная система дает понять, что получила наш пакет. Для этого она посылает нам ACK с номером "наш SYN+1". В добавок к этому удаленная система посылает нам свой SYN (мы же тоже будем отвечать). А ответ наш будет такой:

Client --- SYN (856780) и ACK (758684759) --- Host

Думаю тебе уже должно быть все понятно. Если кто не понял, то пакет означает следующее: ваш пакет с SYN (758684758) получен, соединение установлено, наш SYN равен 856780.

Эту процедуру называют "троекратным подтверждением" или "троекратным рукопожатием". Первые два этапа необходимы для синхронизации SYN наших систем, а третий - подтверждение того, что синхронизация произошла.

Далее у нас идет обмен данными, то есть то, ради чего соединение и устанавливалось. Причем надо заметить, что на всех стадиях обеспечение сохранности данных, передаваемых с использованием протокола TCP, осуществляется следующим образом: посланный пакет помещается в буфер и если за определенное время от удаленной системы не приходит пакет с подтверждением (ACK), то пакет посылается снова; если же подтверждение пришло, то пакет считается посланным успешно и удаляется из буфера.

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

Client --- FIN(4894376) и ACK (1896955378) --- Host

Host --- ACK (4894377) --- Client

Host --- FIN (1896955378) и ACK (4894377) --- Client

Client --- ACK (1896955378) --- Host

Думаю, ничего сложного здесь нет. Единственное, что стоит отметить - это флаг FIN, который означает желание завершить соединение.

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

Передача одного FIN Пакета = +1
Передача одного SYN Пакета = +1
Передача одного ACK Пакета = 0
Передача одного SYN/ACK Пакета = +1
Передача одного FIN/ACK Пакета = +1
Изменение за 1 секунду = +128,000
Установление одного соединения = +64,000

Возможно, кто-то спросит: "А что будет, если машин получит пакет с таким ACK, которого не было?" (SYN=ACK-1, а пакет с таким SYN мы не посылали). Получив ответ непонятно на что, мы в свою очередь ответим удаленной системе NACK-пакетом (означает "не знаю о чем ты", никакого соединения не устанавливается), но, надеюсь, более подробно мы поговорим с тобой об этом в следующий раз.

Комментарии

Популярные сообщения из этого блога

Почему инженеры электросвязи становятся продажниками

Давно предупреждал инженеров электросвязи - если вы не развиваетесь, то рано или поздно превратитесь либо в дворника, либо в ассенизатора. О чем не предупреждал, каюсь, - так это о том, что локальный апокалипсис наступит прямо сейчас. Взять, например, сетевых инженеров  Ростелекома, которые бодро так искали, кого ещё подключить к интернету последние пару недель в Сочи и в Адлере. Скажете, инженеров заставляют работать продажниками - произвол и несправедливость? Лично я в этом совершенно не уверен. Чтобы было сразу понятно, о чем речь, готов проиллюстрировать свою мысль как работодатель. Мы ведь имеем здесь потенциальный конфликт в отношениях между работником и Ростелекомом , верно? И пока возмущенная общественность твердо стоит на стороне работника, предлагаю посмотреть чуть шире — не со стороны работодателя даже, а так, сбоку. Давайте возьмем, например, меня — типичного работодателя. Так случилось, что на меня работает некоторое количество весьма лояльных и толковых людей, ч

Минфин хочет начать скупать валюту для пополнения резервного фонда

О планах по пополнению Фонда национального благосостояния более, чем на 518 млрд рублей в период с 9 ноября по 6 декабря заявило Министерство финансов РФ. По заявке Минфина ЦБ РФ будет ежедневно скупать валюты почти на 26 млрд рублей. Это почти в два раза больше, чем в октябре. В общей сумме планируется скупить 7,2 млрд долларов. Это максимальная цифра за все годы действия бюджетного правила, в соответствии с которым доходы от нефти при цене выше 43 долларов за баррель направляются в резервы, а не на развитие экономики. Предыдущий рекорд был поставлен в мае 2018, когда регулятор скупил для Минфина 6 млрд долларов. Несмотря на сложную ситуацию в экономике и проблемы, вызванные пандемией, власть продолжает наращивать резервы. В целом планируется скупить валюты на 518 млрд рублей. Сюда входят почти 410 млрд рублей, которые будут получены от продажи нефти, а также 108 млрд от ее экспорта в октябре. В соответствии с бюджетным правилом, федеральный бюджет верстается исходя из цены на нефть в

Чем рискуют дропы и нальщики принимая заливы на свои карты

Зам.начальника управления Следственного департамента МВД Павел Сычев рассказал о криминальном бизнесе «нальщиков» - Глава Банка России Эльвира Набиуллина заявила о снижении объемов теневого оборота в конце 2013 года. Что показывает ваша статистика по выявлению незаконных операций? - В последние годы объем денежных средств, выведенных в теневой сектор, увеличивался, и криминогенная обстановка ухудшалась. Проблема находится в поле зрения президента -  в декабрьском послании Федеральному Собранию, он призвал избавить нашу финансовую систему от разного рода «отмывочных контор» и так называемых «прачечных». Оперативники уже получили ориентировку на более активное выявление этих преступлений. П о уголовным делам, расследованным МВД только в первом полугодии 2013 года, проходит 145 млрд рублей, обналиченных и незаконно выведенных заграницу. Это неуплаченные налоги, незаконный бизнес, хищения, взятки. Финансовый доход посредников от этих операций составил 8 млрд рублей. Расследовано 89

Как работает банк со своими корреспондентами по SWIFT

Итак, наш банк имеет открытые корреспондентские счета в США (CITIBANK N.A. NEW YORK), в Европе (VTB BANK DEUTSCHLAND AG), в России (Промсвязьбанк Москва и Собинбанк Москва). Соответственно, все расследования по платежам происходят через эти банки согласно  установленным корреспондентским отношениям с использованием соответствующих форматов SWIFT MT-195/295, MT-196/296, MT-199/299 и MT-192/292 Кроме прямых корреспондентских отношений с банками, нашим банком установлены отношения и с другими финансовыми организациями через процедуру обмена ключами, что даёт возможность использовать SWIFT-форматы МТ-195, МТ-196 и МТ-199 для проведения процедуры расследования по стандартным платежам и платежам с покрытием: - DEUTSCHE BANK TRUST COMPANY AMERICAS USA - COMMERZBANK AG Germany - CITIBANK N.A. London - CITIBANK N.A. Brussels - BANQUE DE COMMERCE ET DE PLACEMENTS S.A. Geneva - NORVIK BANKA JSC  LV - ABLV BANK AS  LV В среднем процедура расследования занимает от 3 до 14 дней (е

как Сбербанк выявяет активность дропов и дроповодов

Компания SixGill, исторически связанная с подразделением 8200 , занимающимся радиоэлектронной разведкой в израильской армии, оказывает Сбербанку "информационные услуги" по выявлению угроз в даркнете и Telegram. Ряд других российских банков тоже использует инструменты для мониторинга сети tor. "Народ, здравствуйте, я раздобыл вход в приложение Сбербанк одного человека, знаю, что в понедельник у него зарплата. Как лучше всего вывести бабки оттуда, чтобы не вышли на меня?" - такие сообщения можно легко обнаружить практически в любом популярном чате обнальной тематики в Telegram. Когда автор сообщения - с набором символов вместо имени и милой аватаркой с котом - не пытается "вывести" чужую зарплату, он промышляет банковскими картами от 3 тыс. рублей за штуку. Он состоит, по меньшей мере, в 18 таких чатах и обещает доставить "пластик" курьером по Москве и Санкт-Петербургу в комплекте с сим-картой, пин-кодом, фото паспорта и кодовым словом. Такие оформ

М9 - точка обмена трафиком • Московский INTERNET EXCHANGE • MSK-XI

Вот так всё начиналось Изначально был всего один провайдер - Релком. Не было конкурентов - не было проблем. Рунет еще делал свои первые шаги, и все русскоязычные ресурсы были сосредоточены в одном месте. Позже Релком развалился на Релком и Демос, стали появляться другие провайдеры. Рунет тем временем подрос и... распался на множество отдельных сетей-сегментов, контролируемых разными провайдерами. Разумеется, конечные пользователи имели доступ ко всем ресурсам рунета, но прямого взаимодействия между провайдерами не было. Поэтому трафик шел с сервера одного провайдера по огромной петле через Америку, потом Германию, и только потом возвращался на сервер другого провайдера. Имела место неоправданная потеря и в скорости, и в деньгах. Пока трафик был незначительным, это мало кого волновало, но интернет бурно развивался, трафик по рунету стремительно увеличивался, и в один прекрасный день крупные провайдеры Москвы (по сути, Демос и Релком) сели друг напротив друга и решили, что им надо нал