Механизм гнезд и мультиплексирование соединений

Для установления соединения между двумя процессами на различных компьютерах сети требуется знать не только IP-адрес сетевого интерфейса компьютера, но и номер TCP-порта (сокет приложения, например, 80 для http), который процесс использует на данном компьютере. В соответствии с IP-адресом соединения порты образуют систему гнезд (sockets). Поэтому, гнездо всегда представляет из себя пару «IP-адрес соединения+порт». Пара гнезд (сокетов) уникально идентифицирует соединение или поток данных в IP-сетях, а порт обеспечивает независимость каждого TCP-канала на данном компьютере. Несколько процессов могут использовать один и тот же TCP-порт, но с точки зрения процесса между ними не будет разницы. Данные передаются между прикладным процессом и модулем TCP. Типичным прикладным процессом, использующим TCP является FTP. Стек взаимосвязанных протоколов в этом случае можно представить схемой: FTP / TCP / IP / ENET. При использовании протокола UDP данные передаются между прикладным процессом и модулем UDP. Например SNMP пользуется транспортными услугами UDP. Его стек протоколов выглядит так: SNMP / UDP / IP / ENET. Одно гнездо на компьютере может быть задействовано в соединениях с несколькими гнездами на уделенных компьютерах. Кроме того, одно гнездо может передавать поток данных в обоих направлениях. Т.о. механизм гнезд позволяет на одном компьютере одновременно работать нескольким приложениям и уникально идентифицировать каждый поток данных сети. Это и называется мультиплексированием соединений. Модули (протоколы) TCP, UDP и драйвер ENET являются мультиплексорами типа n*1. Действуя как мультиплексоры, они переключают несколько входов на один выход. Они также являются демультиплексорами типа 1*n, переключая один вход на один из многих выходов в соответствии со значением поля «тип» в заголовке протокольного блока данных, когда, например, Ethernet-кадр попадает в драйвер сетевого интерфейса Ethernet, он может быть направлен либо в модуль ARP, либо в модуль IP. В этом случае, значение поля «тип» в заголовке кадра как раз и укажет, куда должен быть направлен Ethernet-кадр. Если IP-пакет попадает в модуль IP, то содержащиеся в нем данные могут быть переданы либо модулю TCP, либо модулю UDP, что определяется полем «протокол» в заголовке IP-пакета. Если TCP-сообщение попадает в модуль TCP, то выбор прикладной программы, которой должно быть передано сообщение, осуществляется на основе значения поля «порт» в заголовке TCP-сообщения. Представим схемой инкапсуляцию протоколов верхнего уровня в протоколы стека TCP/IP.

 

Мультиплексирование данных в обратную сторону осуществляется просто, поскольку из каждого модуля (протокола) существует только один путь вниз. Каждый протокольный модуль добавляет к блоку передаваемых данных свой заголовок, на основании которого компьютер, принявший этот блок данных (на канальном уровне это фрейм, в поле данных которого находится IP-пакет) выполняет демультиплексирование.

Назначение портов приложением на каждом компьютере происходит независимо друг от друга. Протокол TCP может самостоятельно выбирать порт, с которым будет работать приложение или приложение укажет, с каким портом на данном компьютере оно будет работать. Как правило, часто используемые приложения – сервисы, используют одни и те же номера портов, которые стали общеизвестны, например, такие протоколы прикладного уровня (уровня приложений) как HTTP, FTP и др. В этом случае, чтобы обратиться к данному процессу, необходимо указывать только адрес машины. Например, для веб-браузера это порт №80. Это наиболее распространенный порт.