12 мин.

Введение в терминологию сетей, интерфейсы и протоколы

Вольный перевод статьи An Introduction to Networking Terminology, Interfaces, and Protocols из блога DigitalOcean с дополнительными ссылкам на связанные материалы (в основном wiki).

Введение

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

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

Это руководство не зависит от операционной системы, но должно быть очень полезно при реализации сервисов, которые используют сеть на вашем сервере.

Глоссарий сетевого взаимодействия

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

В следующих разделах эти термины будут рассмотренны подробнее:

  • Соединение. В сетевом взаимодействии соединение касается некоторых фрагментов связанной информации, которые передаются через сеть. Обычно они означают, что создаётся некоторое соединение до передачи данных (следуя процедурам, изложенным в протоколе), а затем уничтожается в конце передачи данных.

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

    Пакеты имеют заголовок, который содержит информацию о пакете, включая источник и пункт назначения, временные метки, кол-во хопов и т.д. Основная часть пакета содержит фактические данные, которые передаются. Его иногда называют телом или полезной нагрузкой (payload).

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

    Сетевой интерфейс может быть связан с физическим устройством или может быть неким виртуальным интерфейсом. Примером этого является устройство "loopback", которое является виртуальным интерфейсом к локальной машине.

  • LAN. LAN означает "локальная сеть". Она относится к сети, которая не является общедоступной для Интернета. Примером локальной сети является домашняя или офисная сеть.

  • WAN. WAN означает "глобальная сеть". Эта сеть намного шире локальной сети. Хотя WAN является термином для описания больших распределённых сетей, обычно это означает именно Интернет.

    Если интерфейс подключен к WAN, то предполагается, что он доступен через Интернет.

  • Протокол. Это набор правил и стандартов, которые используют устройства для связи. Существует множество протоколов, широко используемых в сети, и они часто реализуются на разных уровнях.

    Некоторые протоколы низкого уровня – TCP, UDP, IP и ICMP. Знакомыми примерами протоколов уровня приложений, построенных на более низких протоколах указанных выше, являются HTTP (для доступа к веб-контенту), SSH, TLS / SSL и FTP.

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

  • Брандмауэр. Это программа, которая разрешает или запрещает какой-либо входящий или исходящий трафик. Брандмауэр обычно использует правила, где описан тип трафика являющийся приемлемым для портов. И обычно, брандмауэры блокируют порты, которые не используются на сервере.

  • NAT. NAT означает "преобразование сетевых адресов". Это способ перевода входящих запросов на маршрутизаторе на соответствующие устройства или сервера в локальной сети. Обычно это реализуется в физических локальных сетях при маршрутизации запросов через один IP-адрес на необходимые backend-сервера.

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

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

Протоколы сетевого уровня

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

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

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

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

Когда данные отправляются с одной машины, то это начинается с верхней части стека и фильтруется вниз. На самом низком уровне происходит фактическая передача на другую машину. В момент получения данные проходят обратный путь через те же слои на другом компьютере.

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

Сетевая модель OSI

Исторически одним из способов говорить о разных уровнях сетевой коммуникации является модель OSI. OSI означает Open Systems Interconnect (сетевая модель взаимодействия открытых систем).

Эта модель определяет семь отдельных слоев:

  • Прикладной (application). Это уровень, с которым чаще всего взаимодействуют пользовательские приложения. Сетевая связь тут обсуждается с точки зрения доступности ресурсов, партнеров для связи и синхронизации данных.

  • Представительский (presentation). Уровень представления отвечает за кодирование / декодирование данных и создание контекста. Он используется для перевода сетевых данных нижнего уровня в данные, которые ожидают увидеть приложения.

  • Сеансовый (session). Сеансовый уровень является обработчиком соединения. Он создает, поддерживает и разрушает соединения между узлами.

  • Транспортный (transport). Транспортный слой отвечает непосредственно за передачу данных и надёжность этой передачи. В этом контексте надежность относится к способности проверять, что часть данных была получена без изменений на другом конце соединения.

    Этот уровень может повторно отправить информацию, которая была удалена или повреждена, и может подтвердить факт получения данных на удаленном хосте.

  • Сетевой (network). Сетевой уровень используется для маршрутизации данных между различными узлами в сети. Он использует адреса, чтобы иметь возможность указать, на какой компьютер отправить информацию. Этот слой также может разбить большие сообщения на куски, которые должны быть собраны на противоположном конце.

  • Канальный (data link). Этот уровень реализован как метод установления и поддержания надежных связей между различными узлами или устройствами в сети с использованием существующих физических соединений.

  • Физический (physical). Физический уровень отвечает за обработку реальных физических устройств, которые используются для установления соединения. Этот уровень включает в себя программы, которые управляют физическими соединениями1, а также самими аппаратными средствами (например, Ethernet).

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

Стек протоколов TCP/IP

Модель TCP/IP представляет собой еще одну модель расслоения, которая является более простой и широко применяемой. Она определяет четыре отдельных слоя, некоторые из которых пересекаются с моделью OSI:

  • Прикладной (application). В этой модели прикладной уровень отвечает за создание и передачу пользовательских данных между приложениями. Приложения могут быть на удаленных системах, но должны отображаться как будто бы они локальные для конечного пользователя.

    Комуникация происходит между двумя участниками.

  • Транспортный (transport). Транспортный уровень отвечает за связь между процессами. Этот уровень использует порты для адресации между различными сервисами. Он может создавать ненадежные или надежные соединения в зависимости от типа используемого протокола.

  • Cетевой (internet). Сетевой уровень используется для передачи данных с узла на узел. Этот уровень знает о конечных точках соединения, но не беспокоится о фактическом соединении, необходимом для перехода из одного места в другое. IP-адреса определены на этом уровне как способ достижения удаленных систем адресным образом.

  • Канальный (link). Канальный уровень реализует фактическую топологию локальной сети, которая позволяет сетевому слою представить адресный интерфейс. Он устанавливает соединения между соседними узлами для отправки данных.

Как вы можете видеть, модель TCP/IP является немного более абстрактной и гибкой. Это упростило реализацию и позволило ей стать доминирующим способом категоризации сетевых уровней.

Интерфейсы

Интерфейсы – это сетевые точки связи для вашего компьютера. Каждый интерфейс связан с физическим или виртуальным сетевым устройством.

Как правило, ваш сервер будет иметь один настраиваемый сетевой интерфейс для каждой имеющейся у вас Ethernet или беспроводной интернет-карты.

Также определяется виртуальный сетевой интерфейс, называемый "loopback" или интерфейс localhost. Он используется как интерфейс для подключения приложений и процессов на одном компьютере к другим приложениям и процессам на этом же компьютере. Также во многих интсрументах он называется "lo".

Администраторы настраивают один интерфейс для обслуживания трафика из Интернета, а другой для локальной или частной сети.

В DigitalOcean, в датацентрах с включенной частной сетью, ваш VPS будет иметь два сетевых интерфейса (в дополнение к локальному интерфейсу). Интерфейс "eth0" будет настроен для обработки трафика из Интернета, а интерфейс "eth1" будет работать для связи с частной сетью.

Протоколы

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

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

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

Управление доступом к среде (MAC)

Управление доступом к среде (Media Access Control, MAC) – протокол связи, используемый для того, чтобы различать определенные устройства. Каждое устройство должно получить уникальный MAC-адрес во время производственного процесса, который отличает его от любого другого устройства в Интернете.

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

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

IP

Протокол IP является одним из основных протоколов, которые позволяют работать в Интернете. IP-адреса уникальны в каждой сети, и они позволяют машинам обращаться друг к другу по сети. Он реализован на сетевом уровне в модели TCP/IP.

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

Существует несколько различных вариантов реализации протокола. Наиболее распространенным сегодня является IPv4, хотя популярность IPv6 растет как альтернатива из-за нехватки доступных адресов IPv4 и улучшения возможностей протокола.

ICMP

ICMP означает "протокол межсетевых управляющих сообщений". Он используется для отправки сообщений между устройствами для указания доступности ресурсов или при возникновении ошибки. Эти пакеты используются в различных сетевых диагностических инструментах, таких как ping и traceroute.

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

TCP

TCP означает "протокол управления передачей". Он реализован на транспортном уровне модели TCP/IP и используется для установления надежных соединений.

TCP – один из протоколов, который инкапсулирует данные в пакеты. Затем он переносит их на удаленный конец соединения, используя методы, доступные на нижних уровнях. При приёме пакета, он может проверять наличие ошибок, запрашивать отдельные фрагменты и повторно собирать информацию в одну логическую часть для отправки на прикладной уровень.

Протокол создает соединение до передачи данных с использованием системы, называемой трёхэтапным рукопожатием (three way handshake). Этот способ позволяет двум сторонам подтвердить запрос соединения и согласовать метод обеспечения надежности данных.

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

TCP является основным протоколом для связи в Интернете, включая WWW, FTP, SSH и электронную почту. Можно с уверенностью сказать, что Интернет не был бы таким, каким мы его знаем, без TCP.

UDP

UDP обозначает "протокол пользовательских датаграмм". Это популярный сопутствующий протокол для TCP, который также реализован на транспортном уровне.

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

Поскольку не требуется ждать подтверждения того, что данные были получены или необходима повторная пересылка данных, UDP намного быстрее, чем TCP. Он не устанавливает соединение с удаленным хостом, он просто бросает данные в какой-то хост и не заботится о факте принятия этих данных.

Поскольку это простая транзакция, то он полезен для простых коммуникаций, таких как запрос сетевых ресурсов. Он также не поддерживает состояние, а значит отлично подходит для передачи данных с одной машины сраз многим клиентам в режиме реального времени. Это делает его идеальным для VoIP, игр и других приложений, которые не могут позволить себе задержку.

HTTP

HTTP означает "протокол передачи гипертекста". Это протокол, определенный на прикладном уровне, который формирует основу для связи в Интернете.

HTTP определяет ряд методов, которые сообщают удаленной системе, что вы запрашиваете. Например, методы GET, POST и DELETE взаимодействуют с запрошенными данными по-разному.

FTP

FTP означает "протокол передачи файлов". Он также находится на прикладном уровне и обеспечивает метод передачи целых файлов с одного узла на другой.

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

DNS

DNS означает "система доменных имён". Это протокол прикладного уровня, используемый для обеспечения удобного для пользователя механизма именования интернет-ресурсов. Это то, что связывает доменное имя с IP-адресом и позволяет вам обращаться к сайтам по имени в вашем браузере.

SSH

SSH означает "безопасная оболочка". Это протокол с шифрованием, реализованный на прикладном уровне, который можно использовать для безопасного обмена данными с удаленным сервером. Благодаря сквозному шифрованию и повсеместному использованию этого протокола вокруг него создано множество дополнительных технологий.

Есть много других протоколов, которые мы не рассмотрели, но они также важны. Тем не менее, это должно дать вам хороший обзор некоторых фундаментальных технологий, которые делают Интернет и сетевое взаимодействие возможными.

Вывод

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

  1. На этом уровне описываются параметры сигналов, такие как амплитуда, частота, фаза, используемая модуляция, манипуляция. Решаются вопросы связанные с синхронизацией, избавлением от помех, скорости передачи данных [wiki]. — Прим. пер.