18.06.2019»»вторник

Linux Сетевая Архитектура

    56 - Comments
Linux Сетевая Архитектура
  1. Linux Сетевая Архитектура Pdf
  2. Linux Сетевая Архитектура

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

Прошивка 4100с триколор. Над канальным находится сетевой уровень, который отвечает за направление пакетов по назначению. Следующий уровень под названием транспортный отвечает за одноранговые (peer-to-peer) коммуникации (например, в пределах хоста). Сетевой уровень управляет связью между хостами, а транспортный — взаимодействием между конечными точками внутри этих хостов. Наконец, существует прикладной уровень, который обычно является семантическим и понимает перемещенные данные. К примеру, протокол передачи гипертекста (HTTP — Hypertext Transfer Protocol) перемещает запросы и ответы для содержимого Web между сервером и клиентом.

Архитектура сети определяет основные элементы сети, характеризует ее. Системная сетевая архитектура (System Network Architecture – SNA). NetWare фирмы Novel;; Windows NT фирмы Microsoft;; UNIX фирмы AT&T;; Linux.

В сущности, уровни сетевого стека проходят под более узнаваемыми названиями. На канальном уровне вы найдете Ethernet, наиболее распространенную высокоскоростную среду. К более старым протоколам канального уровня относятся такие последовательные протоколы, как Internet-протокол для последовательной линии (SLIP — Serial Line Internet Protocol), Compressed SLIP (CSLIP) и Point-to-Point Protocol (PPP). Наиболее распространенным протоколом сетевого уровня является Internet Protocol (IP), но существуют и другие, которые удовлетворяют другим нуждам, такие как Протокол управляющих сообщений Internet (ICMP — Internet Control Message Protocol) и Протокол разрешения адресов (ARP — Address Resolution Protocol). На транспортном уровне это Протокол управления передачей (TCP — Transmission Control Protocol) и Протокол пользовательских датаграмм (UDP — User Datagram Protocol).

Linux Сетевая Архитектура
  1. Jul 24, 2007 - Один из возможных взглядов на архитектуру ядра Linux. Исходные коды сетевой подсистемы ядра находятся в каталоге.
  2. Ищу - Клаус Вейрле, Франк Пэльке Linux: сетевая архитектура. Может кто подскажет где скачать книжку по Dart на русском языке?

Наконец, прикладной уровень включает в себя множество привычных нам протоколов, в том числе HTTP, стандартный Web-протокол, и SMTP (Simple Mail Transfer Protocol), протокол передачи электронной почты. Архитектура базовой сети Теперь перейдем к архитектуре сетевого стека Linux и посмотрим, как он реализует модель Internet. На рисунке 2 представлен высокоуровневый вид сетевого стека Linux. Наверху располагается уровень пользовательского пространства или прикладной уровень, который определяет пользователей сетевого стека. Внизу находятся физические устройства, которые обеспечивают возможность соединения с сетями (последовательные или высокоскоростные сети, как Ethernet). В центре, или в пространстве ядра, — сетевая подсистема, которая находится в центре внимания данной статьи.

Linux Сетевая Архитектура Pdf

Через внутреннюю часть сетевого стека проходят буферы сокетов ( skbuffs), которые перемещают данные пакета между источниками и получателями. Кратко будет показана структура skbuff. Высокоуровневая архитектура сетевого стека Linux. Во-первых, вам предлагается краткий обзор основных элементов сетевой подсистемы Linux с подробностями в следующих разделах. Наверху (смотрите рисунок 2) находится система под названием интерфейс системного вызова. Она просто дает способ приложениям из пользовательского пространства получать доступ к сетевой подсистеме ядра. Следующим идет протоколо-независимый (protocol agnostic) уровень, который предоставляет общий способ работы с нижестоящими протоколами транспортного уровня.

Дальше следуют фактические протоколы, к которым в системе Linux относятся встроенные протоколы TCP, UDP и, конечно же, IP. Следующий — еще один независимый уровень, который обеспечивает общий интерфейс к отдельным доступным драйверам устройств и от них, сопровождаемый в конце самими этими драйверами. Интерфейс системного вызова Интерфейс системного вызова может быть описан в двух ракурсах.

Когда сетевой вызов производится пользователем, он мультиплексируется через системный вызов в ядро. Это заканчивается как вызов syssocketcall в./net/socket.c, который потом демультиплексирует вызов намеченной цели. Другой ракурс интерфейса системного вызова — использование нормальных файловых операций для сетевого ввода/вывода (I/O). Например, обычные операции чтения и записи могут быть выполнены на сетевом сокете (который представляется файловым дескриптором как нормальный файл). Поэтому пока существуют операции, специфичные для работы в сети (создание сокета вызовом socket, связывание его с дескриптором вызовом connect и так далее), есть также и некоторое количество стандартных файловых операций, которые применяются к сетевым объектам, как к обычным файлам.

В остальном же игра полностью хм самостоятельна, если можно так о ней сказать. Увы, Activision, вспомнив в один прекрасный день о лицензии на журнал для любителей оружейных новинок, решила склепать на коленке второсортный шутер и издать его под именем некогда великого игрового произведения, не заботясь о сюжете и напрочь забыв о герое прошлых частей — который, между прочим, для многих фанатов был в свое время чуть ли не культовой личностью. Игра солдаты удачи на ua. Payback — это не продолжение культовой игры «Солдаты удачи»; я бы даже сказал, что к «старым и великим» оно не имеет практически никакого отношения, как с сюжетной стороны, так и с точки зрения геймплея. Единственная связь между ними в том, что новый главный герой, получает свои заказы от той же конторы, что и предыдущий.

Наконец, интерфейс системного вызова предоставляет средства для передачи управления между приложением в пользовательском пространстве и ядром. Протоколо-независимый интерфейс (Protocol agnostic interface) Уровень сокетов является протоколо-независимым (protocol agnostic) интерфейсом, который предоставляет набор стандартных функций для поддержки ряда различных протоколов.

Этот уровень не только поддерживает обычные TCP- и UDP-протоколы, но также и IP, raw Ethernet и другие транспортные протоколы, такие как Протокол управления передачей потоков данных (SCTP — Stream Control Transmission Protocol). Взаимодействие через сетевой стек происходит посредством сокета. Структура сокета в Linux — struct sock, определенная в linux/include/net/sock.h. Эта большая структура содержит все необходимые состояния отдельного сокета, включая определенный протокол, используемый сокетом, и операции, которые можно над ним совершать. Сетевая подсистема знает о доступных протоколах из специальной структуры, которая определяет ее возможности. Каждый протокол содержит структуру под названием proto (она находится в linux/include/net/sock.h). Эта структура определяет отдельные операции сокета, которые могут выполняться из уровня сокетов на транспортный уровень (например, как создать сокет, как установить соединение с сокетом, как закрыть сокет и т.д.).

Сетевые протоколы Раздел сетевых протоколов определяет отдельные доступные сетевые протоколы (такие как TCP, UDP и так далее). Они инициализируются в начале дня в функции inetinit в linux/net/ipv4/afinet.c (так как TCP и UDP относятся к семейству протоколов inet). Функция inetinit регистрирует каждый из встроенных протоколов, использующих функцию protoregister.

Эта функция определена в linux/net/core/sock.c, и кроме добавления протокола в список действующих, если требуется, может выделять один или более slab-кэшей. Можно увидеть, как отдельные протоколы идентифицируют сами себя посредством структуры proto в файлах tcpipv4.c, udp.c и raw.c, в linux/net/ipv4/. Каждая из этих структур протоколов отображается в виде типа и протокола в inetswarray, который приписывает встроенные протоколы их операциям. Структура inetswarray и его связи показаны на рисунке 3. Каждый из протоколов в этом массиве инициализируется в начале дня в inetsw вызовом inetregisterprotosw из inetinit. Функция inetinit также инициализирует различные модули inet, такие как ARP, ICMP, IP-модули и TCP и UDP-модули. Структура массива Internet-протокола.

Корреляция сокета и протокола Вспомните, что когда сокет создается, он определяет тип и протокол, например, mysock = socket( AFINET, SOCKSTREAM, 0 ). AFINET указывает семейство Internet-адресов с потоковым сокетом, определенным как SOCKSTREAM (как показано здесь, в inetswarray). Обратите внимание на, что структура proto определяет транспортные методы сокета, в то время как структура protoops— общие. Дополнительные протоколы можно добавить в переключатель протоколов inetsw с помощью вызова inetregisterprotosw.

Linux сетевая архитектура pdf

Например, SCTP добавляет себя вызовом sctpinit в linux/net/sctp/protocol.c. Более подробную информацию об SCTP можно найти в разделе. Перемещение данных для сокетов происходит при помощи основной структуры под названием буфер сокета ( skbuff).

В skbuff содержатся данные пакета и данные о состоянии, которые охватывают несколько уровней стека протокола. Каждый отправленный или полученный пакет представлен в skbuff. Структура skbuff определяется в linux/include/linux/skbuff.h и показана на рисунке 4. Буфер сокета и его связи с другими структурами.

Как можно заметить, несколько структур skbuff для данного соединения могут быть связаны вместе. Каждая из них идентифицирует структуру устройства ( netdevice), которому пакет посылается или от которого получен. Так как каждый пакет представлен в skbuff, заголовки пакетов удобно определены набором указателей ( th, iph и mac для Управления доступом к среде (заголовок Media Access Control или MAC).

Поскольку структуры skbuff являются центральными в организации данных сокета, для управления ими был создан ряд функций поддержки. Существуют функции для создания, разрушения, клонирования и управления очередностью skbuff. Буферы сокетов разработаны таким образом, чтобы связываться друг с другом для данного сокета и включать большой объем информации, в том числе ссылки на заголовки протоколов, временные метки (когда пакет был отправлен или получен) и соответствующее устройство. Устройство-независимый интерфейс (Device agnostic interface) Под уровнем протоколов располагается другой независимый уровень интерфейса, который связывает протоколы с различными драйверами физических устройств с разными возможностями. Этот уровень предоставляет стандартный набор функций, которые используются низко-уровневыми сетевыми устройствами, чтобы иметь возможность взаимодействовать с высоко-уровневым стеком протокола.

Прежде всего, драйверы устройств могут регистрировать и разрегистрировать себя в ядре вызовом registernetdevice или unregisternetdevice. Вызывающая команда сначала заполняет структуру netdevice, а затем передает ее для регистрации. Ядро вызывает свою функцию init (если она определена), выполняет несколько проверок исправности, создает запись sysfs и потом добавляет новое устройство в список устройств (связанный список устройств, активных в ядре). Структуру netdevice можно найти в linux/include/linux/netdevice.h.

Некоторые функции находятся в linux/net/core/dev.c. Для отправления skbuff из уровня протокола устройству используется функция devqueuexmit. Она ставит в очередь skbuff для возможной пересылки соответствующим драйвером устройства (устройством, определенным при помощи netdevice или указателя skbuff-dev в skbuff). Структура dev содержит метод под названием hardstartxmit, который хранит функцию драйвера для инициализации передачи skbuff.

Получение пакета выполняется традиционно при помощи netifrx. Когда драйвер устройства более низкого уровня получает пакет (содержащийся внутри выделенного skbuff), skbuff идет выше, на сетевой уровень, с помощью вызова netifrx. Эта функция затем ставит skbuff в очередь на более высокий уровень протоколов для дальнейшей обработки при помощи netifrxschedule. Функции devqueuexmit и netifrx находятся в linux/net/core/dev.c. Наконец, для взаимодействия с устройство-независимым уровнем ( dev) в ядро был введен новый интерфейс прикладных программ (NAPI). Его используют некоторые драйверы, но подавляющее большинство все еще пользуется более старым интерфейсом получения кадров (по грубой оценке шесть из семи).

NAPI может давать лучшую производительность при больших нагрузках, избегая при этом прерываний при каждом входящем кадре. Драйверы устройств Внизу сетевого стека находятся драйверы устройств, которые управляют физическими сетевыми устройствами. Примерами устройств этого уровня могут служить драйвер SLIP над последовательным интерфейсом или драйвер Ethernet над устройством Ethernet. Во время инициализации драйвер устройства выделяет место для структуры netdevice, а затем инициализирует ее необходимыми подпрограммами. Одна из них, с названием dev-hardstartxmit, определяет, как верхний уровень должен поставить в очередь skbuff для передачи. Ей передается skbuff. Работа этой функции зависит от оборудования, но обычно пакет, описываемый в skbuff, перемещается в так называемое 'аппаратное кольцо' (hardware ring) или 'очередь' (queue).

Поступление кадра, как описано на устройство-независимом уровне, использует интерфейс netifrx или netifreceiveskb для NAPI-совместимого сетевого драйвера. Драйвер NAPI накладывает ограничения на возможности базового оборудования. Подробности смотрите в разделе. После того как драйвер устройства настроил свои интерфейсы в структуре dev, вызов registernetdevice делает ее доступной для использования. В linux/drivers/net можно найти драйверы, характерные для сетевых устройств.

Linux Сетевая Архитектура

Идем дальше Исходный код Linux — прекрасный способ узнать о конструкции драйверов для множества типов устройств, включая драйверы сетевых устройств. Вы обнаружите различия в конструкции и использовании доступных API ядра, но каждый будет полезен либо инструкциями, либо как отправная точка для нового драйвера. Остальной код в сетевом стеке стандартен и используется, пока не потребуется новый протокол. Но даже тогда реализации TCP (для потокового протокола) или UDP (для протокола на основе передачи сообщений) служат полезными моделями для начала новой разработки.

Похожие темы. — оригинал этой статьи на developerWorks (EN).

Краткое введение в TCP/IP, UDP и ICMP посмотрите в статье на www.linuxjunkies.org (EN). (developerWorks, март 2007) охватывает тему интерфейса системного вызова Linux, что является важным слоем ядра Linux с поддержкой пространства пользователя от GNU C Library (glibc), которая активизирует вызовы функций между пользовательским пространством и ядром (EN). Статья (developerWorks, март 2006) обращена к файловой системе /proc, виртуальной файловой системе, которая предоставляет новый способ взаимодействия приложений пользовательского пространства с ядром. Игры на компьютер windows 7. В статье демонстрируется /proc, а также загружаемые модули ядра (EN). Linux, как и BSD, — великая операционная система, если вас интересуют сетевые протоколы.

Статья (developerWorks, февраль 2006) посвящена одному из самых интересных сетевых протоколов, SCTP, который работает, как TCP, но добавляет несколько полезных свойств, таких как обмен сообщениями, многоточечные подключения и многопоточность (EN). Статья (developerWorks, май 2007) посвящена одному из самых интересных аспектов управления памятью в Linux — механизму slab allocator. Он происходит из SunOS, но хорошо ужился внутри ядра Linux (EN). У NAPI-драйвера есть преимущества перед драйверами, использующими более старые средства обработки пакетов, начиная с лучшего управления прерываниями и до дросселирования пакетов. Более подробно об можно прочитать на сайте OSDL. Посмотрите книгу Тима (EN) на предмет более подробной информации о программировании в пользовательском пространстве в Linux (EN). Из книги Тима можно узнать о программировании сокетов с использованием BSD Sockets API (EN).

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