Потоки, стек протоколов, механизм портов и мультиплексирование

Чтобы установить соединение между двумя процессами на разных компьютерах сети, необходимо знать не только Internet-адреса компьютеров, но и номера тех ТСР-портов (sockets), которые процессы используют на этих компьютерах. Любое TCP-соединение в сети Internet однозначно идентифицируется двумя IP-адресами и двумя номерами ТСР-портов.

Рассмотрим потоки данных, перенос которых обеспечивают протоколы. При использовании протокола TCP данные передаются между прикладным процессом и модулем TCP. Типичным прикладным протоколом, использующим протокол TCP, является FTP (File Transfer Protocol, Протокол переноса файлов). Стек протоколов в этом случае выглядит следующим образом: FTP/TCP/IP/Ethernet. При использовании протокола UDP (User Datagram Protocol, Протокол дейтаграмм пользователя) данные передаются между прикладным процессом и модулем UDP. Транспортными услугами протокола UDP пользуется, например, SNMP (Simple Network Management Protocol, Простой протокол эксплуатационного управления сетью). Его стек протоколов выглядит так: SNMP/UDP/IP/ Ethernet.

Один порт компьютера может быть задействован в соединениях с несколькими портами удаленных компьютеров. Таким образом, механизм портов позволяет работать на одном компьютере одновременно нескольким приложениям и однозначно идентифицировать каждый поток данных в сети. Это называется мультиплексированием соединений.

Модули TCP, UDP и драйвер Ethernet являются мультиплексорами типа n x 1. Действуя как мультиплексоры, они переключают несколько входов на один выход. Они также являются демультиплексорами типа 1 х п. Как демультиплексоры, они переключают один вход на один из многих выходов в соответствии с определенным полем в заголовке протокольного блока данных (в Ethernet-кадре это поле «тип»). Когда Ethernet-кадр попадает в драйвер сетевого интерфейса Ethernet, он может быть направлен либо в модуль ARP, либо в модуль IP. (Значение поля «тип» в заголовке кадра указывает, куда должен быть направлен Ethernet-кадр.)

Если IP-пакет попадает в модуль IP, то содержащиеся в нем данные могут быть переданы либо модулю TCP, либо UDP, что определяется полем «Protocol» в заголовке IP-пакета. Если TCP-сообщение попадает в модуль TCP, то выбор прикладной программы, которой должно быть передано сообщение, производится на основе значения поля «порт» в заголовке TCP-сообщения.

Демультиплексирование данных, передаваемых в обратном направлении, осуществляется довольно просто, так как из каждого модуля существует только один путь «вниз». Каждый протокольный модуль добавляет к пакету свой заголовок, на основании которого машина, принявшая пакет, выполняет демультиплексирование.

Назначение портов для приложений на каждом компьютере производится независимо. TCP может самостоятельно выбирать порт, с которым будет работать приложение, или приложение укажет, с каким портом на данном компьютере оно будет работать. Однако, как правило, часто используемые приложения-сервисы, например, такие как HTTP, FTP, SMTP и др., используют одни и те же номера портов, которые уже стали общеизвестными. Это делается для того, чтобы к данному процессу на компьютере можно было присоединиться, указывая только адрес машины. Например, lnternet-браузер, если ему не указать дополнительно, ищет по указанному адресу приложение, работающее с портом 80 (наиболее распространенный порт для серверов WWW). Кроме того, рабочая станция может быть снабжена несколькими сетевыми интерфейсами, тогда она должна осуществлять мультиплексирование типа n х т, т. е. между несколькими прикладными программами и несколькими интерфейсами.