Сетевой протокол — это набор правил и соглашений, используемых для связи устройств на определенном сетевом уровне. Протоколы обеспечивают и определяют формат обмена информацией между участниками компьютерных сетей. В работе сетей задействуется большое количество протоколов. Например, загрузка страницы в браузере — это результат работы, организованной согласно нескольким протоколам:
Множество протоколов можно классифицировать по сетевым уровням, на котором они работают. Наиболее распространенные сетевые модели — это OSI и TCP/IP. В рамках этого материала мы расскажем об этих моделях и опишем часто используемые протоколы.
В этом разделе мы введем основные сетевые термины, необходимые для дальнейшего повествования.
Сеть — это совокупность цифровых устройств и систем, которые соединены друг с другом (физически или логически) и обмениваются данными. Элементами сети могут выступать серверы, компьютеры, телефоны, роутеры, умная лампочка с Wi-Fi и так до бесконечности. Размер сети может быть каким угодно — два соединенных кабелем устройства образуют сеть. Данные, передаваемые по сетям, оформляются в пакеты* — специальные блоки данных. За правила создания этих блоков отвечают соответствующие протоколы.
*Некоторые системы компьютерной связи не поддерживают пакетный режим передачи данных, например телекоммуникационная связь точка-точка. В них данные передаются просто в виде последовательности битов. Использование пакетного режима позволяет эффективнее распределять трафик между участниками сети.
Узел сети — это устройство, являющееся частью компьютерной сети. Узлы можно разделить на оконечные и промежуточные:
Например, смартфон через Wi-Fi отправляет запрос к серверу. Смартфон и сервер — оконечные узлы, а Wi-Fi-роутер — это промежуточный узел. В зависимости от расположения узлов и их количества сеть можно классифицировать как:
Сетевая среда — это среда, в который осуществляется передача данных. Сетевой средой могут выступать провода, кабели, воздушная среда, оптоволокно. Если в качестве среды используется медная проволока, то данные передаются с помощью электричества. Если это оптоволокно, то для передачи данных используют световые импульсы. Если проводов нет, т.е. данные передаются с помощью беспроводных технологий, то используются радиоволны.
На момент зарождения компьютерных сетей не существовало моделей, которые бы определяли общие стандарты работы сетей и подходы к их проектированию. Каждая компания, работавшая над созданием сетей, реализовывала собственные задумки, которые не могли работать с решениями от других создателей компьютерных сетей.
Более важным является то, что такое положение дел было проблемой. Сети, которые должны были объединять компьютеры, из-за архитектурных отличий создавали себе преграды для расширения. В 1977 году задачу по решению этой проблемы взяла на себя организация ISO (International Organization for Standardization) — международная организация по стандартизации. В течение 7 лет эта организация изучала реализации сетей того периода и в 1984 году представила модель OSI.
OSI — это аббревиатура Open Systems Interconnection, которая буквально переводится как «Взаимодействие открытых систем». Не следует путать «открытость» систем с понятием Open Source: система считается открытой, если она построена на основе общедоступных спецификаций,которые позволяет общаться двум системам вне зависимости от их архитектуры.
Модель состоит из 7 сетевых уровней, каждому из которых отведена своя роль и задачи. Разберем каждый из них.
Физический уровень (Physical Layer)
На этом уровне решаются вопросы, связанные с физическими аспектами передачи данных. Метод передачи данных, характеристики сетевой среды, модуляция сигнала — это всё про физический уровень.
Канальный уровень (Data Link Layer)
Канальный уровень работает в рамках локальной сети. Он формирует полученный от физического уровня поток битов в кадр: находит начало и конец сообщения. Также на этом уровне решаются такие задачи, как адресация внутри локальной сети, поиск ошибок, проверка целостности данных. Основные сетевые протоколы — это Ethernet и PPP.
Сетевой уровень (Network Layer)
Следующий уровень — сетевой. На этом уровне работают протоколы сетевого взаимодействия, которые нужны для построения крупных сетей из отдельных подсетей. Сетевой уровень нужен для построения составной сети на основе сетей, построенных на основе разных технологий канального уровня. На сетевом уровне вводится общая адресация для идентификации устройств и выполняется маршрутизация (выбор оптимального пути). К примеру, протокол IP, благодаря которому каждое устройство в сети обладает уникальный адресом, работающим на сетевом уровне. Протоколы сетевого уровня — IP, ICMP.
Транспортный (Transport Layer)
На транспортном уровне осуществляется передача данных между процессами на разных компьютерах. Также этот уровень называется уровнем сквозной передачи данных.
Пакеты на транспортном уровне доставляются до конкретного адресата на компьютере (в данном случае процесса), которому присваивается особый номер — порт. Порты нужны для того, чтобы данные были получены той службой или процессом, который их запрашивал. На этом уровне работают протоколы TCP и UDP, которые обеспечивают различный сервис:
Сеансовый (Session Layer)
По задумке проектировщиков системы роль сеансового уровня заключается в управлении сеансами связи. Управление подразумевает установку и разрыв соединения, выполнение синхронизации и прочие процессы.
Представительный (Presentation Layer)
Задачей представительного уровня является представление данных в понятном для отправителя и получателя виде. К представительному уровню можно отнести различные варианты представления данных: кодировка текста с помощью ASCII или UTF-8, спецификации HTML, графические форматы JPEG, PNG или GIF. Также к представительному уровню стоит отнести шифрование и дешифрование данных.
Прикладной (Application Layer)
Это уровень приложений, с которыми работают конечные пользователи. Здесь работают браузеры по протоколу HTTP, электронная почта, приложения для видео и аудиосвязи и т.п.
Сетевые протоколы OSI не всегда относятся к одному логическому уровню. Иногда они распространяются на несколько уровней. Например, протокол Ethernet работает и на физическом, и на канальном уровне.
Когда данные с узла отправляются другому узлу сети, они последовательно проходят каждый уровень. Данные от прикладного уровня переходят на представительный, от него на сеансовый и так до физического. На каждом уровне протоколы форматируют данные и передают полученный результат дальше. Этот процесс называется инкапсуляцией — движением данных с верхнего уровня к нижнему.
Когда узел получает данные, начинается обратный процесс: от физического к канальному и т.д. При этом нельзя пропустить уровень, например, перескочить с физического на сетевой. В итоге данные поступают на прикладной уровень к тому приложению, которое должно было их получить. Этот процесс называется деинкапсуляцией — движением данных с нижних уровней к верхним.
В настоящий момент модель OSI не применяется на практике для создания сетей. Некоторое время существовали буквальные интерпретации, которые содержали ровно 7 уровней. Основное применение эта модель нашла в обучении: принципы работы большинства сетевых моделей схожи с ней.
Пока одни специалисты в течение 7 лет дискутировали и думали, как улучшить OSI, другие специалисты на практике реализовывали и улучшали свои решения. Наибольшую популярность завоевал стек TCP/IP.
vds
TCP/IP (в некоторых источниках называется как «модель DoD»), как и OSI, реализует деление архитектуры на уровни. В RFC 1122 утверждена четырехуровневая архитектура указанного стека:
TCP/IP несколько отличается от OSI, но, в целом, реализует такие же принципы. Три первых уровня OSI (сеансовый, представительный и прикладной) объединены в один уровень TCP/IP — прикладной. Также объединения не избежали два нижних уровня OSI (физический и канальный) — теперь это просто канальный уровень. В различных источниках порой используют иную терминологию; мы, в рамках нашего повествования, во избежание путаницы будем дополнительно уточнять, про какую модель идет речь.
Рассмотрим каждый уровень и его протоколы подробнее. Идти будем от нижнего уровня к верхним.
Как уже было сказано, канальный уровень TCP/IP объединяет два уровня OSI: канальный и физический. Самый популярный протокол канального уровня TCP/IP — это Ethernet. Поэтому мы сосредоточимся именно на нем.
На время забудем об IP-адресах и сетевых моделях. Представим, что у нас есть локальная сеть из 4 компьютеров и коммутатора. Не будем обращать внимание на коммутатор — в нашей сети это просто устройство для соединения компьютеров в локальную сеть.
У каждого компьютера имеется свой MAC-адрес. В нашей сети он состоит из 3 чисел, что не соответствует реальности.
MAC-адрес
На самом деле MAC-адрес состоит из 48 битов. MAC-адрес — это уникальный идентификатор сетевого устройства. Если MAC-адрес не уникален, то это может стать причиной проблем в сети.
Первые 24 бита MAC-адреса — это идентификатор, который присваивается комитетом IEEE. Если вкратце, то IEEE — это такая организация, которая занимается разработкой стандартов, связанных с радиоэлектроникой и электротехникой. После 24 бита MAC-адреса назначаются самим производителем оборудования.
Вернемся к локальной сети. Если один из компьютеров захочет отправить другому устройству данные, то ему потребуется MAC-адрес получателя.
Данные в Ethernet сетях отправляются в виде Ethernet-кадров. На самом деле протокол довольно старый (появился в 1973 году). За своё время он много раз модернизировался и менял свои форматы. Приведем один из форматов кадра:
Разберем его составляющие:
На данный момент 4 узла образуют простую локальную сеть и одну канальную среду. Поэтому этот уровень называется канальным. На самом деле для корректной работы TCP/IP-сетей недостаточно адресации на канальном уровне (MAC-адресов). Канальная адресация работает в тесной связке с сетевой адресацией, которая известна всем, как IP-адресация.
IP-протокол работает на сетевом уровне: он будет подробно описан в разделе «Протоколы сетевого уровня». Сейчас речь пойдет о том, как IP-адреса работают вместе с MAC-адресами. Добавим каждому компьютеру по IP-адресу:
В обычной жизни мы практически не взаимодействуем с MAC-адресами. С ними работают компьютеры. Для связи с устройствами в сети мы используем IP-адреса или доменные имена. Протокол ARP помогает узнать MAC-адрес устройство по его IP-адресу.
Узел сети понимает, что он не знает MAC-адрес получателя. Чтобы узнать его, он отправляет широковещательный запрос всем компьютерам: «Компьютер с IP 1.1.1.2. Сообщи свой MAC-адрес компьютеру с MAC:333». Если в сети есть узел с таким IP, то он откликнется: «1.1.1.2. — это я, мой MAC:111».
Пока что мы работали в рамках одной сети. Пришла пора перейти к сетям из нескольких подсетей.
Добавим к локальной сети маршрутизатор и подключим его к другой подсети.
Две сети соединены с помощью маршрутизатора. Это устройство выполняет роль промежуточного узла и необходимо, чтобы устройство из одной канальной среды могло обратиться к устройству в другой канальной сети. Говоря простыми словами, чтобы компьютер в одной подсети мог отправлять данные компьютеры в другой подсети.
Немного о том, как узел может понять, что он пытается отправить данные узлу в другой подсети. У любой сети есть такой параметр как маска подсети. Накладывая маску подсети на IP-адрес узла можно узнать, принадлежит ли он той же подсети. Узнать маску подсети в Windows можно с помощью ipconfig
:
В данном случае маска подсети 255.255.255.0. Она имеет такой же вид, как и IP-адрес — 4 октета, разделенные точкой. Если применить маску подсети к адресу узла, то можно получить адрес подсети. Для это нужно осуществить поразрядную конъюнкцию. Это операция побитового «И». Результатом операции является адрес подсети.
Маска 255.255.255.0 — это самая простая маска. Она означает, что если первые 3 октета IP-адресов двух узлов совпадают, то эти узлы находятся в одной подсети. Например, компьютер с IP 1.1.1.2 и компьютер с IP 1.1.1.3 находятся в одной подсети, а вот компьютер с IP 1.1.2.2 находится уже в другой подсети. Когда компьютер понимает, что ему нужно отправить данные в другую подсеть, то он использует IP-адрес основного шлюза. Это адрес маршрутизатора, который пересылает данные в другую подсеть.
Итак, смоделируем ситуацию, при которой узлу с MAC:111 нужно отправить данные на узел с IP 1.1.2.3. Узел-источник сразу понимает, что узел-получатель находится в другой подсети и обращается к основному шлюзу. Он запрашивает у него MAC-адрес и отправляет данные ему. Маршрутизатор видит, что IP-адрес получателя отличается от него, и понимает — он является промежуточным узлом. В другой подсети он запрашивает MAC-адрес узла с IP 1.1.2.3 и отправляет ему искомые данные.
Сетевой протокол IP (Internet Protocol) появился в 80-х годах для объединения компьютерных сетей. Сейчас существуют 2 версии — IPv4 и IPv6:
Обе версии протокола предназначены для выполнения одних и тех же целей. IPv6 появился как альтернатива IPv4: в определенный момент IP-адреса стали заканчиваться. Сейчас эта проблема решается с помощью технологии NAT, и введение IPv6 как общего стандарта несколько затянулось. В этом материале будет разобрана первая версия IPv4.
Протокол IP работает с блоком информации, который называется IP-пакет. Вот как он выглядит:
Самые популярные протоколы транспортного уровня TCP/IP — это UDP и TCP. Они предназначены для доставки данных определенному приложению, которое определяется по номеру порта. UDP проще, чем TCP, поэтому начнем именно с него.
UDP-дейтаграмма состоит из 5 составляющих:
Задачи UDP — это проверка кадра и работа с портами. Из-за своей простоты протокол не может обеспечить контроль доставки данных. В отличие от TCP, UDP не запрашивает повторно побитые данные у отправителя.
Пакеты протокола TCP называются сегментами. Вот из чего состоит сегмент TCP:
Протокол TCP позволяет гарантировать доставку данных. Для этого между оконечными узлами устанавливается соединение, которое будет разорвано в случае невозможности гарантировать доставку данных. TCP также решает проблемы, связанные с потерей пакетов и восстановлением данных из отдельных фрагментов.
Если посмотреть на сетевой протокол TCP/IP и модель OSI, и в той, и в другой архитектуре верхние уровни – прикладные.
Среди распространенных прикладных стандартов:
Серверы DNS применяют алгоритмы UDP, менее надёжные в плане передачи информации. Но если брать прикладные интернет-протоколы FTP и HTTP, они работают по правилам TCP.
В числе других популярных прикладных протоколов:
Выгодные тарифы на VDS/VPS в Timeweb Cloud
В этом материале мы описали самые распространенные протоколы, которые используются в компьютерных сетях. Эти протоколы применяются повсеместно и в большинстве задач. Большая часть существующих протоколов, которых насчитывается около 7 тысяч, предназначена для более узких задач. Если вас заинтересовали компьютерные сети и вы хотите узнать о них больше, то на timeweb.cloud вы можете арендовать облачный сервер для практических экспериментов.