Пользовательский протокол дэйтаграм(UDP)

Конечно, TCP не единственный протокол пользователя в TCP/IP сетях. Хоть он и подходит для приложений подобных rlogin, но он излишне надежен и не нужен для приложений типа NFS. Вместо, него в них использует UDP, или протокол пользовательских дэйтаграм. Подобно TCP, UDP также позволяет приложению войти в контакт с приложением, обслуживающим определенный порт на отдаленной машине, но он не устанавливает связь для этого. Вместо этого, Вы можете использовать его чтобы посылать отдельные пакеты к месту назначения.

Предположим, что Вы установили директорию TeX с центрального NFS сервера, galois, и Вы хотите просмотреть документ, описывающий как использовать LaTeX. Вы запускаете ваш редактор, который сначала читает указанный файл. Однако, требуется слишком много времени чтобы установить TCP связь с galois, послать файл , и повторять это снова. Вместо этого, на запрос посланный к galois, тот посылает файл в паре UDP пакетов, что происходит гораздо быстрее. Однако, UDP не приспособлен для борьбы с потерей пакетов. Этим приходится заниматься NFS.

Дополнительно о портах

Порты могут рассматриваться как точки присоединения сетевых связей. Если приложение (сервер) хочет предложить некий сетевой сервис, оно ассоциирует себя с портом и ждет клиентов (это называется слушать порт). Клиент, который хочет использовать этот сервис получает порт на местном хосте и соединяется с портом сервера на отдаленном хосте.

Важная особенность портов то, что пока существует связь между клиентом и сервером, другая копия сервера может присоединиться к тому же порту и ждать подключения других клиентов. Это разрешает, например, несколько параллельных отдаленных входов на один и тот же хост, причем все используют один самый 513 порт. TCP способен отличать этим связи друг от друга, потому что они все прибывают от различных портов или хостов. Например, если Вы дважды войдете на quark от erdos, тогда первый rlogin клиент будет использовать местный порт 1023, а второй будет использовать порт 1022. Однако, будут соединяться с тем же самым портом 513 на quark.

Этот пример показывает использование портов как пункты, где клиент входит в контакт с определенным портом чтобы получить определенное обслуживание. Клиенту необходимо знать надлежащий номер порта, соглашение о назначении этих номеров должно быть достигнуто между администраторами обеих систем. Для услуг которые широко используются, типа rlogin, эти номера должны устанавливаться централизованно. Этим занимается IETF (или Проектирующая задачи Internet сила), которая регулярно выпускает RFC статьи. Которые, среди прочего, назначают номера портов для общеизвестных услуг. Linux использует файл, в котором регистрируют названия доступного другим сервеса и номера портов, к которым определенный сервес прикреплен, называется он /etc/services. Он описан в секции 10.3.

Стоит заметить, что хотя и TCP и UDP полагаются на порты, эти номера не находятся в противоречии. Это означает что TCP порт 513, например, отличается от UDP порта 513. Фактически, эти порты служат как точки доступа для двух различных услуг, а именно rlogin (TCP) и rwho (UDP).

Библиотека гнезд(socket)

В Unixоидных операционных системах программное обеспечение, выполняющее все задачи и протоколы описанные выше, обычно является частью ядра, аналогично и в Linux. Интерфейс программирования наиболее общий для мира Unix - Библиотека Гнезд Berkeley. Свое название она получила из-за популярной аналогии которая рассматривает порты как гнезда(розетки). Она обеспечивает (bind(2)) запрос, который определяет отдаленный хост, транспортный протокол, и сервис, к которому программа может присоединится или слушать (используя connect(2), listen(2), and accept(2)). Библиотека гнезд однако несколько более общая, она обеспечивает не только класс TCP/IPоснованных гнезд (AF INET гнезда), но также класс, который управляется локальной связью машины (AF UNIX класс). Некоторые версии могут также управляться другими классами типа XNS ( Система Организации Сети Ксерокса ) протокол, или X.25.

В Linux, библиотека гнезд -- часть стандартной libc C библиотеки. В настоящее время, она поддерживает только AF INET и AF UNIX гнезда, но ведется работа над включением поддержки для Novell протоколов, так, чтобы в конечном счете один или больше классов гнезд для него были бы добавлены.