Кроме того, могут применяться и другие домены: AF_ISO
для сетей на основе стандартных протоколов ISO и AF_XNS
для Xerox Network System (сетевая система Xerox). В этой книге мы их не будем обсуждать.
Типы сокетов
У домена сокетов может быть несколько способов обмена данными, у каждого из которых могут быть разные характеристики. В случае сокетов домена AF_UNIX
проблемы не возникают, т.к, они обеспечивают надежный двунаправленный обмен данными. В сетевых доменах необходимо знать характеристики базовой сети и их влияние на различные механизмы передачи данных.
Интернет-протоколы предоставляют два механизма передачи данных с разными уровнями обслуживания: потоки и дейтаграммы.
Потоковые сокеты
Потоковые сокеты (в чем-то подобные стандартным потокам ввода/вывода) обеспечивают соединение, представляющее собой последовательный и надежный двунаправленный поток байтов. Следовательно, гарантируется, что без указания возникшей ошибки данные не будут потеряны, продублированы или переупорядочены. Сообщения большого объема фрагментируются, передаются и снова собираются воедино. Это напоминает файловый поток, который принимает большие объемы данных и делит их на меньшие блоки для записи на физический диск. У потоковых сокетов предсказуемое поведение.
Потоковые сокеты, описываемые типом SOCK_STREAM
, реализованы в домене AF_INET
соединениями на базе протоколов TCP/IP. Кроме того, это обычный тип сокетов и в домене AF_UNIX
. В этой главе мы сосредоточимся на сокетах типа SOCK_STREAM
, поскольку они чаще всего применяются при программировании сетевых приложений.
Примечание
TCP/IP — сокращение для протоколов Transmission Control Protocol/Internet Protocol. Протокол IP — низкоуровневый протокол передачи пакетов, обеспечивающий выбор маршрута при пересылке данных в сети от одного компьютера к другому. Протокол TCP обеспечивает упорядочивание, управление потоком и ретрансляцию, гарантирующие полную и корректную передачу больших объемов данных или же сообщение о соответствующей ошибочной ситуации.
Дейтаграммные сокеты
В отличие от потоковых дейтаграммные сокеты, описываемые типом SOCK_DGRAM
, не устанавливают и не поддерживают соединение. Кроме того, существует ограничение для размера дейтаграммы, которая может отправляться. Она передается как единое сетевое сообщение, которое может быть потеряно, продублировано или прибыть несвоевременно, т.е. перед дейтаграммами, посланными после нее.
Дейтаграммные сокеты реализованы в домене AF_INET
с помощью соединений UDP/IP и предоставляют неупорядоченный ненадежный сервис. (UDP сокращенное название протокола User Datagram Protocol.) Однако они относительно экономичны с точки зрения расходования ресурсов, поскольку не нуждаются в поддержке сетевых соединений. Они быстры, т.к. не тратится время на установку сетевого соединения.
Дейтаграммы полезны для однократных запросов к информационным сервисам, для предоставления обычных сведений о состоянии или для выполнения низкоприоритетной регистрации данных. Их преимущество в том, что остановка сервера не причинит чрезмерных неудобств клиенту и не потребует перезапуска клиента. Поскольку серверы на базе дейтаграмм обычно сохраняют данные без соединения, их можно останавливать и запускать снова, не мешая их клиентам.
На этом мы закончим обсуждение дейтаграмм, дополнительную информацию см. в разд. "Дейтаграммы" в конце данной главы.
Протоколы сокетов
Если низкоуровневый механизм передачи данных позволяет применять несколько протоколов, предоставляющих сокет требуемого типа, можно выбрать конкретный протокол или сокет. В этой главе мы сосредоточимся на сокетах сети UNIX и ее файловой системы, которые не требуют от вас выбора протокола, отличного от заданного по умолчанию.
Системный вызов socket создает сокет и возвращает дескриптор, который может применяться для доступа к сокету:
#include
#include
int socket(int domain, int type, int protocol);
Созданный сокет — это одна конечная точка линии передачи. Параметр domain
задает семейство адресов, параметр type
определяет тип используемого с этим сокетом обмена данными, a protocol
— применяемый протокол.
В табл. 15.1 приведены имена доменов.
Таблица 15.1
Домен |
Описание |
AF_UNIX |
Внутренние для UNIX (сокеты файловой системы) |
AF_INET |
Интернет-протоколы ARPA (Advanced Research Projects Agency, управление перспективных исследований и разработок) (сокеты сети UNIX) |
AF_ISO |
Протоколы стандарта ISO (International Standards Organization, Международная организация по стандартизации) |
AF_NS |
Протоколы сетевых систем Xerox |
AF_IPX |
Novell-протокол IPX |
AF_APPLETALK |
Appletalk DDS (Appletalk Digital Data Service) |
К наиболее популярным доменам сокетов относятся AF_UNIX
, применяемый для локальных сокетов, реализуемых средствами файловых систем UNIX и Linux, и AF_INET
, используемый для сетевых сокетов UNIX. Сокеты домена AF_INET
могут применяться программами, взаимодействующими в сетях на базе протоколов TCP/IP, включая Интернет. Интерфейс ОС Windows Winsock также предоставляет доступ к этому домену сокетов.
Читать дальше