Программирование POSIX сокет. Сукиязов С.А. - 4 стр.

UptoLike

Составители: 

Internet — это сеть с коммутацией пакетов. Каждый пакет должен содержать всю необходимую
информацию, которая позволит ему достигнуть пункта назначения. Подобно письму, пакет содержит
адреса отправителя и получателя. Пакет путешествует от компьютера к компьютеру по каналам связи
(соединениям). Если в процессе передачи сообщения происходит разрыв соединения, пакет находит
другой маршрут (происходит
коммутация) либо маршрутизатор посылает отправителю сообщение об
ошибке, информирующее о невозможности обнаружения получателя. Тем самым обеспечивается опре-
деленная надежность соединения. Но в любом случае разрывы сети приводят к потерям данных. Чита-
тели наверняка неоднократно с этим сталкивались.
Правила общения: основы адресации в TCP/IP
В сетях применяется множество различных протоколов. Программисты приспособили некоторые
протоколы для решения специфических задач, таких как передача данных посредством длинных или
ультракоротких волн. Другие протоколы предназначены для повышения надежности сети. Семейство
протоколов TCP/IP (Transmission Control Protocol/Internet Protocol) ориентировано на передачу пакетов и
выявление нефункционирующих соединений. Если в какой-то момент обнаруживается нарушение сег-
ментации сети, система
тут же начинает искать новый маршрут.
Сопровождение пакетов, обнаружение потерь и ретрансляцияэто сложные алгоритмы, по-
скольку в них приходится учитывать множество различных факторов. К счастью, надежность алгорит-
мов доказана опытом. Обычно в процессе проектирования приложений об этих алгоритмах не вспоми-
нают, поскольку их детали скрыты глубоко в недрах протоколов.
TCP/IP — многоуровневый стек: высокоуровневые протоколы более надежны, но менее гибки, на
нижних уровнях повышается гибкость, но за счет надежности. Библиотека Socket API инкапсулирует все
необходимые интерфейсы. Это существенный отход от привычной идеологии UNIX, когда за каждым
уровнем закреплен собственный набор функций.
Стандартная подсистема функций ввода-вывода также является многоуровневой. Но компьютеры,
работающие с TCP/IP, для
взаимодействия друг с другом используют почти исключительно сокеты. Это
может показаться странным, если учесть, сколько различных протоколов существует, и вспомнить,
сколько раз нам говорили о том, что функции ореn() (возвращает дескриптор файла) и fopen() (возвра-
щает ссылку на файл) практически несовместимы. В действительности доступ ко всем семействам про-
токолов (TCP/IP, IPX, Rose) осуществляется с
помощью единственной функции socket(). Она скрывает в
себе все детали реализации.
Любой передаваемый пакет содержит в себе данные, адреса отправителя и получателя. Плюс ка-
ждый из протоколов добавляет к пакету свою сигнатуру, заголовок и прочую служебную информацию.
Эта информация позволяет распространять пакет на том уровне, для которого он предназначен.
Компьютер, подключенный
к Internet, обязательно имеет собственный IP-адрес, являющийся уни-
кальным 32-разрядным числом. Если бы адреса не были уникальными, было бы непонятно, куда достав-
лять пакет.
В TCP/IP концепция адресов расширяется понятием порта. Подобно коду города или страны, но-
мер порта добавляется к адресу компьютера. Портов бывает множество, и они не являются физическими
сущностями
это абстракции, существующие в рамках операционной системы.
Стандартный формат IP-адреса таков: [ 0-255 ].[ 0-255 ].[ 0-255 ].[ 0-255 ], например 123.45.6.78.
Значения 0 и 255 являются специальными. Они используются в сетевых масках и в режиме широкове-
щания, поэтому применяйте их с осторожностью. Номер порта обычно добавляется к адресу через двое-
точие: [0-255].[0-255].[0-255].[0-255]:[0-65535]
Например, 128.34.26.101:9090 (IP-адрес — 128.34.26.101, порт — 9090). Но он может добавляться
и через точку:
[0-255].[0-255].[0-255].[0-255].[0-65535] Например, 64.3.24.24.9999 (IP-адрес — 64.3.24.24, порт
9999). Номер порта чаще отделяется двоеточием, а не точкой.С каждым IP-адресом может быть связано
более 65000 портов, через которые подключаются сокеты.
Прослушивание сервера: простейший алгоритм клиентской про-
граммы
Простейшим соединением является то, в котором клиент подключается к серверу, посылает за-
прос и получает ответ. Некоторые стандартные сервисы даже не требуют наличия запроса, например
сервис текущего времени, доступный через порт с номером 13. К сожалению, во многих системах Linux
этот сервис по умолчанию недоступен, и чтобы иметь возможность обращаться к нему, требуется
моди-
фицировать файл /etc/inetd.conf. Если у вас есть доступ к компьютеру, работающему под управлением
операционной системы BSD, HP-UX или Solaris, попробуйте обратиться к указанному порту.
Есть несколько сервисов, к которым можно свободно получить доступ. Запустите программу Tel-
net и свяжитесь с портом 21 (FTP): telnet 127.0.0.1 21
      Internet — это сеть с коммутацией пакетов. Каждый пакет должен содержать всю необходимую
информацию, которая позволит ему достигнуть пункта назначения. Подобно письму, пакет содержит
адреса отправителя и получателя. Пакет путешествует от компьютера к компьютеру по каналам связи
(соединениям). Если в процессе передачи сообщения происходит разрыв соединения, пакет находит
другой маршрут (происходит коммутация) либо маршрутизатор посылает отправителю сообщение об
ошибке, информирующее о невозможности обнаружения получателя. Тем самым обеспечивается опре-
деленная надежность соединения. Но в любом случае разрывы сети приводят к потерям данных. Чита-
тели наверняка неоднократно с этим сталкивались.

       Правила общения: основы адресации в TCP/IP
      В сетях применяется множество различных протоколов. Программисты приспособили некоторые
протоколы для решения специфических задач, таких как передача данных посредством длинных или
ультракоротких волн. Другие протоколы предназначены для повышения надежности сети. Семейство
протоколов TCP/IP (Transmission Control Protocol/Internet Protocol) ориентировано на передачу пакетов и
выявление нефункционирующих соединений. Если в какой-то момент обнаруживается нарушение сег-
ментации сети, система тут же начинает искать новый маршрут.
      Сопровождение пакетов, обнаружение потерь и ретрансляция — это сложные алгоритмы, по-
скольку в них приходится учитывать множество различных факторов. К счастью, надежность алгорит-
мов доказана опытом. Обычно в процессе проектирования приложений об этих алгоритмах не вспоми-
нают, поскольку их детали скрыты глубоко в недрах протоколов.
      TCP/IP — многоуровневый стек: высокоуровневые протоколы более надежны, но менее гибки, на
нижних уровнях повышается гибкость, но за счет надежности. Библиотека Socket API инкапсулирует все
необходимые интерфейсы. Это существенный отход от привычной идеологии UNIX, когда за каждым
уровнем закреплен собственный набор функций.
       Стандартная подсистема функций ввода-вывода также является многоуровневой. Но компьютеры,
работающие с TCP/IP, для взаимодействия друг с другом используют почти исключительно сокеты. Это
может показаться странным, если учесть, сколько различных протоколов существует, и вспомнить,
сколько раз нам говорили о том, что функции ореn() (возвращает дескриптор файла) и fopen() (возвра-
щает ссылку на файл) практически несовместимы. В действительности доступ ко всем семействам про-
токолов (TCP/IP, IPX, Rose) осуществляется с помощью единственной функции socket(). Она скрывает в
себе все детали реализации.
      Любой передаваемый пакет содержит в себе данные, адреса отправителя и получателя. Плюс ка-
ждый из протоколов добавляет к пакету свою сигнатуру, заголовок и прочую служебную информацию.
Эта информация позволяет распространять пакет на том уровне, для которого он предназначен.
      Компьютер, подключенный к Internet, обязательно имеет собственный IP-адрес, являющийся уни-
кальным 32-разрядным числом. Если бы адреса не были уникальными, было бы непонятно, куда достав-
лять пакет.
      В TCP/IP концепция адресов расширяется понятием порта. Подобно коду города или страны, но-
мер порта добавляется к адресу компьютера. Портов бывает множество, и они не являются физическими
сущностями — это абстракции, существующие в рамках операционной системы.
       Стандартный формат IP-адреса таков: [ 0-255 ].[ 0-255 ].[ 0-255 ].[ 0-255 ], например 123.45.6.78.
Значения 0 и 255 являются специальными. Они используются в сетевых масках и в режиме широкове-
щания, поэтому применяйте их с осторожностью. Номер порта обычно добавляется к адресу через двое-
точие: [0-255].[0-255].[0-255].[0-255]:[0-65535]
       Например, 128.34.26.101:9090 (IP-адрес — 128.34.26.101, порт — 9090). Но он может добавляться
и через точку: [0-255].[0-255].[0-255].[0-255].[0-65535] Например, 64.3.24.24.9999 (IP-адрес — 64.3.24.24, порт —
9999). Номер порта чаще отделяется двоеточием, а не точкой.С каждым IP-адресом может быть связано
более 65000 портов, через которые подключаются сокеты.

       Прослушивание сервера: простейший алгоритм клиентской про-
       граммы
       Простейшим соединением является то, в котором клиент подключается к серверу, посылает за-
прос и получает ответ. Некоторые стандартные сервисы даже не требуют наличия запроса, например
сервис текущего времени, доступный через порт с номером 13. К сожалению, во многих системах Linux
этот сервис по умолчанию недоступен, и чтобы иметь возможность обращаться к нему, требуется моди-
фицировать файл /etc/inetd.conf. Если у вас есть доступ к компьютеру, работающему под управлением
операционной системы BSD, HP-UX или Solaris, попробуйте обратиться к указанному порту.
       Есть несколько сервисов, к которым можно свободно получить доступ. Запустите программу Tel-
net и свяжитесь с портом 21 (FTP): telnet 127.0.0.1 21