Сетевые средства Linux

Транспортный и прикладной уровни модели сетевого взаимодействия.

Показывать лекцию целиком

Содержание:

  • Основы транспортного уровня
  • Просмотр информации о текущих соединениях и открытых портах в Linux
  • Мониторинг сетевых соединений с помощью утилиты IPTraf
  • Тестирование производительности сети с помощью утилиты iperf
  • Протоколы прикладного уровня
  • Основы транспортного уровня

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

    Взаимодействие между приложениями осуществляется посредством сокетов ( пара IP-адрес:порт ): на каждом из взаимодействующих узлов создается сокет, с которым связаны входной и выходной потоки для передачи данных (рис 7.1).

    (рис 7.1) Пример клиент-серверного взаимодействия на основе сокетов

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

    В качестве транспорта для IP используются два протокола:

  • Протокол TCP (Transmission Control Protocol) — протокол транспортного уровня с установлением соединения, управлением потоком передачи и гарантированной доставкой данных. Единицы передачи обычно называются сегментами.
  • Протокол UDP (User Datagram Protocol) — протокол транспортного уровня без установления соединения (не гарантирует доставку датаграмм — единиц передачи).
  • За наиболее популярными сетевыми службами номера портов закреплены стандартные значения. В Linux данная информация находится в файле /etc/services (пример 7.1).

    $ cat /etc/services | grep "^http\|^ssh\|^www\|^pop3\|^smtp\|^ftp"
    ftp-data               20/tcp
    ftp    21/tcp
    ssh    22/tcp        # SSH Remote Login Protocol
    ssh    22/udp
    smtp    25/tcp    mail
    www    80/tcp    http    # WorldWideWeb HTTP
    www    80/udp        # HyperText Transfer Protocol
    pop3    110/tcp    pop-3    # POP version 3
    pop3    110/udp  pop-3
    https    443/tcp        # http protocol over TLS/SSL
    https    443/udp
    ftps-data  989/tcp        # FTP over SSL (data)
    ftps    990/tcp
    pop3s    995/tcp        # POP-3 over SSL
    pop3s    995/udp
    http-alt               8080/tcp  webcache  # WWW caching service
    http-alt               8080/udp      # WWW caching service

    Содержимое файла /etc/services имеет рекомендательный характер, т. е. администратор системы может использовать нестандартные значения портов для сетевых служб. В Linux порты младше 1024 могут быть задействованы только суперпользователем. Для клиентских подключений используются порты со старшими номерами, выбираемые случайно из незанятых.

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

    Просмотр информации о текущих соединениях и открытых портах в Linux

    Для получения информации о работе транспортного уровня на узле можно использовать утилиту ss из пакета iproute2 или утилиту netstat.

    # ss -4antu
    Netid  State      Recv-Q Send-Q     Local Address:Port        Peer Address:Port 
    udp    UNCONN     0      0                         *:67                              *:*     
    tcp     LISTEN         0      128                     *:22                              *:*     
    tcp     ESTAB          0      0             192.168.1.1:55469           192.168.1.10:22    
    tcp     ESTAB          0      0             192.168.56.102:22           192.168.56.1:50405

    В данном примере локальный порт UDP/67 используется некоторой службой на всех IP-адресах узла (первая строка); локальный порт TCP/22 ожидает ( LISTEN ) подключений на всех IP-адресах (вторая строка); с удаленного адреса 192.168.56.1 установлено соединение ( ESTAB ) со службой, использующей локальный порт TCP/22 (последняя строка); с локальной системы также установлено клиентское подключение с удаленной службой на узле 192.168.1.10, использующей удаленный порт TCP/22 (третья строка).

    Ключ -4 указывает выводить сведения по протоколу IPv4, -a — выводить всю информацию, -n -выводить узлы и порты в числовом виде; -t — протокол TCP, -u — протокол UDP. Для того, чтобы узнать какие процессы используют сетевые соединения в команде ss следует использовать ключ -p. Ключ -l отображает только слушающие порты. Более подробную информацию о команде ss можно получить на странице руководства ( man ss ).

    # netstat -4antu
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp         0      0 0.0.0.0:22                    0.0.0.0:*                      LISTEN     
    tcp         0      0 192.168.1.1:55469      192.168.1.10:22         ESTABLISHED
    tcp         0      0 192.168.56.102:22      192.168.56.1:50405   ESTABLISHED
    udp        0      0 0.0.0.0:67                     0.0.0.0:*

    Используемые в данном примере ключи netstat аналогичны ключам ss в предыдущем примере. Более подробную информацию о команде netstat можно получить на странице руководства ( man netstat ).

    Мониторинг сетевых соединений с помощью утилиты IPTraf

    Утилита IPTraf представляет собой интерактивное средство отображения постоянно обновляемой сетевой статистики с текстовым интерфейсом на основе библиотеки . IPTraf способна отображать различные данные, включая информацию по TCP, счетчики UDP и ICMP, загрузку сети Ethernet, статистику узла и т. д.

    Для установки IPTraf из стандартных репозиториев Debian можно использовать команду:

    # apt-get install iptraf

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

    Доступны следующие режимы просмотра:

  • Мoнитор IP-трафика ( IP Traffic Monitor ). Для выбранного интерфейса (всех интерфейсов) включает списки TCP -соединений и статистику по ним, а также монитор UDP -датаграмм.
  • Общая статистика интерфейсов ( General interface statistics ). Для каждого интерфейса отображает статистику пакетов.
  • Детальная статистика интерфейса ( Detailed interface statistics ). Для выбранного интерфейса отображает количество переданных и полученных единиц передачи (IP-пакетов, TCP -сегментов и UDP -датаграмм и прочих) и объем данных в байтах, а также текущую скорость передачи пакетов и байт, объемы широковещательного трафика и количество ошибок в IP-пакетах.
  • Статистический анализ ( Statistical breakdowns ). Для данного интерфейса отображает распределение трафика по размеру пакетов или распределение трафика по портам.
  • Монитор станции локальной сети ( LAN station monitor ). Для выбранного интерфейса (всех интерфейсов) показывает статистику уровня сетевых интерфейсов.
  • Соответствующий режим отображения может быть установлен с помощью параметров, передаваемых IPTraf при старте. Например, для показа детальной статистики интерфейса eth0 (рис 7.2) следует использовать ключ -d:

    # iptraf -d eth0

    Подробную информацию о ключах можно получить из руководства пользователя ( man iptraf ).

    (рис 7.2) Детальная статистика интерфейса в IPTrafПримечание. Существует и другие программы, подобные IPTraf , .

    Тестирование производительности сети с помощью утилиты iperf

    Утилита iperf является простейшим средством для тестирования пропускной способности между двумя сетевыми узлами. Iperf представляет собой генератор .

    Для установки данной утилиты из репозиториев Debian:

    # apt-get install iperf

    Для тестирования сетевого соединения на одном из узлов iperf,следует запустить в режиме сервера (ключ -s ):

    # iperf -s

    а на другом — в режиме клиента (ключ -c с указанием адреса сервера):

    $ iperf -c 192.168.1.12
    $ iperf -c 192.168.1.12 
    ------------------------------------------------------------
    Client connecting to 192.168.1.12, TCP port 5001
    TCP window size: 16.0 KByte (default)
    ------------------------------------------------------------
    [  3] local 192.168.1.3 port 51670 connected with 192.168.1.12 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec  85.4 MBytes  71.6 Mbits/sec

    По умолчанию iperf использует протокол TCP. Для использования протокола UDP следует указать ключ -u. Более подробную информацию о параметрах iperf можно получить в руководстве пользователя ( man iperf ).

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

    Протоколы прикладного уровня

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

    Наиболее известные прикладные протоколы:

  • HTTP - протокол передачи гипертекста (основное средство передачи WEB-контента).
  • Почтовые протоколы SMTP (для отправки почтовых сообщений и взаимодействия почтовых серверов), POP3 и IMAP (для доступа к почтовым ящикам).
  • Протокол FTP (для обмена файлами).
  • DNS — протокол взаимодействия с серверами DNS и т.д.
  • Многие протоколы прикладного уровня имеют защищенные версии, позволяющие шифровать передаваемую информацию между клиентом и сервером, а также идентифицировать участников сетевого взаимодействия ( SSL и TLS ).

    Для задачи диагностики прикладных протоколов полезна утилита telnet, которая обычно присутствует в современных дистрибутивах Linux и позволяет пользователю взаимодействовать с текст-ориентированными TCP -сервисами средствами интерфейса командной строки.

    Примечание. Telnet — сетевой протокол, реализующий текстовый интерфейс взаимодействия поверх TCP/IP ; ранее применялся для получения удаленного доступа к интерфейсу командной строки; используется для реализации текст-ориентированных протоколов взаимодействия.

    Установка утилиты telnet:

    # apt-get install telnet

    Основными параметрами telnet выступают имя или адрес сервера и порт.

    # telnet 192.168.1.10 110
    Trying 192.168.1.10...
    Connected to 192.168.1.10
    Escape character is '^]'.
    +OK test.local Zimbra POP3 server ready
    user testuser
    +OK hello testuser, please enter your password
    pass testpassword
    +OK server ready
    list
    +OK 6 messages
    1 4763
    2 7581
    3 3348
    4 4449
    5 2437
    6 3350
    
    quit
    +OK test.local closing connection
    Connection closed by foreign host.

    В данном примере с помощью утилиты telnet осуществляется подключение по протоколу POP3 к почтовому серверу (192.168.1.10), слушающему на 110 порту. Клиент передает команды, завершая их переводом строки ( user, pass, list, quit ), а сервер каждую команду выполняет. Прикладной протокол POP3 используется клиентом для работы с почтовым ящиком на сервере; как видно из примера является диалоговым текст-ориентированным протоколом.

    Используя telnet можно работать с такими текст-ориентированными протоколами как HTTP, POP3, SMTP и т. д. Можно также просто проверять наличие службы на данном порту без знания непосредственно синтаксиса протокола.

    Ключевые термины

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

    Сокет — оконечная точка канала связи, с помощью которой приложение может использовать сетевое подключение (пара IP-адрес:порт однозначно определяющая сетевой процесс).

    ТСP (Transmission Control Protocol) — протокол транспортного уровня с установлением соединения, управлением потоком передачи и гарантированной доставкой данных.

    UDP (User Datagram Protocol) — протокол транспортного уровня без установления соединения и не гарантирующий доставку.

    Сегменты — единицы передачи протокола TCP.

    Датаграммы — единицы передачи протокола UDP.

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

    HTTP (HyperText Transfer Protocol) - прикладной протокол передачи WEB-контента.

    SMTP (Simple Mail Transfer Protocol) — прикладной почтовый протокол, используемый для отправки сообщений электронной почты и взаимодействия серверов электронной почты друг с другом.

    POP3 (Post Office Protocol Version 3) — прикладной почтовый протокол, используемый программой-клиентом электронной почты для получения корреспонденции с сервера.

    IMAP (Internet Message Access Protocol) — протокол прикладного уровня для доступа к электронной почте с расширенными возможностями.

    FTP (File Transfer Protocol) — прикладной протокол, используемый для передачи файлов

    SSL (Secure Sockets Layer) - криптографический протокол обеспечивающий защищенное соединение между клиентом и сервером.

    TLS (Transport Layer Security) — открытая версия протокола SSL.

    Краткие итоги

  • Протоколы транспортного уровня реализуют разделение потоков данных между приложениями на одном компьютере с помощью портов. Нумерации портов различных протоколов транспортного уровня не пересекаются. Номера портов записываются в заголовок единицы передачи соответствующего транспортного протокола.
  • Поверх IP используются два транспортных протокола: TCP (для надежной доставки) и UDP (для " быстрой" доставки).
  • Утилиты ss и netstat позволяют получить различную информацию об активных сетевых соединениях и открытых портах.
  • Утилита IPTraf позволяет в " режиме реального времени" получать информацию о работе сети и взаимодействии систем друг с другом.
  • Для тестирования полосы пропускания канала связи между двумя системами можно использовать утилиту iperf.
  • Большинство протоколов прикладного уровня являются текст-ориентированными (взаимодействующие системы обмениваются текстовыми сообщениями друг с другом).
  • Упражнения

  • (требуется Windows -совместимая ОС). Используя утилиту netstat Windows определите, какие TCP и UDP -порты открыты на Вашем компьютере.
  • В среде VirtualBox запустите две виртуальные машины с установленным Debian GNU\Linux с одной сетевой картой у каждой, настроенной на тип сетевого подключения "Внутренняя сеть". Установите на виртуальных машинах IP-адреса из одной подсети. Используя утилиту iperf, протестируйте пропускную способность виртуальной сети VirtualBox.
  • Некоторая сетевая TCP -служба не запускается в системе с Linux.
  • Укажите более вероятную причину:

  • Описание порта, который использует служба, отсутствует в файле /etc/services.
  • Порт занят другим приложением.
  • Вернуться к учебному плану