Ваше местоположение в сети:
Рубрика:

Сетевые протоколы

Разделы сайта:

"Соединиться по какому-либо протоколу" - слышали такие слова? Кто они, вообще, эти протоколы передачи данных? Этой теме и посвящена данная статья (эта статья несколько сложней для восприятия, чем большинство статей на этом сайте).

Начнем с того, что сетевой протокол - это просто установленный "язык" общения программ. Вообще, что такое пересылка данных? По кабелю отправляется последовательность "битов" - нулей или единиц. Но почему этот поток доходит до целевого компьютера и что тот собирается с этим потоком делать? Естественно, должны существовать некоторые правила формирования данных, и эти правила описываются стандартными протоколами.

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

Ethernet

Канальный уровень = уровень Ethernet. Как вы видите (картинку я взял с википедии), пакет содержит некоторый параметр Ethertype, задающий тип пакета. Сами данные зависят от этого типа, и их содержание уже находится на сетевом уровне. Наиболее распространены два протокола: ARP, отвечающий за преобразование IP-адресов в MAC-адреса; и самый существенный протокол - IP. Приведем структуру пакета IP (детализация поля "Data" предудущего рисунка)

IP

Все данные, переносимые по IP уже пересылаются на конкретный IP-адрес (это не мешает посылать широковещательных запросы всем компьютерам локальной сети - просто указывается специальный IP-адрес, например, 192.168.255.255). У сетевого протокола IP тоже есть разновидности - в пакете в установленном формате передается число, обозначающее тип протокола. Например, одним из типов протоколов, подчиненных IP, является ICMP, используемый командой ping для проверки, откликается ли компьютер.

Но наиболее распространены два следующих типа: TCP - Transmission Control Protocol и UDP - universal datagram protocol (кстати, мы уже поднялись на транспортный уровень). Отличие же между этими протоколами таково: про протокол TCP говорят, что он "надежный", то есть в процессе обмена данными производится постоянная проверка: а дошел ли пакет до цели? А протокол UDP не предусматривает никакого контроля - отправили дейтаграмму и забыли. Когда такое нужно? Очень просто, например, при прослушивании интернет-радио. Если был сбой и пакет до вас вовремя не дошел, он уже не нужен - просто проскользнули помехи - и вы слушаете дальше. Приведем структуру TCP-пакета (детализация поля "данные" с предудущего рисунка).

TCP

Как мы видим, в пакете указывается номер порта, на который отправлен пакет. Обычно номер порта определяет тип протокола на прикладном уровене - какому именно приложению отправлены эти данные. Однако ничего не запрещает использовать нестандартные порты для своих сервисов - просто менее удобно будет пользователям. Наиболее известные сетевые протоколы - http (просмотр страниц в интернете), pop3 (получение почты). Чтобы не повторяться, отошлю к списку стандартных портов. Сами данные, получаемые приложением вкладываются в TCP-пакет (поле "данные").

Таким образом, мы получили своеобразную иерархию вложенности пакетов. В Ethernet-пакет вложен IP-пакет, в него TPC или UDP-пакет, а в него - данные, предназначенные конкретному приложению. Просто смерть кащея какая-то.

Что еще интересно, протокол DHCP, отвечающий за получение IP-адреса по MAC-адресу, также находится на прикладном уровне (по умолчанию использует UDP порты 67 и 68) - хоть у компьютера еще нет IP-адреса, он может отсылать широковещательные запросы согласно сетевым настройкам. То же самое можно сказать про протокол DNS, выясняющий IP-адрес по доменному имени.

← Быстрый тест iqФорум с поддержкой OpenID →
comments powered by Disqus