Транспортный уровень обеспечивает доставку данных между приложениями на хостах.
Технологии канального уровня обеспечивают доставку данных от одного хоста к другому в рамках сетевого сегмента. Сетевой уровень обеспечивает доставку данных между хостами. И не важно, в одном или в разных сегментах сети находятся эти хосты. А транспортный уровень обеспечивает доставку данных между приложениями.
Сейчас на хостах одновременно работают десятки различных приложений. И вот на хост пришел пакет. Для какого приложения он предназначен? Этот и другие вопросы решает транспортный уровень.
В стеке 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. Если у вас Windows, то в командной строке (cmd.exe) наберите netstat -an. В результате вы должны увидеть вывод наподобие того, как на рисунке ниже.
А если у вас ОС Linux, то посмотреть список активных портов можно командой netstat - anltp.
Для 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 и имя программы. Как на рисунке.
Например, в 5-й строке вывода команды netstat можно видеть
Local Address 0.0.0.0:80
а в качестве PID указан nginx. Это веб-сервер NGINX открыл порт 80 и готов обслуживать запросы пользователей.
netstat удобная утилита, которая позволяет вам узнать состояния всех ваших портов, а также ответить на вопрос - какое приложение занимает конкретный порт.
Note
|
В современных дистрибутивах ОС Linux помимо утилиты netstat можно использовать утилиту ss, например, ss -tuap |