C # локальный доступ к стеку TCP / IP - PullRequest
0 голосов
/ 16 апреля 2011

У меня есть программа Visual C ++ с проприетарным протоколом точка-точка, построенным поверх сокетов TCP / IP, который позволяет передавать набор сообщений между сторонним программным обеспечением.

В документации к этому протоколу есть примечание:

Логические IP-пакеты не обязательно отображаются напрямую на физические пакеты в базовом сетевом сокете, они могут быть разбиты или объединены стеком TCP / IP.

Что это значит?

Я написал свое приложение на C # для подключения, и из-за технических ограничений оно может работать и общаться только локально. Плюс каждая миллисекунда имеет решающее значение.

Похоже, речь идет не о именованных каналах: pipelist.exe не показывает никаких конкретных записей.

Ответы [ 3 ]

1 голос
/ 16 апреля 2011

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

Когда кадры прибывают к месту назначения, информация заголовка Ethernet удаляется, и исходный пакет (при необходимости собирается заново) представляется на уровень TCP / IP на машине назначения.

Но эта переупаковка также может происходить в стеке TCP / IP. TCP и IP на самом деле являются отдельными протоколами; IP отвечает за маршрутизацию, TCP выполняет «рукопожатие» (поддерживает состояние сеанса, гарантирует доставку [или пытается] и т. Д.)

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

1 голос
/ 16 апреля 2011

Логические IP-пакеты не обязательно отображаются напрямую на физические пакеты в базовом сетевом сокете, они могут быть разбиты или объединены стеком TCP / IP.

TCP / IP не является сетевым протоколом самого низкого уровня, который существует. Есть и другие: протокол Ethernet, который соединяет устройства Ethernet, беспроводные протоколы 802.11x и другие. Все это утверждение говорит о том, что один IP-пакет может соответствовать нескольким пакетам в протоколах более низкого уровня, и что сетевой IP-уровень отвечает за буферизацию или объединение этих пакетов.

Ваше приложение вообще не должно беспокоиться об этом. Сеть TCP / IP очень эффективно обрабатывается всеми современными ядрами ОС, и если ваши требования не очень необычны, вам никогда не придется беспокоиться о том, как протокол вашего приложения разбивается на пакеты по TCP / IP или протоколам более низкого уровня.

1 голос
/ 16 апреля 2011

Если вы просто используете loopback, то IP-пакетов может вообще не быть, и в любом случае (a) разработчик вашего протокола должен был уже учесть все это и (b) TCP также скрывает все это от вас - он просто обеспечивает интерфейс потока байтов.

...