О протоколах передачи данных по сети

Протоколы компьютерных сетей

Сетевой протокол – это набор правил, который позволяет обмениваться данными нескольким устройствам связанным сетью. Ни одно удалённое подключение не может обойтись без работы протоколов, без них система просто не знала бы как взаимодействовать и общаться. Если обобщать, то можно сказать что это семейство стандартов, предписывающее методы общения, а также спецификации оборудования.

Для описания и деления протоколов используется семиуровневая модель OSI (Open System Interconnection — взаимодействие открытых систем, ВОС). В этой классификации описываются все формы взаимодействия необходимые для полноценной работы оборудования:
• Приложение;
• Представление;
• Сеанс;
• Транспорт;
• Сеть;
• Передача данных;
• Физическое воплощение.

Что часто интересует программиста, занимающегося сетевыми технологиями?

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

Как правило (но, не всегда), специалисты, работающие в одной из трех областей, мало пересекаются друг с другом. Чему способствует, конечно, и широкое распространение в настоящее время различных прикладных библиотек. Поэтому, скажем, в 95% случаев Web-разработчики избавлены от «низкоуровневых раздумий» о том, какие детали, как работают транспортные, сетевые протоколы. И в этом плане им совершенно неинтересны языки С/С++, не говоря уже об Ассемблере. Тогда как разработчики физических сетевых устройств (сетевых карт, роутеров, модемов), а также программного обеспечения (драйверов) к ним, как правило, не беспокоятся о том, по каким высокоуровневым протоколам будет происходить соединение этих устройств друг с другом. Как раз для них актуален Ассемблер, отчасти С и некоторые другие низкоуровневые языки.

Разработчики «среднего уровня» — это те, кого интересуют программные среды, в которых будут функционировать и использоваться web-страницы. К ним относятся, в частности, браузеры и серверы. Речь идет, например, о таких серверах, как Apache, Ngnix и др. Что касается, браузеров, их перечень, видимо, не нуждается в разъяснении. Кроме того, на этом же уровне осуществляется настройка, физическое конфигурирование сетей (хотя, все то, что связано с администрированием сетей, как правило, не относится к области программирования).

Такое вот разделение обязанностей обусловлено тем, что работа осуществляется на соответствующих уровнях протоколов, где применяются свои методы, технологии и языки программирования. Существует, конечно, узкая «прослойка» программистов – мастеров на все руки, которые способны создавать программные коды и на Ассемблере (могут выполнить или подредактировать драйвер сетевого модема), а также вполне способны создать современный сайт (или иное клиент-серверное приложение). Но, таких широких специалистов, плюс к тому, детально разбирающихся во всех этих вопросах, на сегодняшний день не так уж и много. Ибо каждый для себя выбирает ту или иную нишу и уже работает там. Здесь в статье мы попробуем сделать обзор преемственности сетевых технологий, начиная с «самого малого».

Физический уровень

На этом уровне программист имеет дело непосредственно с настройкой работы сетевого устройства. Программа, которую он делает, будет называться драйвером (низко- или высокоуровневым). Программист имеет дело с электрическими сигналами (характеризующими логические 0 или 1) и, соответственно, их указанными битовыми представлениями. Задача программиста при считывании данных с сетевого устройства – правильным образом обработать поступающие от него электрические сигналы, преобразовать их в биты (если такое преобразование еще не было выполнено, например, контроллером устройства), организовать их передачу по сети и прием адресатом. Никаких сообщений, тем более, файлов на этом уровне нет, разработчик и не думает об этом. Он, конечно, может принимать во внимание, что впоследствии биты, с которыми имеет дело сетевое устройство, будут формироваться в байты, а последние будут входить в состав файлов, строковых сообщений и др. Однако, это – лишь для того, чтобы, быть может, сделать оптимальную конфигурацию сетевого устройства. Например, учитывая оптимальный размер блоков оперативной памяти, он может разработать такой контроллер устройства, который будет иметь объем памяти, кратный степени 2, например, 1024 байта.

Так как этот уровень имеет дело с электрическими сигналами в виде битов, соответственно, их источником и адресатом являются соответствующие физические сетевые устройства (например, модемы и/или сетевые карты). Эти физические устройства могут быть связаны друг с другом посредством той или иной среды передачи – USB-кабель, оптоволокно, радиоканал и т.п. На физическом уровне вообще не идет речи об IP-адресах, доменах, URL и т.п. Эти абстракции появляются на более высоких уровнях модели OSI.

Здесь играет роль правильность составления кадра из битов, для чего используются различные способы низкоуровневого или физического кодирования: манчестерский код, дифференциальное, потенциальное кодирование, NRZ, БВН и многие другие способы. Физическое кодирование осуществляется в рамках соответствующих стандартов, например, IEEE 802.3 .

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

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

1101100001 0 011

Некоторые биты могут попросту затеряться, а некоторые – добавиться дополнительно взамен потерянных. В итоге — серверу придет не тот кадр, который был отправлен клиентом (источником). Так вот, физическое кодирование и служит для того, чтобы если не полностью избавиться от ошибок передачи кадров битов, то, по крайней мере, свести такие ошибки к минимуму. Если в процессе передачи возникла ошибка (по крайней мере, один бит передан неверно), то передачу кадра, содержащего этот бит, придется повторять – до тех пор, пока не будет передан правильный кадр или до тех пор, пока сетевое соединение не будет прервано.

Канальный уровень

На этом уровне происходит контроль правильности составления кадров (фреймов). Типичный размер фрейма – 1 кБ. При разработке стеков протоколов на канальном уровне осуществляется помехоустойчивое кодирование. К таким способам кодирования относится код Хемминга, блочное кодирование, код Рида-Соломона. В программировании этот уровень представляет драйвер сетевой платы, в операционных системах имеется программный интерфейс взаимодействия канального и сетевого уровней между собой. Это не новый уровень, а просто реализация модели для конкретной операционной системы. Здесь, как и на физическом уровне, также пока нет ни байтов, ни файлов, ни т.п.

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

Взаимодействие на канальном уровне осуществляется, также как и на физическом, естественно, между физическими устройствами. Однако, для адресации используются так называемые МАС-адреса (аппаратные адреса). Они имеют следующий примерный вид (в шестнадцатеричном представлении):

Каждый компьютер в сети интернет имеет СВОЙ уникальный аппаратный адрес. МАС-адрес источника и адресата входят в состав кадра, формирующегося на канальном уровне. Отметим, что и здесь никаких IP-адресов, доменных имен и др. нет в помине. Речь идет просто о передаче битовых кадров от сетевого устройства с одним МАС-адресом другому устройству (с другим MAC-адресом). Именно так работает современный интернет в подавляющем большинстве случаев.

Следует иметь в виду, что сервер (компьютер-адресат), получая пакеты от клиента (например, от браузера), естественно, получает и МАС-адрес компьютера, на котором запущен. браузер. Так же, как и его IP-адрес. И если IP-адрес несложно подменить, например, путем соединения с сервером-адресатом через прокси-сервер, то подмена МАС-адреса представляет собой куда более сложное занятие. Ранние версии операционных систем Linux, как правило, позволяли делать такую подмену на пользовательском уровне. Тогда как современные версии это запрещают (надеемся, понятно, почему). Впрочем, конечно, никто никому не мешает заново собрать и перекомпилировать ядро операционной системы, в котором уже предусмотреть такую замену. Однако, сделать это способен далеко не каждый программист. Или же можно использовать такой прокси-сервер, который будет парсить заголовки протоколов канального уровня и записывать в них какой-нибудь другой МАС-адрес.

Поэтому КАЖДЫЙ, кто выходит в интернет со своего компьютера, на котором установлена стандартная операционная система, типа Windows, Linux, MacOS, Android и т.п., неважно, через прокси-сервер или напрямую, должен ясно понимать, что МАС-адрес его компьютера может быть известен серверу-адресату . Если только, повторимся, он не использует такой прокси-сервер, который способен сделать подмену МАС-адреса. В общем же случае ЛЮБОЙ сервер способен точно идентифицировать пользователя — именно по его MAC-адресу. Кстати, этот аргумент когда-нибудь вполне сможет использовать Раскомнадзор, если ему будет дана команда — заблокировать интернет. Тут же в СМИ возникнут статьи на тему: «А Вы знаете, что любой сервер знает о ВАС ВСЁ?». Вот, мол, Раскомнадзор стал настолько заботлив о пользователях интернета, что решил защитить их от него. Причем, отметим, что Яндекс- и Google-метрики — это сущий пустяк по сравнению с этим. Ни Google, ни Яндекс не собирают информацию о МАС-адресах посетителей сайтов. Ну, по крайней мере, с их слов.

Аналогию можно привести в отношении сотовых телефонов. Ведь любой сотовый телефон представляет собой устройство, подключенное к внешней сети (через ближайшую вышку сотовой связи). КАЖДЫЙ сотовый телефон имеет уникальный МАС-адрес, как и компьютер, ноутбук и т.д. Поэтому ЛЮБОЙ сотовый оператор способен в течение нескольких секунд идентифицировать, с какого именно телефона производится звонок (вызов) на конкретную вышку. А телефонный номер здесь, по идее, и не столь важен, сим-карта может быть вообще любая, это не имеет значения. Может возникнуть вопрос: почему же тогда так называемые «правоохранительные» органы зачастую утверждают, что, якобы, «не могут найти» краденые сотовые телефоны? Ответ: потому, что не хотят или не имеют полномочий. Впрочем, может и хотят, и имеют полномочия, но кто-то вышестоящий запрещает им это делать. Другое дело, что ряд сотовых телефонов можно перепрошить, т.е. подменить в них МАС-адрес. Но, разве те, кто воруют телефоны, а также те, кто покупает краденые телефоны — это всегда делают? Как правило, нет. Ибо и те, и другие прекрасно осведомлены о том, что ни с какими такими МАС-адресами никто дела иметь не будет. Ну, за исключением особо важных случаев, конечно (точнее, «особо важных персон»). Там-то, да, будут смотреть не только МАС-адреса, а и многое другое.

Может возникнуть вопрос: а куда же делись HTTP-запросы (GET, POST), заголовки HTTP(S)-протоколов и многое другое, столь известное веб-разработчикам? Ответ : вся эта информация как раз и содержится в этих самых кадрах (в виде определенных последовательностей битов), путешествующим по сети от устройства с одним МАС-адресом к другому. Ниже, на схемах мы увидим область, в которой хранятся эти данные.

Сетевой уровень

На этом уровне протоколов появляется такая сетевая абстракция, как IP-адрес узла сети. Придумана она исключительно для того, чтобы компьютерам (точнее, пользователям компьютеров) проще было взаимодействовать друг с другом. Чтобы на основе IP-адресов можно было выделять классы сетей, осуществлять защиту от доступа и т.п. Хотя, повторимся, все это вполне можно было бы осуществить, используя исключительно МАС-адреса, не пользуясь технологией IP-адресов.

Раньше, когда интернет еще не был развит столь существенно, как сегодня, на каждом компьютере, подключенном к сети, хранились специальные файлы, содержащие соответствия MAC-адресов узлов сети их IP-адресам. В настоящее время такая информация хранится централизованно, на специальных серверах DNS. Если узел сети (источник) желает отправить сообщение на какой-либо IP-адрес, он вначале, при помощи протокола ARP, отсылает в сеть широковещательный запрос типа «какой из узлов имеет такой-то IP-адрес». Если такой узел в сети находится, источнику отсылается ответное сообщение, в котором фигурирует искомый MAC-адрес компьютера с указанным в запросе IP-адресом. Этот полученный МАС-адрес используется протоколами канального уровня (см. выше) для организации сетевого соединения.

Т.е. еще раз следует подчеркнуть: фактически, связь осуществляется на основе МАС-адресов. Тогда как IP-адреса используются больше для организации сетевого взаимодействия, понятного не только для компьютеров, но и для людей.

Уровни OSI

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

Сетевой протокол — это правила и технические процедуры, позволяющие компьютерам, объединенным в сеть, осуществлять соединение и обмен данными.
Группа протоколов, объединенных единой конечной целью, называется стек протоколов.

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

Задачи компьютера ОТПРАВИТЕЛЯ:

  • Взять данные из приложения
  • Разбить их на мелкие пакеты, если большой объем
  • Подготовить к передаче, то есть указать маршрут следования, зашифровать и перекодировать в сетевой формат.

Задачи компьютера ПОЛУЧАТЕЛЯ:

  • Принять пакеты данных
  • Удалить из него служебную информацию
  • Скопировать данные в буфер
  • После полного приема всех пакетов сформаровать из них исходный блок данных
  • Отдать его приложению

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

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

Разберем их подробнее.

7. Прикладной уровень (Application Layer)

Его задача забрать у сетевого приложения данные и отправить на 6 уровень.

6. Уровень представления (Presentation Layer)

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

5. Сеансовый уровень (Session Layer)

У него много задач.

  1. Установить сеанс связи с получателем. ПО предупреждает компьютер-получатель о том, что сейчас ему будут отправлены данные.
  2. Здесь же происходит распознавание имен и защита:
    • идентификация — распознавание имен
    • аутентификация — проверка по паролю
    • регистрация — присвоение полномочий
  3. Реализация того, какая из сторон осуществляет передачу информации и как долго это будет происходить.
  4. Расстановка контрольных точек в общем потоке данных для того, чтобы в случае потери какой-то части легко было установить, какая именно часть потеряна и следует отправить повторно.
  5. Сегментация — разбивка большого блока на маленькие пакеты.

4. Транспортный уровень (Transport Layer)

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

  • Протоколы, которые ориентированы на соединение — они отслеживают доставку данных и при необходимости запрашивают повторную отправку при неудаче. Это TCP — протокол контроля передачи информации.
  • Не ориентированные на соединение (UDP) — они просто отправляют блоки и дальше не следят за их доставкой.

3. Сетевой уровень (Network Layer)

Обеспечивает сквозную передачу пакета, рассчитывая его маршрут. На этом уровне в пакетах ко всей предыдущей динформации, сформированной другими уровнями, добавляются IP адреса отправителя и получателя. Именно с этого момент пакет данных называется собственно ПАКЕТОМ, у которого есть IP адреса (IP протокол — это протокол межсетевого взаимодействия).

2. Канальный уровень (Data Link Layer)

Здесь происходит передача пакета в пределах одного кабеля, то есть одной локальной сети. Он работает только до пограничного маршрутизатора одной локальной сети. К полученному пакету канальный уровень добавляет свой заголовок — MAC адреса отправителя и получателя и в таком виде блок данных уже называется КАДРОМ.

кадр в эталонной модели

При передачи за пределы одной локальной сети пакету присваивается MAC не хоста (компьютера), а маршрутизатора другой сети. Отсюда как раз появляется вопрос серых и белых IP, о которых шла речб в статье, на которую была выше дана ссылка. Серый — это адрес внутри одной локальной сети, который не используетс яза ее пределами. Белый — уникальный адрес во всем глобальном интернете.

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

Сетевой ip адрес

1. Физический уровень (Transport layer)

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

Как работают протоколы TCP/IP

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

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

Стеки

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

  • Подготовку информации
  • Ее передачу
  • Прием информации
  • Вспомогательные действия

Подобное разбиение на функции позволяет протоколам работать слаженно. Несколько протоколов, которые работают одновременно, в связке принято называть стеком. В большинстве современных протоколов уровни в стеке совпадают с уровнями основополгающей моделью OSI, которая была разработана и утверждена сертификационным комитетом ISO в 1984 году. Стек представляет собой некий конгломерат протоколов, являя собой единое целое. Стек делиться по алгоритмическим уровням. Каждый из этих уровней для выполнения своих задач использует собственный протокол. Для каждого уровня применим собственный набор правил. В соновном принято выделять три типа стеков:

  • Прикладные. Такие протоколы работают на высшем уровне в соответствии с моделью OSI. Они обеспечивают обмен данными между OSI-уровнями.
  • Сетевые. Эти протоколы обеспечивают поддержку сеансов связи между компьютерами. Фактически они являются гарантией качественной и надежной связи.
  • Транспортные. Такие протоколы наиболее популярны, и занимаются предоставлением услуг связи. На деле они управляют маршрутизацией, маршрутизацией, проверкой ошибок, а также запросами на повторную передачу данных.

Протоколы можно добавлять, удалять и выборочно привязывать ко всем сетевым интерфейсам сервера. По умолчанию порядок привязки протоколов определяется последовательностью, в которой они были установлены. Но при этом администратор всегда может изменить этот порядок для отдельных интерфейсов, что делает процесс управления более гибким. Например, к одному интерфейсу могут быть привязаны протоколы TCP/IP и IPX/SPX с приоритетом протокола TCP/IP, a к другому — те же протоколы, но с приоритетом IPX/SPX. Кроме того, для отдельных сетевых интерфейсов, протоколов и их комбинации можно произвольно включать или отключать сетевые службы. Это позволяет администраторам легко создавать защищенные конфигурации сети (например, отключить все сетевые службы для общедоступных интерфейсов с прямым подключением к Интернету).

Adblock
detector