28.4. Ввод через символьный сокет

28.4. Ввод через символьный сокет

Первый вопрос, на который следует ответить, говоря о символьных сокетах, следующий: какие из полученных IP-дейтаграмм ядро передает символьному сокету? Применяются следующие правила:

1. Получаемые пакеты UDP и TCP никогда не передаются на символьный сокет. Если процесс хочет считать IP-дейтаграмму, содержащую пакеты UDP или TCP, пакеты должны считываться на канальном уровне, как показано в главе 29.

2. Большинство ICMP-пакетов передаются на символьный сокет, после того как ядро заканчивает обработку ICMP-сообщения. Беркли-реализации посылают все получаемые ICMP-пакеты на символьный сокет, кроме эхо-запроса, запроса отметки времени и запроса маски адреса [128, с. 302–303]. Эти три типа ICMP-сообщений полностью обрабатываются ядром.

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

4. Все IP-дейтаграммы с таким значением поля протокола, которое не понимает ядро, передаются на символьный сокет. Для этих пакетов ядро выполняет только минимальную проверку некоторых полей IP-заголовка, таких как версия IP, контрольная сумма IPv4-заголовка, длина заголовка и IP-адрес получателя [128, с. 213–220].

5. Если дейтаграмма приходит фрагментами, символьному сокету ничего не передается, до тех пор, пока все фрагменты не прибудут и не будут собраны вместе.

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

1. Если при создании символьного сокета определено ненулевое значение protocol (третий аргумент функции socket), то значение поля протокола полученной дейтаграммы должно совпадать с этим ненулевым значением, иначе дейтаграмма не будет доставлена на данный сокет.

2. Если локальный IP-адрес связан с символьным сокетом функцией bind, IP-адрес получателя в полученной дейтаграмме должен совпадать с этим адресом, иначе дейтаграмма не посылается данному сокету.

3. Если для символьного сокета был определен внешний адрес с помощью функции connect, IP-адрес отправителя в полученной дейтаграмме должен совпадать с этим адресом, иначе дейтаграмма не посылается данному сокету.

Следует отметить, что если символьный сокет создан с нулевым значением аргумента protocol и не вызывается ни функция bind, ни функция connect, то сокет получает копии всех дейтаграмм, которые ядро направляет символьным сокетам.

Дейтаграммы IPv4 всегда передаются через символьные сокеты целиком, вместе с заголовками. В версии IPv6 символьному сокету передается все, кроме дополнительных заголовков (см., например, рис. 28.4 и 28.6).

ПРИМЕЧАНИЕ

В заголовке IPv4, передаваемом приложению, для ip_len, ip_off и ip_id установлен порядок байтов узла, а все остальные ноля имеют порядок байтов сети. В системе Linux все поля остаются в сетевом порядке байтов.

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

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Подключение через модем

Из книги Мобильный интернет автора Леонтьев Виталий Петрович

Подключение через модем Медленный модемный доступ сегодня, к счастью, исчез почти повсеместно, и пользоваться им мы будем лишь в самых крайних случаях. Самое забавное, что прежде всего это счастье светит владельцам именно ноутбука – иным способом подключить компьютер к


Символьный тип

Из книги Delphi. Учимся на примерах автора Парижский Сергей Михайлович

Символьный тип Символьный тип обозначается при помощи ключевого слова Char к его значения хранят только один


22.9 Конфигурирование через DHCPv6

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

22.9 Конфигурирование через DHCPv6 Система может получить полный набор конфигурационных параметров от сервера DHCP. Для перехода на DHCP версии 6 нужны некоторые изменения.Новый протокол DHCP должен поддерживать адреса версии 6. Кроме того, старый тайм-аут выделения адреса нужно


Как получить файлы через ICQ?

Из книги Наглядный самоучитель работы на нетбуке автора Сенкевич Г. Е.

Как получить файлы через ICQ? Когда кто-нибудь отправляет вам файл, на экране появляется диалог с сообщением. Чтобы получить файл, щелкните на ссылке Принять (1).Если сейчас открыто окно чата, запрос на прием файла появится прямо в нем. Чтобы получить файл, щелкните на ссылке


8.2. Подключаться через телефон или через модем?

Из книги Первые шаги с Windows 7. Руководство для начинающих автора Колисниченко Денис Н.

8.2. Подключаться через телефон или через модем? Вы можете использовать для подключения к телефону как мобильный телефон, так и EDGE/3G-модем. Какой вариант выбрать? Тут нужно решить, что для вас важнее — экономия или удобство. Ведь сотовый телефон есть у каждого и можно


27.3.1. Что такое сокет?

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

27.3.1. Что такое сокет? Сокет — это двунаправленный канал между двумя компьютерами в сети, который обеспечивает конечную точку соединения. «Двунаправленный» означает, что данный могут передаваться в двух направлениях — от клиента к серверу и наоборот. Понятие сокета —


Глава 10 Атака через WWW

Из книги Атака на Internet автора Медведовский Илья Давыдович

Глава 10 Атака через WWW Мы – работники КОМКОНа-2. Нам разрешается слыть невеждами, мистиками, суеверными дураками. Нам одно не разрешается: недооценить опасность. И если в нашем доме вдруг завоняло серой, мы просто обязаны предположить, что где-то рядом объявился черт с


1.4.1. Символьный режим

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

1.4.1. Символьный режим Общий формат команды chmod для символьного режима таков:chmod [кто] оператор [разрешения] файлЗначения параметра кто: u Владелец g Группаo Другие пользователи a Все (владелец, группа и другие пользователи)Значения параметра оператор: + Добавление


7.4.1. Передача данных через параметры и через глобальные объекты

Из книги C++ для начинающих автора Липпман Стенли

7.4.1. Передача данных через параметры и через глобальные объекты Различные функции программы могут общаться между собой с помощью двух механизмов. (Под словом “общаться” мы подразумеваем обмен данными.) В одном случае используются глобальные объекты, в другом –


Сокет типа «один-к-одному»

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Сокет типа «один-к-одному» Данный тип сокета был разработан специально для облегчения переноса существующих приложений с TCP на SCTP. Его модель практически идентична описанной в главе 4. Существуют, конечно, некоторые отличия, о которых следует помнить (в особенности, при


Сокет типа «один-ко-многим»

Из книги Компьютерные террористы [Новейшие технологии на службе преступного мира] автора Ревяко Татьяна Ивановна

Сокет типа «один-ко-многим» Сокет типа «один-ко-многим» дает разработчику приложения возможность написать сервер, не использующий большого количества дескрипторов сокетов. Один дескриптор для такого сервера будет представлять несколько ассоциаций, подобно сокету UDP,


Пример: функция bind и доменный сокет Unix

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

Пример: функция bind и доменный сокет Unix Программа, показанная в листинге 15.2, создает доменный сокет Unix, с помощью функции bind связывает с ним полное имя и затем вызывает функцию getsockname и выводит это полное имя.Листинг 15.2. Связывание полного имени с доменным сокетом


Криминал через AOL

Из книги Идеальный программист. Как стать профессионалом разработки ПО автора Мартин Роберт С.


5 Разработка через тестирование

Из книги автора

5 Разработка через тестирование Методология разработки через тестирование, или TDD (Test Driven Development), появилась в нашей отрасли уже более 10 лет. Изначально она применялась на волне экстремального программирования (XP, eXtreme Programming), но с тех пор была принята на вооружение Scrum и