The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Каталог документации / Раздел "Документация для Linux" / Оглавление документа
next up previous contents index
Next: Установление соединения и передача Up: Протокол TCP Previous: Протокол TCP   Contents   Index

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

Для установления соединения между двумя процессами на различных компьютерах сети необходимо знать не только IP-адреса компьютеров, но и номер ТСР-порта, который процесс использует на данном компьютере. В совокупности с IP-адресом компьютера порты образуют систему гнезд (sockets). Пара гнезд уникально идентифицирует каждое соединение или поток данных в сети Internet, а порт обеспечивает независимость каждого ТСР-канала на данном компьютере. Безусловно, несколько процессов на машине могут использовать один и тот же ТСР-порт, но с точки зрения удаленного процесса между этими процессами не будет никакой разницы.

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

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

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

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

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

Назначение портов приложениям на каждом компьютере происходит независмо друг от друга. TCP может самостоятельно выбирать порт , с которым будет работать приложение, либо приложение укажет, с каким портом на данном компьютере оно будет работать. Как правило, часто используемые сервисы имеют заранее предопределенные номера портов, которые являются общеизвестными. К таким портам относятся http, fpt, smtp и многие другие. Номера портов перечислены в /etc/services.

Кроме того, машина может быть снабжена несколькими сетевыми интерфейсами, тогда она должна осуществлять мультиплексирование типа $ n \times m$, т е. между несколькими прикладными программами и сетевыми интерфейсами.



Alex Otwagin 2002-12-16

  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor