Мультиплексирование на уровне OSI 4

Я читаю эту статью, и в ней говорится о мультиплексировании на транспортном уровне модели OSI. Кажется, я не могу понять, что значит "мультиплексирование" на этом слое? Поскольку мультиплексирование является сигнальным процессом, а на транспортном уровне мы не занимаемся непосредственно сигналами.

Кто-нибудь может дать мне объяснение мультиплексирования, использованного в вышеупомянутой статье?

2 ответа

В статье, на которую ссылаются, используется "мультиплексирование", чтобы описать, как несколько приложений на одном хосте могут совместно использовать сетевой интерфейс и, тем не менее, драйвер / ядро ​​направляют пакеты в правильное приложение. Ответ заключается в том, что адресаты пакетов указываются не только IP-адресом, но и номером порта.

Каждый отправленный пакет имеет порт как часть адреса источника. Когда ваше приложение указывает "любой порт", это просто позволяет ОС назначить тот, который не используется. Когда удаленный хост отправляет ответ, он указывает не только адрес, но и порт, позволяя вашей ОС определять, в какую очередь сокетов следует поместить входящий пакет. Даже если у вас есть два приложения на одном хосте, отправляющие пакеты на один и тот же удаленный хост, номера локальных портов будут разными.

Итак, первое, что следует отметить, это то, что они говорят о портах как "адресах уровня 4" и мультиплексируют несколько потоков приложений на один порт, а также демультиплексируют несколько отдельных передач на стороне приемника.

Как и следовало ожидать, это работает только с некоторыми оговорками, в зависимости от уникальности адресации портов /L4.

Таким образом, UDP-сокет, связанный в неисключительном режиме, может иметь несколько приложений, которые отправляют все с одного адреса / порта L4. Я ничего не помню в API BSD на стороне приемника, чтобы фильтровать дейтаграммы на основе порта источника, но я могу ошибаться - если нет, вам придется вручную демультиплексировать его на более высоком уровень, чем стек, чем L4, о чем не говорится в статье.

В TCP сокет сервера (bind ()) можно объединить с accept (), чтобы разрешить несколько одновременных подключений к одному и тому же пункту назначения L4 (порту), но они должны иметь разные клиентские (исходные) порты. Я также не знаю ни одной реализации API сокетов BSD, которая позволила бы нескольким сокетам TCP-клиентов связываться с одним и тем же локальным портом, потому что TCP-сервер (получатель) может демультиплексировать поток только из-за разных исходных портов.

Другими словами, mux / demux на L4 с UDP или TCP работает только в 50% ваших случаев, и никогда в обоих направлениях одновременно

Другие вопросы по тегам