Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
91
Добавлен:
03.06.2014
Размер:
741.38 Кб
Скачать

9. Тип соединения

Соединения TCP/IP бывают двух режимов: ориентированные и не ориентированные на соединение. В ориентированных на соединелие протоколах данные перемещаются как единый, последовательный поток байтов без какого-либо деления на блоки. В не ориентированных на соединение протоколах сетевые данные перемещаются в виде отдельных пакетов, называемых дейтаграммами. Как уже отмечалось, сокеты могут работать как с не ориентированными, так и с ориентированными на соединение протоколами. Второй параметр вызова функции socket обозначает тип соединения, который вы желаете использовать. Символьная константа SOCK_DGRAM обозначает дуйтаграммы, a SOCK_STREАМ — поток байтов.

Интерфейс сокетов также определяет третий тип соединения, называемый «простой сокет» (raw socket). Простой сокет позволяет программе использовать напрямую те низкоуровневые протоколы, которые обычно используются сетевыми протоколами более высокого уровня. Позже Вы узнаете, что программа Ping создает простой сокет, чтобы напрямую использовать протокол управляющих сообщений Интернет (IСМР). Обычно IСМР служит для передачи сообщений о различных сетевых ошибках.

Как правило, прикладные программы не используют IСМР. Они предоставляют самой сети решать проблемы, связанные с ошибками. Транспортные протоколы Интернет самостоятельно доставят сообщение об ошибке, адресованное прикладной программе. Однако прикладная программа может напрямую обратиться к уровню IP или IСМР. Для этого ей придется создать простой сокет.

10. Выбор протокола

Семейство TCP/IP состоит из нескольких протоколов, например IP, IСМР, TCP и UDP. Любое семейство состоит из набора протоколов, которыми пользуются сетевые программисты. Третий параметр функции socket позволяет выбрать тот протокол, который будет использоваться вместе с сокетом. Как и в случае остальных параметров, протокол задается символьной константой.

В сетях TCP/IP все константы начинаются с префикса IPPROTO_. Например, протокол TCP обозначается константой IPPROTO_TCP. Символьная константа IPPROTO_UDP обозначает протокол UDP. Следующий оператор демонстрирует, как может выглядеть вызов функции socket:

socket_handle = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP);

Данный вызов сообщает интерфейсу сокетов о том, что программа желает использовать семейство протоколов Интернет (PF_INET), протокол TCP (IPPROTO_TCP) для соединения, ориентированного на поток байтов (SOCK_STREAM).

11. Процесс

В предыдущем разделе вы узнали, что сокет представляет конечную точку сетевого соединения. Также вы узнали, что сокет определяется членом в таблице

дескрипторов, похожим на дескриптор файла в таблице дескрипторов файлов. Вы узнали, что для создания сокета вызывается системная функция socket.

Адреса всегда представляли критический компонент во всех сетевых соединениях. В нескольких предыдущих главах вы прочли об адресах буферов, сетевых адресах Интернет и адресах портов. Для того чтобы систематизировать эту информацию, мы сейчас рассмотрим каждый из этих типов адресов. Адрес буфера указывает на местонахождение массива данных, расположенного в оперативной памяти (RAM) компьютера. В некоторых случаях сетевое программное обеспечение, например интерфейс сокетов, отводит память для хранения буфера данных. В других случаях пользовательские программы отводят буферы для хранения данных сетевых программ. В языках С и C++ для того, чтобы получить доступ к данным, расположенным в сетевом буфере, ему необходимо назначить адрес, присвоив его переменной-указателю на этот буфер.

Адрес Интернет (IP-адрес) определяет компьютер, подключенный к сети TCP/IP. Строго говоря, адрес Интернет присваивается не компьютеру, а его сетевому интерфейсу, то есть сетевой карте, подключенной к Интернет. Сетевой уровень IP использует IP-адрес, чтобы доставить данные от одного компьютера к другому.

Из пятой главы вы узнали, что транспортный уровень TCP/IP использует порты протоколов для того, чтобы доставить данные определенному сетевому приложению внутри сетевого компьютера. С точки зрения сети, порт протокола — не что иное, как адрес приложения или процесса. Порт протокола подобен дескриптору задачи для сетевого программного обеспечения. Когда модуль сетевого программного обеспечения транспортного уровня, например TCP, желает установить соединение с программой или процессом, он использует порт протокола. Порт протокола обозначает процесс сетевого компьютера. Сокет представляет собой адрес в том же смысле, в каком его представляет дескриптор файла или процесса. Он — член системной таблицы дескрипторов. Формат системной таблицы дескрипторов и то, как именно сетевое программное обеспечение отводит память для ее членов, зависит от операционной среды, которой она принадлежит. Для продолжения обсуждения интерфейса сокетов, дескрипторов сокетов и их адресов необходимо четко представлять разницу между всеми описанными форматами.

Должно быть, вы обнаружили, что в обсуждении сокетов еще нигде не появлялся сетевой адрес. Ранее мы явно отметили, что для открытия сокета указывать сетевой адрес не требуется. Следующий системный вызов, например, определяет семейство протоколов, тип сокета и протокол, однако в нем не упоминается никакого сетевого адреса:

socket_handle = socket (protocol_family, socket_type, protocol);

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

Соседние файлы в папке lect_doc