Кратко
СкопированоНа заре создания компьютерных сетей были разработаны модели взаимодействия сетевых устройств, которые описывали программную и аппаратную реализации. Среди разработанных моделей наибольшее распространение получили:
- Сетевая модель OSI (Open Systems Interconnection).
- Модель DOD (Семейство TCP/IP).
- Модель SPX/IPX.
Сетевая модель — это описание принципов работы протоколов сетевого взаимодействия, спецификация которых закреплена в стандартах связи и используется для передачи данных в цифровом виде.
Сетевая модель OSI
СкопированоДля того чтобы корректно описать совместную работу сетевых устройств необходимо рассмотреть разные аспекты организации связи между ними. Модель OSI разбивает систему построения связи между сетевыми устройствами на уровни:
- Физический.
- Канальный.
- Сетевой.
- Транспортный.
- Сеансовый.
- Представления.
- Прикладной.
Первые три уровня описывают среду передачи данных.
Физический уровень
СкопированоФизический уровень (physical layer) отвечает за аппаратную реализацию передачи битов информации, то есть обеспечивает работу физических устройств: сетевых адаптеров, концентраторов, повторителей, медиаконвертеров (устройств для преобразования сигнала при переходе из сети с одной средой передачи данных в сеть с другой средой).
На физическом уровне рассматривают среды передачи данных: последовательный или параллельный порт, коаксиальный кабель, витая пара, радиоканал, оптоволокно, спутниковый интернет и т.д. Для передачи данных на физическом уровне существуют свои протоколы, то есть правила, по которым должен быть преобразован и передан сигнал с данными. Вы наверняка встречались с такими протоколами: IEEE 802.15 (Bluetooth), 802.11 Wi-Fi, GSM, DSL.
Канальный уровень
СкопированоКанальный уровень (data link layer) используется для организации передачи данных по сети между устройствами и для контроля ошибок целостности данных. Если на физическом уровне обеспечивается передача битов информации, то на канальном — передача кадров (фреймов).
Каждый кадр позволяет передать 1446 байтов информации и содержит кроме служебной информации контрольную сумму кадра — хэш-сумма, которая рассчитывается по данным перед передачей и после передачи позволяет проверить сохранность данных. После получения хэш-сумма вновь рассчитывается по пришедшим данным и должна совпасть с той, которая передаётся в кадре. Если совпадает, можно считать, что данные переданы верно.
Сетевой уровень
СкопированоСетевой уровень (network layer) позволяет прокладывать путь данных по сети от одного сетевого устройства к другому, то есть определяет маршрут.
Маршрутизация — важная составляющая работы сети. Существуют даже специальные устройства — маршрутизаторы. Наиболее известный разработчикам протокол сетевого уровня — это IP (Internet Protocol). Он позволяет переправить пакеты от одного сетевого устройства к другому. Пакеты — это контейнеры для данных, реализованные уже не на физическом уровне, как кадры, а на программном. Протокол IP не гарантирует соответствия порядка при доставке пакетов изначальному порядку во время отправки, не гарантирует он и то, что пакеты будут доставлены или не будут продублированы. За это отвечают протоколы более высоких уровней.
Создатели интернета спроектировали работу сетевых устройств как распределённой системы. Работу такой системы очень сложно парализовать. Путь внутри сети определяется для каждого пакета отдельно. Такая архитектура системы сложна, но обеспечивает устойчивое взаимодействие устройств, которые соединены любым образом в единую сеть.
Транспортный уровень
СкопированоТранспортный уровень (transport layer) обеспечивает необходимую целостность данных и выстраивает пакеты в правильный порядок.
Веб-разработчикам чаще всего приходится сталкиваться с протоколами TCP и UDP. TCP используется для данных, целостность и порядок которых должны быть гарантированы. UDP — для данных, целостность которых важна только в конкретный момент времени внутри небольшого блока.
Вы наверняка знакомы с подёргиванием видео или небольшими прерываниями звука, если пользовались потоковыми сервисами (например, YouTube, Apple Music, Spotify и другими), которые используют под капотом в основном UDP. Зато, когда загружается страничка какого-то сайта, потерь нет. Это как раз проверка целостности на уровне протокола TCP.
Сеансовый уровень
СкопированоСеансовый уровень (session layer) позволяет организовать сеанс связи между устройствами сети. Это необходимо для работы приложений.
Вы можете знать протокол RPC (Remote Procedure Call Protocol — удалённый вызов процедур), если пользовались API на его основе (например, JSON-RPC, GraphQL или gRPC). Однако более распространённый протокол PPTP (Point-to-Point Tunneling Protocol) менее известен широкой аудитории, при этом используется он, например, для организации работы VPN (Virtual Private Network), обеспечивая туннель между компьютером и локальной сетью, имеющей подключение к интернету.
Уровень представления
СкопированоУровень представления (presentation layer) служит для организации преобразования данных (кодирования и декодирования), преобразования протоколов и прочих служебных задач высокого уровня.
С помощью протоколов этого уровня данные в форматах, которые используются на более низких уровнях, преобразуются к формату, который подходит для работы приложений. На этом уровне появляются абстракции представления данных — форматы и структуры данных, что позволяет подготовить данные к пересылке по сети и произвести обратное преобразование.
Например, преобразование изображений от битов, которые путешествуют по сети, к форматам типа JPEG или TIFF происходит именно на этом уровне.
Прикладной уровень
СкопированоПрикладной уровень (application layer) — уровень приложений, то есть уровень, который обеспечивает максимальный уровень абстракции данных.
Протоколы прикладного уровня вам наверняка знакомы: HTTP, SMTP, POP3, FTP, SIP, TELNET и другие. Использование сетевых служб (доступ к файлам и базам данных, пересылка электронной почты) позволяет приложениям на разных сетевых устройствах взаимодействовать друг с другом.
Другие модели
СкопированоБезусловно модель OSI очень сложна и не раз подвергалась критике. В то же время эта модель предоставляет наиболее полное представление о том, как передаются данные по сети — от физической среды для передачи данных до особенностей организаций данных в специальные структуры, форматы и системы.
Иногда из модели OSI выделяют несколько уровней или отдельные семейства протоколов, которые могут использоваться для конкретных практических задач на программном уровне, в отрыве от конкретной на уровне аппаратной реализации. Примером могут служить модели DOD, IPX/SPX или AppleTalk. Но это удобно лишь с практической точки зрения: отсечь всё лишнее, чтобы вести разработку программного обеспечения наиболее эффективным способом.
Модель TCP/IP разрабатывалась для описания протоколов передачи данных в распределённых сетях и использовалась при проектировании оборудования и создания программного обеспечения для прообраза современного интернета. Четыре уровня этой модели соответствуют семи уровням модели OSI следующим образом:
- Уровень сетевого доступа TCP/IP (Network Access Layer) включает:
- Физический уровень OSI.
- Канальный уровень OSI.
- Межсетевой уровень TCP/IP (Internet Layer) соответствует:
- Сетевому уровню OSI.
- Транспортный уровень TCP/IP (Transport Layer) соответствует:
- Транспортному уровню OSI.
- Прикладной уровень TCP/IP (Application layer) включает:
- Прикладной уровень OSI.
- Представления уровень OSI.
- Сеансовый уровень OSI.
Модель IPX/SPX была разработана изначально для организации сетей в операционной системе DOS. Протоколы IPX для маршрутизации и SPX для передачи данных были широко распространены в 90-х годах прошлого века, а потом уступили пальму первенства стеку TCP/IP, поскольку не обладали достаточной эффективностью при передаче данных в глобальных сетях. Сейчас количество операционных систем, в которых реализован стек протоколов IPX/SPX стремительно сокращается. Модель IPX/SPX использует три уровня, аналогичных модели OSI:
- Сетевой.
- Транспортный.
- Сеансовый.
На практике
Скопированосоветует Скопировано
Мониторинг пакетов
СкопированоСуществуют специальные утилиты, которые позволяют просматривать пакеты в сетевом трафике, что позволяет разобраться с работой того или иного сетевого устройства. В Linux и большинстве Unix-подобных систем есть консольная утилита tcpdump, есть и кросс-платформенная утилита Wireshark с графическим интерфейсом. Эти две утилиты в основном и используются для мониторинга пакетов.
Wireshark
СкопированоУтилиту Wireshark можно скачать и установить с официального сайта. Она опенсорсная и имеет графический интерфейс, который состоит из трёх частей (сверху вниз):
- список пакетов, пересылаемых по сети;
- пакет, представленный в текстовом виде;
- пакет, представленный в бинарном виде.
Вы можете получить подробную информацию о каждом пакете, нужно лишь выбрать его из списка. Пакеты можно фильтровать по различным признакам. Существуют фильтры захвата и показа. Первый тип фильтров используется для захвата пакетов в реальном времени, сбора информации и статистики по ним. Фильтры показа (дисплейные фильтры) позволяют оперировать с уже захваченными пакетами. Захват пакетов с выбранного сетевого интерфейса осуществляется с момента нажатия кнопки «Начать захват пакетов» (Start capturing packets) и до нажатия кнопки «Остановить захват пакетов» (Stop capturing packets). Захват пакетов — это сбор информации о пакетах.
В Wireshark есть предустановленные фильтры, но можно формировать и собственные с помощью мастера или вручную в строке фильтрации в самом верху окна. Утилита Wireshark поможет веб-разработчику детально разобраться с пакетами, которые отправляются серверу или приходят от сервера. Если веб-сервер установлен на компьютере с Wireshark, можно посмотреть, как пользователи работают с сайтом.
Мониторинг пакетов также может помочь выявить аномальный трафик и проанализировать безопасность компьютера с точки зрения его работы с сетью. Данные можно сохранять в текстовый файл для последующего анализа в Wireshark или любым другим способом.
Tcpdump
СкопированоЕсли графический интерфейс не доступен, например, вы настраиваете удалённый сервер, можно использовать tcpdump. Чтобы просмотреть трафик, надо набрать команду:
tcpdump
tcpdump
Не забывайте, что на некоторых операционных системах, утилиту необходимо запускать от имени администратора.
Пока вы не прервёте работу утилиты сигналом SIGINT
, нажав сочетание клавиш Ctrl C, в терминал будет выводиться информация о пакетах. Прочитайте статью «Управление процессами», чтобы узнать больше о сигналах. Как работать с терминалом описано в статье «Интерфейс командной строки».
Пакеты можно фильтровать. Например, чтобы вывести пакеты, которые приходят на 80-й порт по протоколам транспортного уровня TCP или UDP, нужно выполнить команду:
tcpdump udp port 80 or tcp port 80
tcpdump udp port 80 or tcp port 80
Информацию можно выводить в файл, а не в терминал. Для этого нужно указать соответствующий ключ:
tcpdump -w out.pcap
tcpdump -w out.pcap
Чтобы прочитать этот файл, можно использовать Wireshark, который поддерживает данные в формате PCAP, или тот же tcpdump:
tcpdump -r out.pcap
tcpdump -r out.pcap