Протоколы

Мы начнем с обсуждения уровней взаимодействия в сетях, но давайте введем некоторые понятия:

  • Сервис - описание, какие функции реализует уровень.

  • Интерфейс - набор примитивных операций, которые нижний уровень предоставляет верхнему.

  • Протокол - правила и соглашения, используемые для связи уровня N одного уровня с уровнем N другого компьютера.

  • Уровень взаимодействия - вполне интуитивное понятие.. но давайте выделим для примера 2 уровня взаимодействия

    1. Взаимодействие двух компьютеров в сети
    2. Взаимодействие программ на этих компьютерах между собой

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

Предупреждаю

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

Модель OSI (Open system interconnection)

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

Сетевая модель OSI — сетевая модель стека сетевых протоколов OSI/ISO. Посредством данной модели различные сетевые устройства могут взаимодействовать друг с другом. Модель определяет различные уровни взаимодействия систем. Каждый уровень выполняет определённые функции при таком взаимодействии.

Модель TCP/IP

Говорить же про сеть мы с вами будем через модель TCP/IP которая определяет 4 слоя взаимодействия. В дальнейшем мы будем говорить с вами про три протокола IP, UDP, TCP, HTTP. И обязательно рассмотрим что из себя представляют пакеты/сегменты/сообщения.

Понятие "модель" вводится в целях структуризации уровней взаимодействия... если вы хотите.. можете придумать свою модель и как-нибудь ее назвать. Вы должны понимать, что Модель TCP/IP работает на тех-же протоколах, которые входят в модель OSI, различие в том что OSI является более широкой моделью, TCP/IP более специфична, что можно понять из ее названия, в котором присутвует 2 протокола: TCP и IP.

Как сказанно, модель состоит из 4 уровней:

  1. Уровень сетевого доступа - будем считать, что это Ethernet или WLAN
  2. Сетевой уровень - IP Internet Protocol
  3. Транспортный уровень - скорее всего вы столкнетесь только с 2 протоколами этого уровня: TCP и UDP
  4. Прикладной уровень - программы взаимодействующие на этом уровне мы как раз с вами и разрабатываем. Протоколы прикладного уровня: HTTP, FTP, RTSP, DNS

Что происходит когда вы подключаете свое устройство к маршрутизатору?

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

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

  • В тот момент как вы подключились к роутеру, ваше устройство захочет получить адрес в локальной сети. Автоматической выдачей адресов занимается DHCP-сервер.

    DHCP протокол я детально описывать не буду, но приложу следующее сообщение по которому можно понять каким образом выдается адрес в локальной сети.

  • После того как вы получили локальный адрес вы можете отправлять запросы по протоколу IP.

    Но возникает резонный вопрос, если устройств в сети много а выданный провайдером "айпишник" только один, то как получается, что вы получаете ответ на верный девайс? За это отвечает технология NAT(Network Address Translation)

    Перегруженный NAT (NAPT, NAT Overload, PAT, маскарадинг) — форма динамического NAT, который отображает несколько незарегистрированных адресов в единственный зарегистрированный IP-адрес, используя различные порты. Известен также как PAT (Port Address Translation). При перегрузке каждый компьютер в частной сети транслируется в тот же самый адрес, но с различным номером порта.

Как вкладываются пакеты друг в друга

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

Браузер использует следующий список протоколов(перечисление сверху вниз):

  1. HTTP
  2. TCP
  3. IP
  4. Какие-то протоколы сетевого уровня

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

Протокол TCP

Transmission Control Protocol (TCP, протокол управления передачей) — один из основных протоколов передачи данных интернета, предназначенный для управления передачей данных.

Помните вы указывали порт при запуске приложения? Вот как раз порт и отностится к протоколу TCP.

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

Взаимодействие по протоколу TCP

TCP/IP пакет

Скользящее окно

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

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

Протокол HTTP

Ухх! Вот этот протокол простой!

HTTP(Hypertext Transfer Protocol) - протокол прикладного уровня передачи данных изначально — в виде гипертекстовых документов в формате HTML, в настоящий момент используется для передачи произвольных данных.

Тело HTTP запроса состоит из заголовка и тела.

Заголовок запроса

Состоит из:

  • Стартовая строка
👇 - Метод запроса
👇 - URI(Uniform Resource Identifier)
👇 - Протокол и версия
GET /some/path HTTP/1.1
  • Заголовки

Через заголовки передается дополнительная информация к запросу, заголовки перечисляются с новой строки через двоеточие

👇 - Название заголовка
👇 - Значение заголовка
Accept: application/json

После заголовков, через одну пустую строку передается тело запроса.

Заголовок ответа

HTTP ответ очень похож на HTTP запрос отличается он только стартовой строкой

👇 - Протокол и версия
👇 - Статус ответа
👇 - Статус ответа в текстовом формате
HTTP/1.0 200 OK

Методы

  • GET - Используется для запроса содержимого указанного ресурса. С помощью метода GET можно также начать какой-либо процесс. В этом случае в тело ответного сообщения следует включить информацию о ходе выполнения процесса.
  • HEAD - Аналогично GET, но в ответе от сервера не стоит ожидать тела.
  • POST - Применяется для передачи пользовательских данных заданному ресурсу.
  • OPTIONS - Используется для определения возможностей веб-сервера или параметров соединения для конкретного ресурса.
  • PUT - Используется для создания или обновления существующего ресурса.
  • PATCH - Используется для частичного изменения существующего ресурса.

Статусы ответов

  • 1xx - Информирование о процессе передачи.
  • 2xx - Информирование о случаях успешного принятия и обработки запроса клиента. В зависимости от статуса, сервер может ещё передать заголовки и тело сообщения.
  • 3xx - Сообщает клиенту, что для успешного выполнения операции необходимо сделать другой запрос (как правило по другому URI)
  • 4xx - Сообщает клиенту, что он совершил неверный запрос.
  • 4xx - Информирование о случаях неудачного выполнения операции по вине сервера.

Популярные заголовки

Заголовки запросов

  • Accept - указывается в каком формате вы хотите получить ответ
  • Content-Type - тип ответа в виде mime-type
  • Connection - говорит о том, как следует поступать с TCP соединением
  • Host - с какого урла отправляется запрос
  • Cookie - для передачи кук сохраненных в браузере

Заголовки ответов

  • Content-Type - тип ответа в виде mime-type
  • Content-Length - размер ответа в байтах
  • Date - время ответа