В этом посте мы поговорим о том, как происходит мультиплексирование и демультиплексирование на транспортном уровне. Прежде чем мы перейдем к этой теме, давайте сначала потрясли память о том, что мы уже знаем о TCP / IP (протокол управления передачей / Интернет-протокол), чтобы мы все были на одной странице. Давайте начнем с процессов.
Что такое процесс?
Думайте о процессе как о программе, работающей в конечной системе. Итак, как процессы в двух разных конечных системах взаимодействуют друг с другом? Что ж, благодаря обмену сообщениями по сети и именно в этом случае использование протокола TPC / IP помогает нам понять, как происходит обмен данными между хостами.
Следующая диаграмма примерно показывает, что происходит, когда мы отправляем данные по сети из одного процесса в другой.
Как вы можете видеть здесь, костюм протокола TCP / IP состоит из разных уровней, и помните, что каждый протокол верхнего уровня использует службы, предоставляемые одним или несколькими протоколами нижнего уровня.
Разные имена для пакетов?
Пакеты информации, которые проходят через эти слои, называются разными именами на каждом уровне. На уровне приложения данные, которыми необходимо обмениваться, называются сообщениями. Затем транспортный уровень принимает это сообщение и добавляет к нему заголовки транспортного уровня. Результирующий инкапсулированный пакет называется сегментом. Когда сегмент передается на сетевой уровень, он оборачивает сегмент своими собственными заголовками сетевого уровня и получает имя датаграммы. Затем, когда канальный уровень принимает эти дейтаграммы, он добавляет связанные с канальным уровнем заголовки и передает эти пакеты, которые затем называются кадрами, на физический уровень для передачи.
В месте назначения происходит обратный процесс. Каждый уровень декапсулирует принимаемые пакеты и передает полезную нагрузку на уровень более высокого уровня, пока сообщение не достигнет уровня приложения. Здесь следует иметь в виду, что между источником и назначением может быть много маршрутизаторов, коммутаторов канального уровня, которые могут содержать различный набор уровней в зависимости от их функциональности. Например, маршрутизаторы, как правило, не имеют транспортных или прикладных уровней, реализованных в них.
Процесс для обработки связи
Если вы посмотрите на сетевой уровень, он отвечает только за связь между хостами. То есть он может доставлять сообщения только на конечный компьютер. Как только сообщение доставлено в пункт назначения, его все равно необходимо передать правильному процессу, и транспортный уровень несет ответственность за это.
Предположим, на вашем компьютере запущено три процесса приложения. Теперь, когда ваш компьютер получает данные извне, это сообщение должно быть направлено на правильный процесс приложения. Это где розетки вступают в игру, и сейчас самое время представить это.
Розетки
Транспортный уровень фактически не доставляет сообщения непосредственно процессам. Итак, кто это делает? Ну, есть промежуточный программный интерфейс, называемый уровнем сокетов, который осуществляет передачу сообщений между подчеркнутой сетью и процессами. Теперь помните, что процесс может иметь один или несколько сокетов, через которые он может передавать данные в сеть и из сети, и каждый из этих сокетов имеет уникальный идентификатор.
Итак, что такое мультиплексирование и демультиплексирование?
Транспортный уровень собирает порции данных, которые он получает из разных сокетов, и инкапсулирует их с транспортными заголовками. Передача этих результирующих сегментов на сетевой уровень называется мультиплексированием.
Мультиплексирование
Обратный процесс, который доставляет данные в правильный сокет транспортным уровнем, называется демультиплексированием. Но это все еще не объясняет, как транспортный уровень идентифицирует правильный сокет. Номера портов – это те, которые делают свое дело.
Номера портов
Каждому сокету в хосте может быть назначен номер порта. В соответствии с протоколом TCP / IP номера портов представляют собой 16-разрядные числа в диапазоне от 0 до 65 535. Хорошо известные номера портов начинаются с 0 до 1023, и они зарезервированы для известных протоколов приложений. Например, HTTP использует порт 80, FTP 21 и т. д.
Теперь давайте рассмотрим, как эти номера портов полезны для понимания роли мультиплексирования и демультиплексирования транспортного уровня. Когда пакеты прибывают, транспортный уровень ищет номер порта назначения в сегменте, который связан с этим номером порта, но одного этого недостаточно для TCP, чтобы демультиплексировать входящий сегмент. Он должен проверить все четыре элемента (локальный хост, локальный порт, внешний хост, внешний порт) в паре сокетов, чтобы однозначно идентифицировать конечную точку, к которой должен быть направлен принимающий сегмент. Затем данные в этом сегменте проходят через сокет в присоединенный процесс.
Клиентские и серверные процессы
Напоследок о клиент-серверной парадигме. Ранее мы вкратце говорили о процессе общения. В контексте связи между этими процессами помните, что процесс, который инициирует связь, называется клиентом, а процесс, который ожидает контакта, называется сервером. Чтобы установить соединение между клиентом и сервером, для протокола TCP требуется как IP-адрес, так и номер порта на каждом конце, и эта комбинация IP-адреса и порта называется адресом сокета.
То, о чем мы говорили до сих пор, это просто теоретический материал. Теперь, чтобы увидеть все это в действии, вы можете прочитать следующий пост, в котором эти концепции подробно объясняются фрагментами кода.