1

Я действительно плохо знаком с сетью и пытаюсь понять это.

Я знаю, что Транспортный уровень в Internet Protocol Suite (по крайней мере, протоколы UDP и TCP) содержит номера портов источника и назначения, и что на компьютере работает одно приложение, связанное с этим номером порта.

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

Может ли кто-нибудь предоставить немного более подробное объяснение того, как операционная система делает это? (Например, является ли оно частью ядра, встроенного в ОС? Как ОС захватывает кадр? так далее.)

2 ответа2

2

Краткий ответ на вопрос: аппаратное обеспечение / прошивка сетевого интерфейса и ОС делают все это.

Точнее, есть пара водителей. Устройство обычно охватывает уровни 1 (физический) и 2 (канал передачи данных) OSI, т. Е. Преобразование между физическими сигналами (электрическими, радиосигналами) и битами и группирование их в кадры выполняется аппаратно / программно-аппаратным обеспечением. Драйвер устройства управляет соответствующими функциями. Уровни 3 (сеть) и 4 (транспорт) покрыты ОС, хотя привилегированные пользовательские процессы могут получить доступ к данным.

Как ОС захватывает кадр?

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

Данные заголовка кадра говорят, что делать с кадром. Если ядро (точнее: сетевой драйвер) знает тип полезной нагрузки (например, IPv4 или IPv6), то пакет (после удаления заголовков и трейлеров уровня 2) передается соответствующему драйверу сетевого уровня.

Он будет обрабатывать все особенности протокола сетевого уровня, такие как фрагментация и повторная сборка, вычисление и проверка контрольной суммы и т.д., А также все специфические задачи сетевого уровня, такие как маршрутизация и фильтрация пакетов. В зависимости от полезной нагрузки (TCP, UDP, ICMP, ICMPv6, GRE, SCTP, DCCP и т.д.) Пакет передается далее до соответствующего драйвера транспортного уровня. Он будет обрабатывать все специфичные для транспортного уровня вещи; для протоколов, ориентированных на соединение, таких как TCP, это означает, например, отслеживание состояния соединения, поддержание очередей и ведение учета; другая вещь - контроль за перегрузкой.

Как только пакет прошел этот уровень, он проходит дальше (снова после удаления заголовка транспортного уровня), но на этот раз процессу пользовательского пространства. Процесс пользовательского пространства практически не видит ничего из обработки более низкого уровня.

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

1

См. Где работает транспортный уровень? на стеке потока

Ответ от EJP:

Это часть операционной системы?

Да.

Это работает в своем собственном процессе или потоке?

Нет, он работает как часть операционной системы.

Как он передает информацию другим приложениям?

Через системные вызовы, например API-интерфейс Berkeley Sockets, WinSock и т.д.

или до других слоев?

Через внутренние API ядра.

Смотрите и другие ответы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .