Работа с сетью

Чем отличаются соединения в Интернете и в локальной сети? Как компьютеры обмениваются данными, и как можно это отследить?

Время чтения: 8 мин

Кратко

Секция статьи "Кратко"

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

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

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

Передача файла по сети в виде пакетов

Как понять

Секция статьи "Как понять"

Чтобы работать с сетью, необходимо представлять себе, как работает сетевой протокол. Например, чтобы отобразить страницу в браузере, нужно задействовать протокол HTTP. Это протокол прикладного уровня (согласно модели OSI), который позволяет передавать данные между клиентом и сервером, как показано на рисунке:

Клиент-серверная архитектура на примере работы протокола HTTP

Разберём примерный сценарий работы протокола HTTP:

  1. Пользователь набирает адрес страницы (имя домена и внутренний путь на сайте) в адресной строке браузера и запускает загрузку страницы.
  2. Браузер обращается к сетевой службе на компьютере и формирует сетевой запрос. Запрос состоит из текстовой информации о целевой странице.
  3. Запрос разбивается на пакеты и отправляется путешествовать по сети Интернет. Адресом целевого сетевого устройства будет ближайший DNS-сервер (DNS — Domain Name System). DNS-сервер — это специальный сервер, который знает, на каких сетевых адресах расположен сайт.
  4. DNS-сервер меняет адрес целевого сетевого устройства на адрес сервера, на котором расположен запрашиваемый пользователем сайт, и отправляет пакеты дальше по сети.
  5. Запрос в виде пакетов доходит до сетевой службы сервера, собирается из пакетов и обращается к веб-серверу.
  6. Веб-сервер по запросу от пользователя формирует ответ — запрашиваемую HTML-страницу.
  7. HTML-страница и информация об адресе компьютера пользователя отдаются сетевой службе, которая разбивает всё на пакеты и отправляет в сеть.
  8. Сетевая служба пользователя принимает набор пакетов с HTML-страницей, объединяет их в один файл и отдаёт браузеру.
  9. Браузер отображает HTML-страницу. Ресурсы этой страницы (шрифты, картинки, видео, стили, JavaScript) догружаются по похожей схеме.

Работа сетевых устройств

Секция статьи "Работа сетевых устройств"

У каждого сетевого устройства есть собственный сетевой адрес. В Интернете это IP-адрес (Internet Protocol — межсетевой протокол). Благодаря этому протоколу пакеты, которые отправляются по сети, находят наиболее короткий путь от источника к адресату.

Кроме IP-адреса используются ещё и порты. Порт — это число, которое обозначает номер соединения. Порт необходим для того, чтобы определить программу или драйвер устройства в сети, которые будут обрабатывать пришедший пакет или отсылать исходящий. Количество портов ограничено и находится в диапазоне от 1 до 65 535.

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

Протоколы с проверкой целостности данных используются для передачи веб-страниц или файлов. Они проверяют целостность данных, запрашивают утерянные пакеты или пакеты, в которых была найдена ошибка. Самые распространённые — TCP (Transmission Control Protocol — протокол управления передачей) и TLS (Transport Layer Security — протокол защиты транспортного уровня).

Протоколы без проверки целостности используются для передачи видео или аудио, потому что они позволяют передавать больше данных, но с потерями. Пример такого протокола — это UDP (User Datagram Protocol — протокол пользовательских датаграмм), который не обращает внимания на утерянные пакеты или пакеты с ошибками.

Пары TCP/IP, TLS/IP или UDP/IP обеспечивают передачу пакетов между сетевыми устройствами и обычно называются стеками протоколов передачи данных. В современных операционных системах служба для работы с пакетами, адресами и портами часто реализуется на уровне ядра. Правила же обработки пакетов можно настраивать.

Работа с данными на уровне приложений

Секция статьи "Работа с данными на уровне приложений"

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

Применение HTTPS внесло ряд новых правил обработки данных, которые отныне не должны передаваться в открытом виде, а должны шифроваться. В протоколе HTTP используется TCP в качестве транспортного протокола, который совсем никак не защищает данные. Если подключиться к одному из сетевых устройств, через которое проходят пакеты, то можно прочитать их содержимое. Протокол HTTPS использует другой протокол транспортного уровня — TLS, который подразумевает шифрование пакетов. Данные пользователя передаются в зашифрованном виде.

Браузер — это одно из приложений на компьютере. Он использует один или несколько сетевых портов для отправки данных на сервер и их получения через протоколы HTTP/HTTPS, UDP и другие. Так же работает и почтовый клиент, только по другим протоколам — IMAP, POP3, SMTP. Мессенджеры тоже используют определённые протоколы для обмена сообщениями, и эти протоколы активно развиваются. Некогда популярные протоколы ICQ и IRQ сменились мессенджерами на основе протокола XMPP (прежнее название Jabber). Протоколы прикладного уровня лишь определяют формат передаваемых данных.

Сетевая служба и сетевые сервисы

Секция статьи "Сетевая служба и сетевые сервисы"

Сетевая служба организует передачу данных на уровне операционной системы. Она обеспечивает создание соединения (сокета) для сетевого сервиса и привязку его к определённому порту. После того как такое соединение создано, сетевая служба посылает все пакеты от сервиса или к сервису через указанный порт. Сетевые сервисы — это конкретные приложения, службы, демоны, которые работают в качестве поставщика данных: веб-серверы, серверы для обмена электронной почтой, серверы сообщений для мессенджеров, FTP-серверы, VPN-серверы, серверы для IP-телефонии и прочее.

Например, в браузере для передачи веб-страниц через протокол HTTPS по умолчанию используется порт 443, то есть https://example.com и https://example.com:443 эквивалентны. Поэтому браузер подставляет :443, даже не отображая это в интерфейсе. Порт даёт понять сетевой службе на сервере, какой сервис будет использоваться для обработки данных, которые приходят в виде пакетов.

Существуют стандарты от IANA (Internet Assigned Numbers Authority — «Администрация адресного пространства Интернет»), в которых описаны номера портов и соответствующие им сетевые сервисы. В стандартах также описаны диапазоны адресов, которые можно использовать для любых задач. Например, локальные веб-серверы запускают на порте 8080 или 8000.

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

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

На практике

Секция статьи "На практике"

Игорь Коровченко советует

Секция статьи "Игорь Коровченко советует"

Мониторинг сети

Секция статьи "Мониторинг сети"

Обзор сетевых устройств

Секция статьи "Обзор сетевых устройств"

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

  • ifconfig — для Unix-подобных операционных систем;
  • ipconfig /all — для операционной системы Windows.

В списке сетевых интерфейсов можно будет посмотреть и IP-адреса, к которым они будут привязаны.

С помощью консольной утилиты ping можно получить информацию о том, присутствует ли сетевое устройство в сети. Например, проверить доступность известного прокси-сервера от Google можно так:

        
          
          ping 8.8.8.8
          ping 8.8.8.8

        
        
          
        
      

Мониторинг соединений

Секция статьи "Мониторинг соединений"

Существует масса утилит для мониторинга соединений, которые собирают и отображают информацию об открытых соединениях, портах и приложениях, использующих эти соединения. Среди прочих утилита netstat присутствует практически в любой операционной системе. Например, эта утилита есть в Windows, macOS и Linux. В Linux она не всегда предустановлена, но поставляется в составе пакета net-tools.

Чтобы посмотреть все активные соединения, выполните в терминале команду:

        
          
          netstat
          netstat

        
        
          
        
      

Для фильтрации списка соединений необходимо использовать ключи. Например, для анализа активных сетевых соединений, использующих определённые протоколы, понадобится ключ -p. Так, для анализа соединений, работающих по протоколу TCP, надо выполнить команду:

        
          
          netstat -p tcp
          netstat -p tcp

        
        
          
        
      

Если воспользоваться ключом -n, то можно вывести все IP-адреса с указанием портов для каждого приложения на компьютере, которое использует сетевой интерфейс:

        
          
          netstat -n
          netstat -n

        
        
          
        
      

Для анализа безопасности компьютера важно знать, какие существуют входящие соединения. Посмотреть их можно с помощью ключа -L:

        
          
          netstat -L
          netstat -L

        
        
          
        
      

Если воспользоваться ключом -s, можно вывести статистику по протоколам:

        
          
          netstat -s
          netstat -s

        
        
          
        
      

Ключ -i позволяет посмотреть доступные сетевые интерфейсы:

        
          
          netstat -i
          netstat -i

        
        
          
        
      

Перед использованием утилиты изучите руководство с помощью команды:

        
          
          man netstat
          man netstat

        
        
          
        
      

Использование команды man подробно описано в статье «Интерфейс командной строки».

Операционная система Linux постоянно обновляется, обновляются и утилиты. Например, вместо netstat лучше использовать ss, а вместо ifconfig — утилиту ip.

Подробности
Старые команды Новые команды Применение
ifconfig -a ip a Вывод списка всех IP-адресов всех сетевых интерфейсов
ifconfig enp6s0 down ip link set enp6s0 down Выключить сетевой интерфейс
ifconfig enp6s0 up ip link set enp6s0 up Включить сетевой интерфейс
netstat ss Вывод всех активных соединений
netstat <keys> ss <keys> Ключи у команд практически совпадают, подробнее: man ss

Настройка сетевых служб

Секция статьи "Настройка сетевых служб"

Управление брандмауэром, фильтрация пакетов

Секция статьи "Управление брандмауэром, фильтрация пакетов"

Для обеспечения безопасности в сети используют брандмауэр. Это программа, которая позволяет фильтровать пакеты, проходящие через определённый порт, с учётом IP-адреса. В Unix-подобных системах используются утилиты типа iptables или nftables для анализа и перенаправления трафика. Поскольку Unix-подобные системы являются сетевыми, сама фильтрация пакетов осуществляется на уровне ядра системы, а утилиты позволяют лишь поработать с настройкой фильтрации. Правила фильтрации, описанные в настройках, применяются по цепочке. Существуют правила для входящих, исходящих и транзитных пакетов.

Например, рассмотрим запрет приёма пакетов, которые приходят по протоколу ICMP. Чтобы запретить утилите ping обнаруживать компьютер в сети, надо выполнить команду:

        
          
          iptables -A INPUT -p icmp --icmp-type echo-request - j REJECT
          iptables -A INPUT -p icmp --icmp-type echo-request - j REJECT

        
        
          
        
      

Ключ -A означает, что необходимо добавить правило в конец цепочки правил INPUT, которые обрабатывают входящие пакеты. По ключу -p можно задать протокол, у нас это — ICMP. --icmp-type — специальный ключ для этого протокола, который определяет тип пакетов для этого протокола. -j определяет действие, у нас это — отклонить. То есть входящие пакеты по протоколу ICMP типа echo-request необходимо отклонить.

Чтобы посмотреть все правила, выполняем команду:

        
          
          iptables -L
          iptables -L