Подтвердить что ты не робот

При выполнении IPC с использованием сокетов TCP/IP с использованием обратного адреса, общие сетевые стеки пропускают кадрирование сообщения в PDU более низкого уровня?

В некоторых средах, таких как Java, естественно использовать сокеты TCP/IP для передачи сообщений между процессами на одном хосте, используя адрес localhost (127.0.0.1 в IPv4 или:: 1 в IPv6). (Поскольку Java не стремится раскрывать другие механизмы IPC в своем API).

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

С другой стороны, если сетевой стек TCP/IP понял, что оба конца соединения находятся в интерфейсе loopback, он может сделать справедливую бит оптимизации, чтобы эффективность могла не сильно отличаться от использования труб.

Но делают ли обычные операционные системы (Windows, Linux) такими оптимизациями в своих стеках TCP/IP?

4b9b3361

Ответ 1

Да. Когда принимается пакет/данные на адрес Loopback (127.x.x.x), IP-уровень TCP/IP использует маршрут Loopback для маршрутизации пакета к себе.

Looback Route

Назначение сети || Сетевая маска ||   Шлюз || Интерфейс || Метрика

     

127.0.0.0 |||||||||||||||||||||| 255.0.0.0 || 127.0.0.1 || 127.0.0.1 || 1

После маршрутизации на itsef на уровне TCP/UDP с помощью блоков управления протоколом (для каждой структуры данных соединения) будет идентифицирован соответствующий сокет и его процесс владельца для доставки пакета/данных.

Нижняя строка. Все задачи на уровнях передачи данных и физических уровнях (модели OSI) будут устранены.

Ответ 2

Зависит от ОС и используемой конфигурации. Ответ - да, если вы запрашиваете поведение по умолчанию.

Именно по этой причине вы не можете использовать такие инструменты, как wireshark, чтобы обнюхивать локальные сценарии loopback.

Ответ 3

В частности, в linux, когда пакеты передаются по интерфейсу loopback, ядро ​​запускает "программное" прерывание для каждого пакета. С этого момента прием пакетов идентичен потоку приема пакета для физического устройства. Таким образом, вы правы в своем предположении, что связь через интерфейс loopback будет намного медленнее, чем альтернативные механизмы IPC, такие как unix-сокеты.

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