Сетевой интерфейс (сетевой адаптер) — это часть аппаратного устройства, которая позволяет операционным системам и программам передавать данные через компьютерную сеть. Другими словами, сетевой интерфейс является частью сетевой карты, маршрутизатора, коммутатора и других устройств.
Для обычного пользователя интерфейс выглядит как физическая сетевая плата (network interface controller, NIC), однако есть и виртуальные адаптеры.
Виртуальным сетевым интерфейсом называют технологическую систему, с помощью которой можно передавать данные между приложениями. Такой тип адаптера функционирует на базе специального программного обеспечения.
Кроме того, он может передавать данные через физические адаптеры и используется в облачной инфраструктуре для подключения виртуальных устройств. Виртуальные интерфейсы можно использовать для объединения нескольких аппаратных интерфейсов или организации VPN-туннелей.
Один из самых популярных виртуальных сетевых интерфейсов — loopback. Его используют для подключения приложений и процессов на одном компьютере к другим приложениям и процессам. Во многих операционных системах он обозначается как адаптер lo с IP-адресом 127.0.0.1.
Идентификаторы и свойства сетевых интерфейсов
В операционных системах есть много идентификаторов, некоторые из которых позволяют различать сетевые интерфейсы. Среди них — глобальный уникальный идентификатор GUID и MAC-адрес.
Однако есть идентификаторы, по которым нельзя однозначно определить интерфейс. Как правило, сетевые адаптеры идентифицируют по IP-адресу, реже — по MAC. Также можно идентифицировать интерфейс по расположению PnP (номеру слота PCI) или его номеру. На практике самыми распространенными идентификаторами считаются имена адаптеров (lo, eth0, eth1 и другие).
Как работает сетевой интерфейс
Во время работы приложение отправляет данные на сетевой интерфейс, где данные делятся на части и инкапсулируются в необходимые блоки, а позже — в пакеты, если их нужно передать по TCP/IP. Далее они отправляются на нужный сетевой интерфейс с IP-получателя.
Например, на устройстве может быть подключено несколько проводных интерфейсов, каждому из которых присваивается свой сетевой адрес в зависимости от того, к какой подсети он подключен. При первой установке Ethernet в операционной системе запускается автоматическая настройка — интерфейсу присваивается имя ent0. А также добавляются адаптеры Ethernet 2 и IEEE 802.3 с именами en0 и et0 соответственно.
Физическое соединение
При физическом Ethernet-соединении используются MAC-адреса — уникальные идентификаторы, которые присвоены всем устройствам внутри компьютерной сети. Администратор сети может назначать их самостоятельно — например, если нужно организовать подключение по технологии Token Ring.
Есть несколько типов MAC-адресов:
- индивидуальный (unicast), когда данные получает только один компьютер в сети;
- групповой (multicast), когда данные поступают на все устройства с этим адресом (например, 01:00:0C:CC:CC:CC);
- широковещательный (broadcast), когда данные получают все устройства в сети (FF:FF:FF:FF:FF:FF).
Если в одной сети есть два устройства с одинаковыми MAC-адресами, они будут работать нестабильно или начнутся проблемы в таблице коммутации (mac-flapping).
MAC-адреса лежат в основе сетей на канальном уровне, которую используют протоколы более высокого (сетевого) уровня. Для преобразования MAC-адресов в адреса сетевого уровня и обратно необходимо использовать специальные протоколы — например, ARP и RARP.
Протоколы и адресация
Для обмена данными в сети необходимо использовать сетевые протоколы. Это набор правил, который определяет, каким образом передавать информацию между физическими устройствами или логическими объектами (процессами).
К семейству протоколов TCP/IP обычно относят весь набор реализаций стандартов RFC. Приведем основные из них:
- Internet Protocol, IP;
- Address Resolution Protocol, ARP;
- Internet Control Message Protocol, ICMP;
- User Datagram Protocol, UDP;
- Transport Control Protocol, TCP;
- Routing Information Protocol, RIP;
- Telnet;
- Simple Mail Transfer Protocol, SMTP;
- Domain Name System, DNS.
Во время конфигурирования устройств администратор назначает для них IP-адреса поколения IPv4 или IPv6. Первый — в 32-битном или 4-байтном формате, второй — в 128-битном.
Каждый адрес — это совокупностью двух идентификаторов: номера сети (NetID) и хоста (HostID). Устройства с одинаковыми номерами сети могут взаимодействовать друг с другом. Если же они разные, для соединения нужен маршрутизатор.
Чтобы определить, какие части IP-адреса отвечают за номера сети и узла, нужно использовать маску. В отличие от IP, в двоичном виде маски не могут чередоваться единицы и нули: сначала идут единицы (номер сети), а затем нули (номер узла).
Для IPv6 маски подсети работают схожим образом, но вместо единицы используется f. Кроме того, разрядов в такой маске будет больше, чем в маске IPv4. Если в четвертой версии их 32, то в шестой уже 128, что равно количеству бит в соответствующих IPv4- и IPv6-адресах.
Обработка ошибок и контроль потока
При передаче данных могут возникать ошибки, связанные с доставкой и целостностью пакетов. Они зависят от скорости передачи данных. Например, при очень большой скорости пакеты просто не успевают обрабатываться и теряются.
Поэтому в разных протоколах сетевого уровня предусмотрен функционал по обработке ошибок и управлению потоком. Один из популярных алгоритмов — проверка четности.
Кроме того, в стеке TCP/IP предусмотрена функция управления потоком, которая ограничивает скорость передачи данных.
Управление соединениями
Чтобы установить соединение, протокол TCP использует «тройное рукопожатие». Приложение на хосте отправляет серверу запрос на подключение. Машина подтверждает запрос, после чего клиент определяет параметры соединения. Далее начинается обмен данными на прикладном уровне. Прервать процесс может как клиент, так и сервер.
Посмотреть созданные подключения можно с помощью команды netstat с флагом -a. Чтобы посмотреть подключения конкретно по протоколу TCP, необходимо использовать параметр -p tcp.
Прием и передача данных
Уровень сетевого интерфейса отвечает за добавление и удаление заголовков протоколов передачи, необходимых для доставки сообщений. Программа передает данные на сетевой интерфейс, информация спускается «вниз» по модели TCP/IP. Далее на каждом уровне соответствующий сетевой протокол инкапсулирует исходные данные. В адаптере сообщение из цифрового сигнала преобразуется в аналоговый и отправляется до пункта назначения.
Прием данных осуществляется через обратную связь. Адаптер принимает данные и преобразует набор сигналов в последовательность битов, отправляя информацию на уровень выше, тем самым декапсулируя данные. Также сетевой интерфейс проверяет контрольную сумму полученных пакетов.
Если сумма совпадает, данные помещаются в оперативную память устройства. При несовпадении — отбрасываются, а на сервер отправляется сигнал об ошибке. Для обработки такой информации адаптер и сервер затрачивают ресурсы, поэтому иногда пользователи посылают много «мусорных» пакетов, чтобы нагрузить системы и сделать их недоступными. Это обычно называют DOS-атаками.
Настройка сетевых интерфейсов
Debian и Ubuntu
Перед настройкой сетевого интерфейса необходимо узнать его имя. Это можно сделать через список интерфейсов.
$ ip addr
Из примера выше видим, что к устройству подключены интерфейсы localhoct (lo) и Ethernet (ens33). Теперь мы можем, например, настроить динамический или статический IP.
В этих примерах мы используем следующие параметры:
- iface ens33 inet static/dhcp — указывает, что интерфейс (ens33) находится в диапазоне адресов IPv4 (inet) со статическим (static) / динамическим (dhcp) IP;
- address 192.168.0.1 — указывает IP-адрес нашей сетевой карты;
- netmask 255.255.255.0 — указывает значение маски подсети;
- gateway — адрес шлюза;
- dns-nameservers 192.168.0.254 8.8.8.8 — адреса DNS-серверов;
- auto ens33 — указывает системе, что интерфейс ens33 необходимо автоматически включать при загрузке системы с вышеуказанными параметрами.
Redhat, Fedora, CentOS
Настройка сети в CentOS хоть и отличается от алгоритма действий для Ubuntu, но основные принципы сохраняются. Подробнее можно узнать по ссылке.
Утилиты для работы с интерфейсами сети
ifconfig: просмотр информации об интерфейсах
ifconfig (Interface Configuration) — это командная утилита (драйвер) в UNIX и UNIX-подобных системах, таких как Linux. Она позволяет просматривать и изменять конфигурации сетевых интерфейсов.
С помощью ifconfig можно получить информацию о сетевых интерфейсах на компьютере, включая IP-адреса, маски подсети, MAC-адреса и другие параметры. Эта информация полезна при настройке сетевого подключения, отладке сетевых проблем.
route: настройка таблицы маршрутизации
Команду route используют для просмотра и настройки таблицы маршрутизации в операционных системах UNIX и UNIX-подобных системах, включая Linux.
Если использовать команду route без аргументов, она отобразит текущую таблицу маршрутизации на вашем компьютере. Таблица будет содержать информацию о том, какие пакеты через какие интерфейсы должны быть отправлены, чтобы достичь пункта назначения.
ip: настройка и управление сетевыми интерфейсами
Утилита ip — это мощный инструмент для настройки и управления сетевыми интерфейсами в операционных системах Linux. Она предоставляет более современный и гибкий подход к работе с сетевыми настройками, если сравнивать с устаревшей утилитой ifconfig.
С помощью утилиты можно настраивать IP-адреса на интерфейсах, управлять таблицей маршрутизации и многое другое. Подробнее с возможностями этого инструмента можно ознакомиться в документации.
Межсетевые экраны в разных ОС
Для контроля соединений и безопасности также используют встроенные межсетевые экраны. Среди них — Microsoft Defender (Windows) и Netfilter (Linux). С помощью них можно проверять пакеты, состояния соединений, программы и протоколы.
Пример настройки в Windows
Важно: настройка может повлечь обрыв соединений. Рекомендуем выполнять инструкции только на тестовых машинах с прямым доступом.
1. Открываем Windows Defender Firewall, переходим в Inbound rules и удаляем все правила по умолчанию.
2. Добавим новое правило. Для этого нажимаем new rule, переходим в менеджер создания правила и выбираем por. А после — определяемся с протоколом и прописываем порт.
3. Далее разрешаем подключение. Для этого нужно выбрать пункт Allow the connection и применить его к типу инфрейсов Public. И в завершение прописываем имя правила — оно может быть любым. То же самое выполняем для всех правил из списка. Только для исходящего трафика нужно создавать правила в разделе Outbound Rules.
Пример настройки в Debian и Ubuntu
Воспользуемся стандартной утилитой iptables и попробуем настроить разрешение для подключения по SSH.
Так как с утилитой можно работать только терминально, необходимо изучить список основных параметров и таблиц. Об этом мы подробно рассказали в отдельной статье. Поэтому сразу перейдем к команде, с помощью которой добавим разрешение для межсетевого экрана:
sudo iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW --dport 22 -j ACCEPT
Базовый файрвол Selectel
Если необходимо закрыть доступ к целой группе серверов, можно использовать базовый файрвол Selectel. Он работает, как стандартный ACL (access control list), iptables или Microsoft Defender.
Базовый файрвол — бесплатный stateless-файрвол (файрвол без сохранения состояния). Анализирует и фильтрует весь входящий и исходящий IPv4-трафик по добавленным правилам фильтрации. Поддерживает протоколы: TCP, UDP, ICMP, IPIP, GRE.
С помощью него можно ограничить доступ к подсети или подсетям, разрешив только необходимые порты, а сканер eye поможет следить за актуальностью ваших списков защиты сети.
Заключение
В этой статье мы рассмотрели физические сетевые интерфейсы, их виртуальное воплощение, их настройку в различных ОС. Сетевые адаптеры являются одной из важнейших частей сети передачи данных, без которой был бы невозможен обмен информацией в сети.