Наши партнеры

UnixForum

Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Диалог бабушки и внучки! Такое видео вызывает смех сквозь слезы…
Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Женатым лучше не смотреть: танец роскошной Татьяны (видео)
Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Танец на выпускном взорвал сеть: смотреть без детей
Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Этот танец невесты оставит вас без слов! Пересмотрела 10 раз!
Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Это спасет потенцию даже в 70 лет! Продается в каждой аптеке...


Библиотека сайта rus-linux.net

Реклама
  • ИП Попов А.П.
  • ИНН: 602715631406
Этот танец невесты оставит вас без слов! Пересмотрела 10 раз!
На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра Linux
Назад Внешние интерфейсы модуля Вперед

Сеть

Сетевая подсистема является гораздо разветвлённее итерфейса устройств Linux. Но, несмотря на обилие возможностей (например, если судить по числу обслуживающих сетевых утилит: ifconfig, ip, netstat, route ... и до нескольких десятков иных) — сетевая подсистема Linux, с позиции разработчика ядра, логичнее и прозрачнее, чем, например, тот же интерфейс устройств. Сетевая подсистема Linux ориентирована в большей степени на обслуживание протоколов Ethernet на канальном уровне и TCP/IP на уровне транспортном, но эта модель расширяется с равным успехом и на другие типы протоколов, таким образом покрывая весь спектр возможностей. Сеть TCP/IP, как известно, весьма условно вписывается в 7-уровневую модель OSI взаимодействия открытых систем (она и разработана раньше модели OSI, и, естественно, они не соответствуют друг другу). В Linux сложилась такая терминология разделения на подуровни, что:

  • всё, что относится к поддержке оборудования и канальному уровню — описывается как сетевые интерфейсы;
  • протоколы сетевого уровня OSI (IP/IPv4/IPv6, IPX, ICMP, RIP, OSPF, ARP, ... ) — как сетевой уровень стека протоколов (или L2);
  • всё, что выше (UDP, TCP, SCTP ...) - как протоколы транспортного уровня (или L3);
  • всё же то, что относится к выше лежащим уровням (сеансовый, представительский, прикладной) модели OSI (например: SSH, SIP, RTP, ...) — никаким образом не проявляется в ядре, и относится уже только к области клиентских и серверных утилит пространства пользователя.

Сетевая реализация построена так, чтобы не зависеть от конкретики протоколов. Основной структурой данных описывающей сетевой интерфейс (устройство) является struct net_device, к ней мы вернёмся позже, описывая устройство.



= = = = = = = = = =

здесь Рис. 4: сетевые уровни и уровни стека протоколов.

= = = = = = = = = =



А вот основной структурой обмениваемых данных (между сетевыми уровнями), на движении которой построена работа всех сетевых уровней — есть буферы сокетов (определения в <linux/skbuff.h>). Буфер сокетов состоит их двух частей: данные управления struct sk_buff, и данные пакета (указываемые в struct sk_buff указателями head и data). Буферы сокетов всегда увязываются в очереди (struct sk_queue_head) посредством своих двух первых полей next и prev. Вот некоторые поля структуры, которые позволяют представить её структуру:

	typedef unsigned char *sk_buff_data_t; 
	struct sk_buff { 
	   struct sk_buff *next; /* These two members must be first. */ 
	   struct sk_buff *prev; 
	...
	   sk_buff_data_t  transport_header; 
	   sk_buff_data_t  network_header;
	   sk_buff_data_t  mac_header; 
	...
	   unsigned char *head, 
	                 *data; 
	...
	}; 

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


Предыдущий раздел: Оглавление Следующий раздел:
Интерфейс /sys   Драйверы: сетевой интерфейс