Skip to content

Latest commit

 

History

History
80 lines (44 loc) · 8.88 KB

lecture.adoc

File metadata and controls

80 lines (44 loc) · 8.88 KB

Транспортный уровень

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

Транспортный уровень.
Figure 1. Транспортный уровень.

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

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

В стеке TCP/IP на транспортном уровне работают два протокола TCP и UDP. Они оба выполняют одни функции, но по-разному.

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

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

Порты

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

Для идентификации приложения на хосте используются порты (ports). Порт - это поле размером 2 байта (16 бит). Соответственно, максимальный номер порта 65 535 (2 ^ 16).

Если приложение хочет принимать или отправлять данные по сети, оно обязано открыть порт. Т.е. оно как бы сообщает операционной системе - если придет пакет с данными на такой-то порт, то это ко мне.

Например, по умолчанию веб-сервер (http) открывает порт 80. И все данные, которые приходят на этот порт передаются веб-серверу. А для использования безопасного веб-подключения (https) используется 443 порт.

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

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

  • Привилегированные порты - от 0 до 1023. Эти порты может открыть только администратор или суперпользователь.

  • Пользовательские порты - от 1024 до 65 535. Эти порты может открыть обычный пользователь.

На привилегированных портах, как правило, работают хорошо известные службы в Интернет, например веб (порт 80), почта (25), DNS (53), безопасный веб (443) и другие.

На сайте IANA можно найти список служб и портов, которые за ними закреплены - https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

Утилита netstat

Посмотреть открытые и активные порты на вашем хосте можно командой netstat. Если у вас Windows, то в командной строке (cmd.exe) наберите netstat -an. В результате вы должны увидеть вывод наподобие того, как на рисунке ниже.

Вывод команды netstat под ОС Windows.
Figure 2. Вывод команды netstat под ОС Windows.

А если у вас ОС Linux, то посмотреть список активных портов можно командой netstat - anltp.

Вывод команды netstat под ОС Linux.
Figure 3. Вывод команды netstat под ОС Linux.

Для MacOS команда выглядит как netstat -anl. Вывод будет похож на то, как было показано на рисунках выше.

Как видно, вывод команды netstat под разные ОС очень похож.

Колонка Proto оказывает на протокол транспортного уровня:

  • tcp - означает протокол TCP.

  • udp - протокол UDP.

  • tcp6 - означает протокол TCP, который в качестве сетевого уровня использует IPv6.

Local Address - это локальный IP адрес и порт, которое использует приложение. Если в этом поле IP адрес равен 0.0.0.0, значит, приложение готово принимать данные, которые придут на любой IP адрес для этого хоста. Это полезно, когда на хосте сконфигурировано несколько IP адресов. Чтобы для каждого IP адреса не делать запись, в netstat добавляют одну 0.0.0.0.

Foreign Address - удаленный IP адрес и порт, другими словами, IP адрес и порт другого приложения, которое взаимодействует с локальным.

State - статус соединения. Только TCP протокол имеет статус соединения. У UDP протокола нет статусов.

PID (Process ID) - идентификатор процесса в системе. Если команду netstat выполнить от суперпользователя, то она также покажет PID и имя программы. Как на рисунке.

Вывод команды netstat под ОС Linux от суперпользователя.
Figure 4. Вывод команды netstat под ОС Linux от суперпользователя.

Например, в 5-й строке вывода команды netstat можно видеть

Local Address 0.0.0.0:80

а в качестве PID указан nginx. Это веб-сервер NGINX открыл порт 80 и готов обслуживать запросы пользователей.

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

Note
В современных дистрибутивах ОС Linux помимо утилиты netstat можно использовать утилиту ss, например, ss -tuap