Транспортный уровень — это фундаментальная часть сетевого взаимодействия в Linux, отвечающая за сквозную связь и надежную передачу данных между приложениями на разных хостах. Он подготавливает данные для транспортировки по сети структурированным и управляемым образом.
Сегментация данных
Одной из основных функций транспортного уровня является сегментация данных. Он разбивает большие объемы данных на более мелкие, управляемые части, называемые сегментами. Этот процесс делает передачу данных более эффективной и устойчивой. Если сегмент теряется или повреждается во время передачи, повторно отправлять нужно только эту небольшую часть, а не весь набор данных. После того как сегменты достигают места назначения, транспортный уровень собирает их в правильном порядке.
Понимание сетевых портов
В то время как IP-адреса определяют правильный хост в сети, они не указывают, какое приложение или служба должна получить данные. Здесь в игру вступают сетевые порты. Такие службы, как HTTP (веб-трафик) или SMTP (электронная почта), прослушивают определенные, хорошо известные порты. Например, HTTP обычно использует порт 80. Транспортный уровень добавляет номера исходного и целевого портов к каждому сегменту, гарантируя, что данные будут доставлены правильному процессу на принимающем хосте.
Основные транспортные протоколы TCP и UDP
В современных сетях используются два основных транспортных протокола: TCP (Протокол управления передачей) и UDP (Протокол дейтаграмм пользователя). Мы кратко рассмотрим UDP, а затем сосредоточимся на TCP, поскольку он наиболее широко используется для надежной связи.
UDP (Протокол дейтаграмм пользователя)
UDP — это протокол без установления соединения, который предлагает быстрый, но ненадежный способ передачи данных. Он не гарантирует, что все сегменты прибудут или что они прибудут в правильном порядке. Хотя это может показаться недостатком, UDP очень эффективен для приложений, где скорость важнее идеальной точности, таких как потоковое видео в реальном времени или онлайн-игры. Потеря нескольких кадров видео часто является приемлемым компромиссом для более плавного и быстрого потока.
TCP (Протокол управления передачей)
TCP предоставляет надежный, ориентированный на соединение поток данных. Прежде чем начнется какой-либо обмен данными, TCP устанавливает формальное соединение между двумя хостами, чтобы убедиться, что оба готовы к связи.
Трехстороннее рукопожатие TCP
Для установления соединения TCP использует процесс, называемый трехсторонним рукопожатием:
- SYN: Клиент отправляет серверу сегмент SYN (синхронизация) для инициирования соединения.
- SYN-ACK: Сервер отвечает сегментом SYN-ACK (синхронизация-подтверждение), подтверждая запрос клиента.
- ACK: Клиент отправляет обратно серверу сегмент ACK (подтверждение), подтверждая установление соединения.
После завершения рукопожатия данные могут обмениваться надежно. TCP использует порядковые номера для отслеживания каждого сегмента, что позволяет принимающему хосту собрать их в правильном порядке и запросить повторную передачу любых отсутствующих сегментов. В нашем примере с электронной почтой транспортный уровень добавил бы к каждому сегменту целевой порт для SMTP (порт 25) и исходный порт с хоста клиента.