Протоколы и IP: что нужно знать программисту
Работа устройств с Сетью требует от программиста грамотного подключения и реализации. Обычно эти процессы осуществляются посредством специальных «скриптов». Они работают по особым правилам и принципам. Носят название протоколов.
В данной статье будет рассказано о том, что собой представляет TCP IP. Также изучим виды протоколов, встречающиеся на практике. Предложенная информация будет одинакова полезна и разработчикам, и системным администраторам. Рядовым пользователям, увлекающимся Сетью и интернетом, соответствующие материалы тоже помогут.
Понятие протокола
Протокол – это специальный набор правил, который помогает проводить упорядочивание обмена данными между устройствами. Пример – телефоны или компьютеры. Сегодня существуют различные среды передачи данных. Один из наиболее популярных вариантов – стек протоколов TCP IP.
Он помогает поддерживать передачу файлов, а также удаленный вход в ту или иную систему. Электронная почта через этот «свод правил» тоже успешно реализовывается.
Что это
Протоколы TCP IP дают возможность проведения реализации модели соединения пакетов. Это – база для работы всего интернета. При применении соответствующего термина подразумевается вся Сеть, функционирующая за счет нескольких отдельных протоколов. А именно – TCP и IP.
Это – один из важнейших моментов в системном администрировании, веб разработке и коддинге. Набор протоколов предусматривает некоторые соглашения о межсетевом взаимодействии и маршрутизации. Через соответствующий инструментарий получается налаживать связь между посетителями университетов, исследовательских организаций, а также предприятий и государственных учреждений.
TCP – это…
Изучая протоколы TCP IP, пользователь должен понимать, о каких вообще элементах идет речь. Ранее было сказано, что под соответствующим термином подразумевают весь интернет, работающий через TCP, а также IP. Поэтому далее каждому понятию будет дано отдельное описание.
TCP – это протокол управления передачей. Он помогает устанавливать и поддерживать надежное соединение между девайсами. Отвечает за передачу электронных материалов, а также ведет контроль за объемом перенаправляемых файлов. При сбое начинает повторно отправлять документацию.
О характеристиках
Стоит обратить внимание на то, что у протокола TCP несколько характеристик. Они заключаются в следующем:
- обеспечение взаимодействия на уровне логического соединения;
- потоковая рассылка данных;
- двунаправленная взаимосвязь;
- функции отправки отдельных пакетов электронных материалов;
- использование принципа «скользящего окна» для увеличения скорости обмена информацией.
TCP передает данные, а также является одним из ключевых при рассмотрении принципов работы Сети. С этим «сводом правил» должен быть знаком каждый системный администратор.
Несколько слов об IP
Следующий важный компонент – это IP. Он расшифровывается как «Интернет протокол». Выступает в качестве базы передачи пакета данных. Нужен для отправки сетевых сведений по заданному адресу. Последний носит названием «ip-адрес». Все собранные материалы сначала необходимо поделить на несколько отдельных пакетов. Они будут отправляться получателю независимо друг от друга.
Параметры и характеристики
Ключевыми характеристиками протоколов сетевого типа (IP) выступают следующие моменты:
- организация обмена данными через сегменты;
- взаимодействие девайсов без логического соединения;
- проведение фрагментации АйПи-сегментов, если это необходимо;
- отсутствие средств для управления скоростью передачи информации.
Таким образом рассматриваемые компоненты – это неотделимая часть обмена данными по интернету или через компьютерные сети.
Стеки сетевых протоколов – ключевые особенности
Стек сетевых протоколов TCP/IP нужен для того, чтобы можно было поддерживать связь компьютеров (хостов), которые будут подключены предварительно к Сети. Такой набор имеет одну особенность. Это – аппаратная независимость. Ее не удастся получить при применении иных сетевых технологий и манипуляций.
Протоколы TCP IP не будет зависеть от характеристик имеющегося аппаратного обеспечения. Эта особенность дает возможность найти оптимальный способ передачи обмена информацией между сетями с разными технологиями отправки и получения электронных материалов.
Стоит также обратить внимание, что в рассматриваемой «связке» АйПи играет немаловажную роль. За счет применения соответствующих адресов ведется поддержка соединения между двумя произвольными девайсами.
Основные команды
Протоколы TCP/IP предусматривают в процессе своей работы выполнение тех или иных команд. Вот основные из них:
- передача документов и файлов в иные системы;
- выполнение операций и заданных команд удаленно;
- отправка сообщений удаленным пользователям;
- удаленная печать файлов;
- вход в удаленную систему;
- управление заданной системой.
Стек протоколов TCP IP – это сетевая модель, описывающая весь процесс передачи имеющихся цифровых материалов. До ее изобретения соответствующие операции были невозможны. До 70-х годов прошлого века проблему решить не удавалось. Стековая разработка помогла ее устранить, причем весьма успешно.
Разработка велась под руководством Минобороны США. Иногда рассматриваемая «технология» носит название DoD-системы. Некоторые специалисты говорят, что система похожа на представление уровня модели OSI. Связано это с тем, что оба варианта опираются на принцип деления по уровням, чтобы после выполнять отдельные функции и операции на каждом «слое».
Общая терминология и понятия
Чтобы свести ошибки, связанные с пониманием рассматриваемой темы, к минимуму, необходимо запомнить несколько ключевых терминов. Они – база, без которой более углубленное изучение не представляется возможным:
- Стек (стек протоколов TCP/IP в том числе). Это – гибкое средство для организации сетевого взаимодействия. За счет стека юзер сможет применять собственные параметры и настройки.
- TCP/IP. Специальное ПО, которое помогает в отладке Сети. Устанавливается на устройство вместе с базовой операционной системой. Для применения соответствующей «технологии» не придется проводить инициализацию дополнительного программного обеспечения.
- Карта сетевых адаптеров. Физическое устройство, подключаемое к сетевому кабелю.
- Настройка протоколов. Так называется процесс отладки работы соответствующих «технологий». Обычно подобная настройка осуществляется при помощи инициализации базовой операционной системы. Дополнительные манипуляции для успешного проведения процедуры от юзера не потребуются.
- Схема IP-адресации. Технология, позволяющая однозначно идентифицировать хосты и сети, с которыми будет установлено соединение.
- Демоны TCP/IP протоколов. Это – серверы. Процессы, которые работают в фоновом режиме. Отвечают за выполнение запросов других операций.
Это всего лишь введение в весьма важную тему. Программеру и системному администратору потребуются большие знания в принципах работы Сети. Лишь это поможет настроить в заданном стандарте процесс обмена информацией.
Назначение
У многих возникает вопрос, какую задачу решает рассматриваемый тип протокола. Процесс передачи информации между устройствами требует, чтобы все подключенные компьютеры использовали одни и те же «технологии».
Каждый протокол будет применять собственные методы устранения ошибок, возникающих в процессе обмена информацией. Принципиальная схема корректировок будет сохраняться во всех случаях.
Файлы, которые были отправлены, будут разбиваться на отдельные пакеты, передаваемые на конечные устройства. Соединяются оные в строго установленной последовательности. Каждый пакет дополнительно имеет так называемый «контрольный байт». Это – компонент, позволяющий удостовериться в отсутствии ошибок. Если устройство обнаруживает баг в процессе обмена данными, пакет будет запрашиваться у «источника» снова.
Подобный процесс обеспечивает безопасность и стабильность передачи электронных материалов и приложений. Но передаваться документы смогут с ограниченной скоростью.
Стек протоколов TCP/IP – это совершенная модель. Она дает возможность настраивать взаимодействие компьютеров, подключать к ним разного рода сетевые устройства. Ключевое назначение «технологии» — обеспечение трафика крупных сетей, а также поддержка функционирования всего интернета.
Продолжение статьи читайте тут.
P. S. Интересуют компьютерные сети, сетевые технологии, протоколы передачи данных? Обратите внимание на следующие курсы в Otus:
- «Network engineer «;
- «Network engineer. Basic «.
Что такое протокол
Сейчас многие устройства и программы умеют связываться друг с другом: компьютеры — между собой, телефон — с наушниками, а серверы — с браузером. И довольно часто всё происходит без сбоев. Этим мы обязаны протоколам — вот о них и поговорим.
Что такое протокол
Протокол в ИТ — это набор правил, по которым устройства и программы обмениваются данными. Можно сказать, что это язык — в смысле, что это набор правил общения. Можно сказать, что это грамматика языка. Короче — набор правил.
Обычно в протоколе будут правила:
- Как открывать общение и приветствовать другую сторону.
- Как договориться с другой стороной о параметрах передачи данных.
- Что делать в случае ошибок и недопонимания.
- Как понять, что передача данных завершена.
Когда мы говорили про умный дом, то там многое было завязано на протоколы. Именно по этой причине приборы от разных производителей часто не могут работать вместе — у них просто нет общего протокола.
Физические и логические протоколы
Протоколы делятся на два вида — физические и логические.
Физические протоколы регулируют то, как именно и какие сигналы будут идти от одного устройства к другому. Например, импульсами по 5 вольт 100 раз в секунду или на определённой частоте радиосигналов. Эти протоколы нужны для того, чтобы наладить связь между устройствами. А уже после налаживания связи можно передавать данные.
Физические протоколы часто называют сигнальными, потому что они регулируют передачу физических сигналов между устройствами.
Логические протоколы отвечают за смысл и передачу данных, когда связь уже установлена. Например, у нас есть два блютус-устройства, телефон и наушники, которые выяснили друг про друга, что они могут работать по одному и тому же проколу. После того как они наладили связь, они могут использовать протокол передачи данных, чтобы узнать друг о друге получше:
- какая версия блютуса стоит на каждом устройстве;
- кто что умеет делать — только играть музыку или ещё может работать как гарнитура;
- есть ли поддержка музыкальных кодеков;
- какой уровень заряда на каждом устройстве;
- нужно ли использовать энергосберегающий режим и так далее.
Получается, что задача физического протокола — установить связь между устройствами, а логического — передавать данные по этой установленной связи.
Сетевые модели
Скорее всего, вы уже знаете, что браузеры получают данные от серверов по протоколу HTTPS, файлы — по FTP-протоколу, а сервером можно управлять по SSH-протоколу. Но так как все они используют похожие схемы установления связи и логики работы, сетевые протоколы объединяют в модели передачи данных в сети.
Модель (в этом случае) — это сборник протоколов и других вещей, которые вместе помогают решать более сложные задачи, чем то, на что способен один конкретный протокол.
Можно представить, что модель — это как комплексный обед в столовой. В него входит несколько блюд, в каждое блюдо входят какие-то продукты, а всё вместе — это сложный комплекс из питательных веществ, который помогает вам наесться, не думая о деталях: содержании клетчатки и витаминах, белках, жирах и углеводах.
Соответственно, сетевая модель — это «комплексный обед» из протоколов, которые разложены на разных уровнях и служат каждый своей цели.
В ИТ есть две основных сетевых модели передачи данных — OSI и стек TCP/IP. OSI расшифровывается как Open Systems Interconnection Model, открытая модель взаимосвязей систем. Её разберём сейчас, а TCP/IP — в отдельной статье.
Как устроена модель OSI
В OSI всё делится на 7 уровней, каждый из которых отвечает за что-то своё.
- Физический уровень отвечает за физические параметры связи — будет ли это радиосвязь, передача тока по проводам или оптический канал связи.
- Канальный уровень регулирует то, как именно будет использоваться физический канал связи и как будут передаваться и приниматься сигналы по этому каналу.
- Сетевой уровень задаёт правила адресации и доставки сообщения — как сделать так, чтобы наше сообщение получил нужный нам адресат.
- Транспортный уровень делает так, чтобы все сообщения отправлялись по очереди, а не так, чтобы один всё время что-то отправляет, а второй не знает, как вклиниться.
- Сеансовый уровень отвечает за связь между двумя программами, которые работают на разных компьютерах.
- Уровень представления используется для того, чтобы внутренние данные компьютера представить в том формате, который нужен для передачи этих данных.
- Прикладной уровень обеспечивает понятный способ связи по сети для разных программ.
Предполагается, что более высокие уровни используют для своей работы более низкие уровни. Например, пятый, сеансовый уровень исходит из того, что все остальные четыре нижних уровня работают как нужно и ему про это думать не надо. Это позволяет разным программистам сосредоточиться каждый на своих задачах и не тратить силы на работу с другими уровнями.
Что это нам даёт
Как пользователю интернета вам не нужно знать, как работают протоколы и сетевые модели. Но как разработчику вам полезно понимать механизм, благодаря которому компьютеры могут друг до друга докричаться.
И вот этот механизм:
- У нас есть набор правил, которые приняли все компьютеры, которые друг друга понимают.
- Эти правила как бы вложены друг в друга. По-другому можно сказать, что более высокоуровневые правила сидят на низкоуровневых.
- Благодаря этой вложенности мы можем делать очень сложно взаимодействующие машины: нам не надо изобретать новый способ связи между устройствами, нам достаточно использовать общепринятые протоколы.
На основании этих базовых понятий мы расскажем о главной сетевой модели современности — TCP/IP. Это всё присказка, а сказка впереди.
О протоколах передачи данных
В этой статье я хочу поделиться личным, не претендующим на академичность, опытом в работе с различными закрытыми протоколами передачи данными (в основном на прикладном-сеансовом уровнях).
Достаточно часто мне приходиться сопрягаться со специализированным ПО (и железом, хотя в конечном итоге идет сопряжение со вшитым на плату фирмвейром), изготовитель каждого из которых предоставляет свой протокол обмена данными.
Какими свойствами и особенностями обладает хороший, годный грамотный, качественный протокол?
В идеале, протокол должен быть абстрагирован от более нижнего уровня взаимодействия, будь то передача по TCP, UDP, по serial порту, USB, Bluetooth, через цифровой радиосигнал, или даже по голубиной почте. И надо учитывать, что далеко не все из них гарантируют доставку и\или достоверность передающихся данных.
Небольшой дисклеймер: говоря о достоверности данных, я имею ввиду их неискаженность вследствие помех и иных ошибок в среде передачи. В статье я не буду затрагивать темы пласта технологий, связанных с безопасностью в ИТ. Допустим что наши Алиса и Боб могут друг другу доверять, и никакая Ева им помешать не может. (Например у коллег вопрос безопасности решается включением всех территориально разделенных участников взаимодействия в хорошо защищенный VPN, не имеющий в свою очередь доступа наружу)
В большинстве протоколов реализована схема «Вопрос-Ответ». Это можно представить как разговор, в котором на каждую реплику своего собеседника вы реагируете вербально, и в том же смысловом ключе. Таким образом участниками взаимодействия достигается уверенность в том, что их сообщения переданы и адекватно восприняты. Однако эта схема допустима и эффективна не для всех задач: в случаях когда задержка в общении должна быть минимизирована, или ответ на каждую из многочисленных реплик признается избыточным (например для отладочных сообщений), реализуется схема «Старт-Стоп». При получении сообщения на «Старт» ваш собеседник начинает сыпать в вас потоком реплик, и замолкает лишь при слове «Стоп». Сообщения, отправляемые в потоке, обычно имеют инкрементируемый порядковый номер, и если при принятии потока сообщений были проблемы с обработкой\было пропущено одно из них, его можно перезапросить отдельно по этому самому номеру.
Все протоколы можно разделить на две группы, (по представлению данных): символьные и бинарные.
Символьные протоколы, с которыми мне приходилось встречаться, базировались либо на XML, либо на JSON-строках. Из их достоинств можно упомянуть о более простой отладке взаимодействия (вследствие их читаемости), о простоте реализации (наличия готовых парсеров), и пресловутой универсальности.
Теперь о недостатках. Очевидно, что такие протоколы являются крайне избыточными, мизерная доля полезной информации плавает в массивной, неэффективной обёртке. При передаче любой числовой информации приходиться заниматься их конвертацией в строковое представление и обратно. Больным местом является передача бинарных данных (и хорошо, что без них бывает можно обойтись, но в ряде случаев это невозможно). Составители протоколов обычно выкручиваются применением Base64, или даже просто передачей бинарной строки в её hex-овом представлении, по два символа на байт.
Также хочется отметить, что полная спецификация того же XML крайне обширна, и стандартные парсеры, при всей их полноте возможностей, достаточно громоздки и медлительны, поэтому распространена практика, когда отдел или контора в итоге пишет и пользуется собственным парсером.
Конечно, для определенных задач, символьные протоколы являются, если не наиболее эффективным, то по крайней мере вполне приемлимым вариантом, но мы с вами идём дальше.
Теперь бинарные протоколы. Сразу же надо вспомнить о Гулливерских войнах тупоконечников и остроконечников. Лично я симпатизирую big-endian, т.к. не считаю неявную типизацию little-endian «чем-то хорошим», да и в моей среде разработки big-endian является нативным.
Бинарные протоколы (не все, но те, которые я отношу к грамотным) можно разделить на два уровня: уровень контейнера и уровень данных. На плечи первого уровня ложится ответственность за целостность и достоверность передачи данных, а так же за доступность обнаружения сообщения в байтовом потоке, и, само собой, за хранение в себе сообщения уровня данных. Второй уровень должен содержать информацию, ради которой всё сетевое взаимодействие и затевалось, в удобном для обработки формате. Его структура в основном зависит от решаемых задач, но и по нему есть общие рекомендации (о которых ниже).
Размеры сообщений (дискретных пакетов байт, которые можно обрабатывать независимо от предыдущих и последующих принимаемых данных) бывают фиксированными и переменными. Понятно, что с фиксированным размером сообщений всё проще — вычитается, начиная с заголовка (о нём позже), определенное количество байт и отправляется на обработку. Зачастую, для обеспечения гибкости, составители таких протоколов включают в сообщение область фиксированного размера (иногда до 80% от общего объема), зарезервированное под модификации нынешнего протокола. На мой взгляд, это не самый эффективный путь обеспечения гибкости, зато избыточность появляется еще какая.
Рассмотрим сообщения переменной длины.
Тут уже можно подробней поговорить о непременном атрибуте бинарного сообщения в любом протоколе — о заголовке (Это вышеупомянутый уровень контейнера).
Обычно заголовки начинаются с константной части, позволяющей, с определенной вероятностью обнаружить начало сообщения в непрерывном байтовом потоке. Очевидно, что имеется риск появления такой константы в произвольном потоке байт, и, хотя увеличение объема этот риск снижает (я встречал константы вида 0123456789VASIA9876543210), целесообразней использовать проверки на основе подсчета контрольной суммы.
За константой обычно следует номер версии протокола, который дает нам понять, в каком формате должно происходить дальнейшее считывание (и имеем ли мы вообще возможность обработать это сообщение — вдруг такая версия нам неизвестна). Следующая важная часть заголовка: информация о самом содержимом контейнера. Указывается тип содержимого (по факту, тот же номер версии протокола для уровня данных), его длина и контрольная сумма. Имея эту информацию, можно уже без проблем и опасений считать содержимое и приступить к его разбору.
Но не прямо сразу! Заголовок должна заключать контрольная сумма его самого (исключая из расчета конечно саму контрольную сумму) — только так мы можем быть уверены в том, что считали только что не белиберду, а валидный заголовок, за которым следуют предназначенные нам данные. Не совпала контрольная сумма? Придётся искать следующее начало нового заголовка дальше по потоку…
Представим, что мы дошли до этапа, что получили наконец неискаженное сообщение уровня данных. Его структура зависит от той области задач той системы, в которой реализован ваш сетевой обмен, однако в общем виде у сообщения тоже бывает быть свой заголовочек, содержащий информацию о типе сообщения. Можно различить как общую специфику сообщения, (например «Запрос Set», «Утвердительный Ответ на Set», «Отрицательный Ответ на Set», «Запрос Get», «Ответ Get», «Потоковое сообщение»), так и конкретную область применение сообщения. Попробую привести пример с потолка:
Тип запроса: Запрос Set (0x01)
Идентификатор модуля-адресата сообщения: PowerSupplyModule (0x0A)
Идентификатор группы сообщений: UPS Management (0x02)
Идентификатор типа сообщения: Reboot (0x01)
Дальше тело сообщения может содержать информацию об адресе ИБП, который Модуль управления энергообеспечением должен перезагрузить, через сколько секунд это сделать и т.п.
На это сообщение мы рассчитываем получить ответное сообщение с типом запроса «Утвердительный Ответ» и последующими 0x0A0201 в заголовке.
Конечно, такое подробное описание типа сообщения может быть избыточным когда межсетевое взаимодействие не предусматривает большого числа команд, так что формировать структуру сообщения надо исходя из требований ТЗ.
Так же будет полезно, если сообщение с «Отрицательным Ответом» будет содержать код ошибки, из-за которой не удалось ответить на команду утвердительно.
Заканчивая своё повествование, добавлю, что тема взаимодействия приложений весьма обширна и порою холиворна(что по факту означает, что в ней нет технологии «серебряной пули»), и отмечу, что те взгляды, что я излагаю, являются лишь компиляцией из опыта по работе с отечественными и зарубежными коллегами. Спасибо за внимание!
upd.
Имел удовольствие пообщаться с критиком своей статьи, и теперь прихожу к осознанию, что я осветил вопрос со своей если можно так выразиться, «байтолюбской», точки зрения. Конечно, раз идет курс на универсальность обработки хранения и передачи данных, то в таком ключе символьные протоколы (в первую очередь говорю об XML) могут дать фору любым другим решениям. Но относительно попытки повсеместного их применения позволю себе процитировать Вирта:
Инструмент должен соответствовать задаче. Если инструмент не соответствует задаче, нужно придумать новый, который бы ей соответствовал, а не пытаться приспособить уже имеющийся.
- передача данных
- протоколы
Протокол
Протокол в IT — это набор правил, по которым передаются данные. С помощью протоколов связываются между собой компьютеры в сети, разные устройства и программы. Они выполняют определенные правила и поэтому понимают друг друга.
Освойте профессию
«Cистемный администратор»
Протоколы в информатике описывают, в каком формате будут передаваться данные, как будет выглядеть процедура их передачи. Еще в них обычно прописано, как устройства будут «договариваться» друг с другом при контакте и что делать с ошибками, если они возникнут. Например, протокол доступа к каталогам (LDAP) регламентирует способ получения и изменения информации в каталоге.
Системный администратор
Станьте универсальным специалистом по администрированию Linux с нуля
Для чего нужны протоколы
Компьютерные протоколы предназначены, чтобы устройства могли корректно связываться и общаться друг с другом. Можно представить протокол в виде языка: если два устройства или программы передают данные по-разному, они друг друга не поймут. Поэтому специализированные устройства или софт могут не работать с продуктами других производителей — у них разные протоколы.
Протоколов в мире сотни, и они описывают стандарты связи на любом уровне — начиная с частоты электрических импульсов и заканчивая передачей данных между программами на компьютере.
Например, при помощи протоколов люди могут открывать сайты: браузер на компьютере связывается с сервером по протоколу HTTP или HTTPS. Благодаря FTP—протоколу по интернету можно передавать файлы, а протокол BitTorrent позволяет потоково скачивать данные.
Кто работает с протоколами
В широком смысле любой человек пользуется протоколами каждый раз, когда заходит в интернет или подключает беспроводные наушники. Любая связь между устройствами возможна благодаря протоколам — иначе ничего бы просто не работало.
В узком смысле с протоколами работают сетевые инженеры и системные администраторы, которые настраивают сервера и инфраструктуру сети. С протоколами приходится сталкиваться бэкенд-разработчикам и DevOps-инженерам. Есть и более специфические профессии: например, инженеры телекоммуникационных систем или специалисты, работающие с системами «умных» домов.
Каждый из этих специалистов ведет работу с протоколами в своей отрасли. Например, сетевой инженер в компании должен хорошо понимать, как работают протоколы, связанные с интернетом, — это не значит, что он обязан разбираться в многочисленных протоколах «умных» устройств.
Благодаря тому что протоколов много, для каждого «уровня» связи можно назначить своего специалиста и распределить нагрузку. Поэтому не возникает ситуации, когда один человек отвечает за все задачи разом.
Сисадмин — давно не человек, который настраивает компьютеры. Станьте сильным специалистом, который поддерживает инфраструктуру компании.
Виды протоколов
По типу задач протоколы делятся на физические и логические.
Физические
Отвечают за физику сигналов, которые проходят в сетях. Они определяют частоту радиосигналов, мощность и частоту электрических импульсов — или световых сигналов в случае с оптоволокном. Например, Wi-Fi описывает стандарты соединения между точками доступа и диапазоны частот для беспроводной связи.
Логические
Протоколы отвечают за передачу данных и обмен информацией — поясняют, в каком формате ее передавать и что она означает. Если физический протокол — возможность говорить, то логический протокол передачи данных — это язык. Большинство айтишников работает именно с логическими протоколами: например, IP, который описывает формат пакетов данных и адресацию компьютеров в сети.
Что такое модели
Если у каждого устройства свой протокол и нет общих, они не смогут связываться. Чтобы такого не происходило с большей частью техники, протоколы объединяют в модели. Модель — это своего рода набор протоколов и других инструментов, который собирается в систему и может решать более сложные задачи, чем один протокол.
Например, все сайты используют один и тот же набор протоколов — из моделей OSI и TCP/IP. Поэтому компьютер пользователя может связаться с любым доступным в сети сайтом.
- Без модели OSI не работал бы интернет — на всех уровнях, начиная с частоты электрических сигналов, проходящих по сети.
- Без TCP/IP сайты и компьютеры не могли бы общаться друг с другом, даже если физически связь налажена.
- Без технологии Bluetooth, которая объединяет протоколы разных беспроводных устройств, мы не смогли бы пользоваться ни TWS-наушниками, ни умными колонками.
Сетевая модель OSI
OSI расшифровывается как Open Systems Interconnection model — открытая модель взаимосвязи между сетями. Она считается эталоном для разных систем связи. В модели архитектура сети поделена на семь уровней — от самого низкого, то есть близкого к железу, до самого высокого, близкого к пользователю.
На каждом уровне свой набор протоколов связи, которые могут общаться с протоколами на том же уровне либо на один выше или ниже. Более высокие уровни опираются в работе на более низкие — структура сети выглядит как пирамида.
Разберем уровни модели OSI подробнее.
Физический уровень
Самый первый и низкий уровень. Он описывает, по какому принципу информация переводится в физические сигналы: радиосигналы, электрические импульсы, свет. На этом уровне расположены протоколы, которые переводят информацию в сигнал и обратно в биты, отвечают за ее передачу по кабелю или в эфир. Примеры протоколов этого уровня — Bluetooth, Wi-Fi или GSM, по которому реализована мобильная связь. А устройства физического уровня — это, например, сетевой адаптер на компьютере.
Канальный уровень
Второй уровень тоже тесно связан с железом: коммутаторами, мостами, сетевой картой. Но на нем уже появляются и программные средства, например драйвер сетевой карты. Уровень описывает взаимодействие между устройствами по физическому каналу — например, как принимать и интерпретировать сигналы. Протоколы второго уровня получают на вход биты и упаковывают их в кадры — фрагменты данных, а еще проверяют информацию на ошибки. Примеры протоколов на этом уровне — Ethernet, который отвечает за передачу данных по витой паре, или FDDI — он работает с оптоволоконным каналом.
Канальный уровень разделяют на два подуровня: MAC управляет доступом к среде, например к кабелю, а LLC отвечает за передачу, проверку и преобразование данных.
Сетевой уровень
Третий уровень отвечает за путь, по которому будут передаваться данные. Протоколы определяют оптимальный маршрут для передачи данных, соотносят между собой физические и логические адреса устройств. На этом этапе происходит маршрутизация — определение маршрута. Известнейший пример протокола сетевого уровня — IP, благодаря которому фактически появился интернет. Устройства сетевого уровня — это маршрутизаторы, роутеры.
Транспортный уровень
Четвертый уровень задает «правила дорожного движения» при передаче данных. Для него неважно, что это за данные и по какому маршруту они следуют, — он отвечает за механизм, например за то, чтобы данные от разных устройств передавались по очереди. Протоколы транспортного уровня формируют эту очередь, объединяют короткие пакеты данных в один большой или разделяют слишком большие пакеты на несколько маленьких. Еще протоколы отвечают за надежность передачи сообщений, чтобы данные не «потерялись» и не повредились по пути. Некоторые даже требуют от адресата сообщить, что данные получены. На этом уровне работают протоколы TCP, UDP и другие — они тоже используются в интернет-сети.
Сеансовый уровень
Отвечает за сеанс связи между разными программами — в рамках сеанса два абонента на разных устройствах обмениваются информацией. На сеансовом уровне находятся протоколы, которые отвечают за начало и конец сеанса, его поддержание, когда обе программы «молчат», и за синхронизацию — чтобы сообщения от обеих сторон передавались вовремя. Еще они определяют абонентов и проверяют права доступа. А если сеанс прервется, протоколы сеансового уровня восстановят его по контрольным точкам. Пример — SOCKS, протокол, по которому работают прокси-сервера.
Уровень представления
Шестой уровень отвечает за преобразование информации. До этого мы говорили о пакетах данных — на уровне представления эти пакеты конвертируются в понятные нам форматы, например JPG-картинку или текстовый файл. Обратно это тоже работает: информацию, которую надо передать по сети, протоколы переводят в удобный для передачи вид. Еще они могут кодировать и декодировать данные, сжимать их и распаковывать. Наиболее известный протокол этого типа — XDR, который умеет правильно преображать данные для разных операционных систем.
Прикладной уровень
Седьмой уровень — самый далекий от железа. Он отвечает за то, как с сетью взаимодействуют пользовательские приложения: браузер, клиент электронной почты и так далее. Протоколы прикладного уровня регулируют доступ приложений к сети, помогают передавать служебные данные программ и пересылать сообщения об ошибках. Примеры протоколов этого уровня — HTTP/HTTPS, FTP и так далее.
Протоколы модели TCP/IP
TCP/IP — это главная модель интернет-технологий. Название состоит из имен двух протоколов: TCP и IP. Мы упоминали их выше, но тут расскажем подробнее — на их взаимодействии работает весь интернет.
TCP. Transmission Control Protocol, или протокол управления передачей, помогает надежно передавать и принимать данные. Согласно модели OSI он находится на транспортном уровне — это своеобразный регулировщик для движения информации. TCP работает так:
- формирует сообщения в определенном формате;
- работает по установленному каналу связи;
- предупреждает, что собирается передать адресату данные;
- отвечает за очередь их передачи;
- гарантирует получение данных — проверяет, дошло ли сообщение, и при необходимости заново отправляет запрос;
- сообщает отправителю, пришли ли данные;
- убирает дубли, если какие-то данные пришли дважды.
TCP стал самым популярным транспортным протоколом доступа в интернете благодаря своей «заботливости»: он проверяет целостность данных и запрашивает их снова, если надо. В итоге все передается как надо и не теряется по пути.
IP. Название расшифровывается как Internet Protocol — протокол интернета. Если TCP отвечает за процесс передачи данных, то IP — за маршрут. Он относится к третьему уровню OSI, сетевому. Вот что делает этот протокол сети интернет:
- присваивает компьютерам в сети уникальные IP-адреса;
- соотносит эти адреса с аппаратными — MAC-адресами;
- создает логические соединения между разными адресами;
- определяет маршрут, по которому пойдет пакет данных.
IP не заботится о целостности данных и о механизме передачи — за них отвечает уже TCP. Выходит, что протоколы дополняют друг друга: IP определяет, куда отправить информацию, а TCP — как это сделать.
Связка TCP/IP — ключевая в устройстве сети. Некоторые определения включают в модель и другие протоколы, важные для интернета, например HTTP или DNS, даже Ethernet с канального уровня. Но основу все равно составляют TCP и IP.
Что такое UDP/IP
Иногда вместо протокола TCP в той же модели используется другой транспортный протокол — UDP. Тогда говорят о модели UDP/IP, а иногда ее называют частным случаем TCP/IP. Название означает User Datagram Protocol — протокол пользовательских датаграмм. Датаграмма в этом случае — название пакета данных. UDP проще и быстрее, чем TCP, но не так заботится о целостности информации:
- не сообщает получателю, что сейчас перешлет ему датаграмму;
- не требует создавать отдельный канал связи;
- не следит за порядком передачи данных;
- не спрашивает, пришла ли информация, и ничего не делает, если данные потерялись.
Информация, переданная по UDP, может потеряться или дублироваться, прийти не по порядку — но сами датаграммы, если придут, будут полностью целыми. UDP применяют реже, чем TCP, в основном там, где важны скорость и производительность, — например, в системах реального времени или на высоконагруженных серверах онлайн-игр.
Другие известные примеры протоколов
С некоторыми протоколами разных уровней мы имеем дело постоянно — давайте посмотрим, как они работают и что собой представляют.
HTTP. HTTP или HTTPS — буквы, с которых начинается любой адрес в интернете. Они означают HyperText Transfer Protocol, протокол передачи гипертекста. Это прикладной протокол, который передает информацию между веб-сайтом и компьютером пользователя. При этом компьютер пользователя выступает как клиент, а сайт — как сервер. Клиентов может быть много, сервер — один.
HTTPS. Буква S в HTTPS означает Secure — это расширение HTTP, позволяющее шифровать данные при передаче. Так их не получится украсть или подсмотреть, пока они передаются от клиента к серверу и обратно.
FTP. File Transfer Protocol — по протоколу в сети передаются файлы. Он, как и HTTP, работает по модели клиент-сервер: дает пользователю, то есть клиенту, доступ к файлам на сервере. Это очень старый протокол, который существовал еще до появления IP. Сейчас его в основном используют вебмастера и разработчики при работе с хостингами сайтов.
P2P. HTTP — не единственный протокол передачи данных. Еще есть P2P — пиринговые, или децентрализованные сети. В отличие от HTTP, в них нет клиентов и серверов, а есть равноправные участники, каждый из которых может выполнять обе функции. P2P — довольно большая группа технологий, она содержит разные протоколы. Например, BitTorrent или Tor — частично децентрализованные сети, работающие по одноименным протоколам. А I2P, тоже обеспечивающий анонимность, — полностью децентрализованный. Еще на основе P2P-технологий реализованы криптовалюты и вычисления с помощью блокчейна.
DNS. Система доменных имен DNS — это не только способ хранения доменов, а еще и протокол, который управляет ответами на запросы. Благодаря ему устройства получают информацию о том, к какому адресу им нужно обратиться. В работе протокол DNS использует TCP и UDP.
SSL/TLS. Это протоколы, по которым обеспечивается шифрование в HTTPS. SSL — более старое название, TLS — новая версия протокола. Благодаря им информация по HTTPS может шифроваться: для этого используют пары ключей, публичный и приватный.
SSH. Расшифровывается как Secure SHell — это еще один безопасный протокол, который работает с использованием TCP. Протокол нужен, чтобы удаленно управлять операционной системой и при этом шифровать информацию, которая будет передаваться между устройствами. Например, разработчики пользуются SSH, когда загружают код на GitHub.
SOCKS и Shadowsocks. SOCKS — протокол, который позволяет передавать данные не напрямую, а с использованием промежуточного прокси-сервера. Данные с помощью SOCKS можно пересылать незаметно: получатель не увидит, кто на самом деле сделал запрос, а увидит только прокси-сервер. Shadowsocks — это протокол на основе SOCKS, который позволяет шифровать данные на пути и обходить блокировки.
Шуточные протоколы. Существует несколько протоколов, которые создавались как шутка — удивительно, но у некоторых из них даже есть реализации. Например, IP over Avian Carriers — пересылка IP-пакетов с помощью почтовых голубей. Его придумали в 1990 году, а в 2001-м реализовали: из девяти отправленных голубями пакетов данных вернулось четыре, то есть потери составили 55,6%. А HTCPCP — гипертекстовый протокол управления кофеваркой — реализован как расширение HTTP, и ошибку 418 оттуда поддерживают разные веб-фреймворки, например Django или Flask. Эта ошибка гласит: I’m a teapot — Я чайник. А чайник приготовить кофе не сможет.
Если вы хотите узнать больше про веб-технологии и протоколы — запишитесь на курсы. Будет много практики и интересных реальных задач.
Системный администратор
Станьте универсальным специалистом по администрированию Linux с нуля и разверните собственный кластер. Перед вами откроется широкая область для реализации и развития: от сисадмина до CTO