Предисловие
Часть I. Ядро Linux
Глава 1. Мотивация
1.1 ОПЕРАЦИОННАЯ СИСТЕМА LINUX
1.2 ЧТО ТАКОЕ LINUX?
1.3 ПРИЧИНЫ ИСПОЛЬЗОВАНИЯ LINUX
Глава 2. Структура ядра
2.1 МОНОЛИТНЫЕ АРХИТЕКТУРЫ И МИКРОЯДРА
2.2 ПРОЦЕССЫ ЯДРА LINUX
2.2.1 Процессы и системные вызовы
2.2.2 Аппаратные прерывания
2.2.3 Программные прерывания
2.2.4 Тасклеты
2.2.5 Нижние части обработчика прерываний
2.3 БЛОКИРОВКА - АТОМАРНЫЕ ОПЕРАЦИИ
2.3.1 Битовые операции
2.3.2 Спин-блокировки
2.3.3 Спин-блокировки чтения-записи
2.3.4 Семафоры
2.4 МОДУЛИ ЯДРА
2.4.1 Управление модулями ядра
2.4.2 Регистрация и прекращение регистрации возможностей модуля
2.4.3 Передача параметров при загрузке модуля
2.4.4 Таблицы идентификаторов ядра и модулей
2.5 ДРАЙВЕРЫ УСТРОЙСТВ
2.6 УПРАВЛЕНИЕ ПАМЯТЬЮ В ЯДРЕ
2.6.1 Некоторые функции для управления памятью
2.6.2 Кэширование памяти
2.7 СИНХРОНИЗАЦИЯ В ЯДРЕ LINUX
2.7.1 Стандартные таймеры
2.7.2 Использование APIC для высокочастотных таймеров
2.8 ФАЙЛОВАЯ СИСТЕМА PROC
2.9 КОНТРОЛЬ ВЕРСИЙ
Часть II. Архитектура сетевой реализации
ГЛАВА 3. Архитектура систем связи
3.1 МОДЕЛИ СВЯЗИ, ОСНОВАННЫЕ НА УРОВНЯХ
3.1.1 Эталонная модель ISO/OSI
3.1.2 Эталонная модель TCP/IP
3.2 СЛУЖБЫ И ПРОТОКОЛЫ
3.2.1 Взаимодействие уровней, экземпляров и протоколов
Глава 4. Управление сетевыми пакетами в ядре
4.1 БУФЕРЫ СОКЕТОВ
4.1.1 Операции, выполняемые с буферами сокетов
4.1.2 Другие функции
4.2 ОЧЕРЕДИ БУФЕРОВ СОКЕТОВ
4.2.1 Операции с очередями буферов сокетов
Глава 5. Сетевые устройства
5.1 ИНТЕРФЕЙС net_device
5.1.1 Структура net_device
5.2 УПРАВЛЕНИЕ СЕТЕВЫМИ УСТРОЙСТВАМИ
5.2.1 Регистрация и отмена регистрации сетевых устройств
5.2.2 Открытие и закрытие сетевых устройств
5.2.3 Создание и обнаружение сетевых устройств
5.2.4 Цепи уведомлений для изменений состояния
5.2.5 Передача через сетевые устройства
5.3 СЕТЕВЫЕ ДРАЙВЕРЫ
5.3.1 Инициализация сетевых адаптеров
5.3.2 Открытие и закрытие сетевого адаптера
5.3.3 Передача данных
5.3.4 Проблемы при передаче пакетов
5.3.5 Конфигурирование времени выполнения
5.3.6 Специфические для адаптера команды ioctl()
5.3.7 Статистические сведения о сетевом устройстве
5.3.8 Поддержка широковещания на уровне адаптера
Часть III. Уровень I + II - уровни доступа к носителю и логической связи
Глава 6. Введение в канальный уровень
6.1 СТРУКТУРА КАНАЛЬНОГО УРОВНЯ
6.1.1 Стандарт IEEE для локальных сетей (LAN)
6.2 ПРОЦЕССЫ НА КАНАЛЬНОМ УРОВНЕ
6.2.1 Получение пакета
6.2.2 Передача пакета
6.3 УПРАВЛЕНИЕ ПРОТОКОЛАМИ УРОВНЯ 3
6.3.1 Управление логической связью - определение идентификатора протокола уровня 3
Глава 7. Протокол Интернета для последовательного канала (SLIP)
7.1 ВВЕДЕНИЕ
7.1.1 Обнаружение пакетов и символьное заполнение
7.2 РЕАЛИЗАЦИЯ SLIP В ЯДРЕ LINUX
7.2.1 Устройства и дисциплины линий связи TTY
7.2.2 Общая процедура
7.2.3 Функции и структуры данных
7.2.4 Инициализация драйвера и установка соединения
7.2.5 Активация и деактивация сетевого устройства
7.2.6 Разрыв соединения и деинициализация драйвера
7.2.7 Передача IP-пакетов
7.2.8 Получение IP-пакетов
Глава 8. Протокол двухточечного соединения (PPP)
8.1 ВВЕДЕНИЕ
8.1.1 Подпротоколы
8.1.2 Компоненты реализации Linux
8.2 КОНФИГУРИРОВАНИЕ PPP В LINUX
8.2.1 Опции ядра
8.2.2 pppd - демон PPP
8.2.3 Коммутация по требованию
8.2.4 Автоматический обратный вызов
8.3 РЕАЛИЗАЦИЯ PPP В ЯДРЕ LINUX
8.3.1 Функции и структуры данных общего драйвера PPP
8.3.2 Функции и структуры данных асинхронного драйвера PPP
8.3.3 Инициализация
8.3.4 Передача IP-пакетов
8.3.5 Обнаружение границ кадров
8.3.6 Получение IP-пакетов
8.4 РЕАЛИЗАЦИЯ ДЕМОНА PPP
8.4.1 Управление подпротоколами
8.4.2 Состояния
Глава 9. PPP поверх Ethernet
9.1 ВВЕДЕНИЕ
9.2 СПЕЦИФИКАЦИЯ PPPOE В RFC 2516
9.3 РЕАЛИЗАЦИЯ В ПРОСТРАНСТВЕ ПОЛЬЗОВАТЕЛЯ
9.4 РЕАЛИЗАЦИЯ В ЯДРЕ LINUX
9.4.1 Изменения в ядре
9.4.2 Задачи демона ppp
9.4.3 Конфигурирование
Глава 10. Асинхронный режим передачи - ATM
10.1 ВВЕДЕНИЕ
10.2 РЕАЛИЗАЦИЯ ATM В LINUX
10.2.1 Постоянные виртуальные каналы
10.2.2 Коммутируемые виртуальные каналы
10.2.3 Драйверы устройств ATM
10.2.4 Дальнейшая поддержка ATM
10.3 КОНФИГУРИРОВАНИЕ
Глава 11. Bluetooth в Linux
11.1 ИНТЕРФЕЙС КОНТРОЛЛЕРА ХОСТА (HCI)
11.1.1 Командные пакеты
11.1.2 Пакеты событий
11.1.3 Пакеты данных
11.1.4 Доступ к интерфейсу контроллера хоста
11.2 L2CAP
11.2.1 Фаза установления соединения
11.2.2 Фаза конфигурирования
11.2.3 Фаза передачи данных
11.3 ДРУГИЕ ПРОТОКОЛЫ
Глава 12. Прозрачные мосты
12.1 ВВЕДЕНИЕ
12.2 ОСНОВЫ
12.2.1 Свойства прозрачных мостов
12.2.2 Перенаправляющая функция
12.2.3 Функции обучения
12.2.4 Протокол связующего дерева
12.3 КОНФИГУРИРОВАНИЕ МОСТА В LINUX
12.3.1 Конфигурирование ядра и сетевой адаптер
12.3.2 Использование инструмента brctl для конфигурирования мостов Linux
12.3.3 Проверка возможностей моста
12.3.4 Образец конфигурации
12.4 РЕАЛИЗАЦИЯ
12.4.1 Архитектура реализации моста
12.4.2 Построение и связывание важных структур данных
12.4.3 Путь пакета через ядро
12.4.4 Изучение новых MAC-адресов
12.4.5 Реализация протокола связующего дерева
Часть IV. Сетевой уровень
Глава 13. Протоколы TCP/IP
13.1 НАБОР ПРОТОКОЛОВ ИНТЕРНЕТА
Глава 14. Протокол Интернета V4
14.1 СВОЙСТВА ПРОТОКОЛА ИНТЕРНЕТА
14.1.1 Прохождение IP-пакетов через маршрутизаторы
14.1.2 Заголовок IP-пакета
14.1.3 Время жизни пакета данных IP
14.1.4 Адресация в Интернете
14.1.5 IP-адреса и классы IP-адресов
14.2 РЕАЛИЗАЦИЯ ПРОТОКОЛА ИНТЕРНЕТА
14.2.1 Путь входящих IP-пакетов
14.2.2 Пакеты транспортного уровня
14.2.3 Фрагментация пакетов
14.2.4 Данные экземпляра IP
14.2.5 Вспомогательные функции для протокола Интернета
14.3 ОПЦИИ IP
14.3.1 Стандартизированные опции IP-пакета
14.3.2 Конфигурация
14.3.3 Класс ip_options в ядре Linux
14.3.4 Опции IP на уровне IP
14.4 ПРОТОКОЛ УПРАВЛЯЮЩИХ СООБЩЕНИЙ ИНТЕРНЕТА (ICMP)
14.4.1 Функциональный принцип действия ICMP
14.4.2 Конфигурирование ICMP
14.4.3 ICMP в ядре Linux
Глава 15. Протокол разрешения адресов (ARP)
15.1 ИСПОЛЬЗОВАНИЕ ПРОТОКОЛА РАЗРЕШЕНИЯ АДРЕСОВ
15.1.1 Структура блоков данных протокола ARP
15.1.2 Получение ARP-пакета и ответ на него
15.2 КОМАНДА ARP
15.3 РЕАЛИЗАЦИЯ ЭКЗЕМПЛЯРА ARP В ЯДРЕ LINUX
15.3.1 Управление доступными компьютерами в кэше ARP
15.3.2 Работа протокола разрешения адресов (ARP)
Глава 16. Маршрутизация IP
16.1 ВВЕДЕНИЕ
16.1.1 Сети и маршрутизаторы
16.1.2 Пересылка и маршрутизация
16.1.3 IP-адреса
16.1.4 Процедура пересылки
16.1.5 Кэш маршрутизации
16.1.6 Маршрутизация, основанная на правилах
16.2 КОНФИГУРАЦИЯ
16.2.1 Конфигурирование ядра
16.2.2 Файлы в файловой системе proc
16.2.3 Конфигурирование на системном уровне
16.3 РЕАЛИЗАЦИЯ
16.3.1 Правила маршрутизации
16.3.2 Таблицы маршрутизации
16.3.3 Кэш маршрутизации
16.3.4 Процесс пересылки
Глава 17. Групповая рассылка IP для групповой коммуникации
17.1 ГРУППОВАЯ КОММУНИКАЦИЯ
17.1.1 Однонаправленная передача
17.1.2 Широковещание
17.1.3 Групповая рассылка
17.2 ГРУППОВАЯ РАССЫЛКА IP
17.2.1 Адреса для рассылочных групп
17.2.2 Конфигурирование групповой рассылки IP в Linux
17.2.3 Программирование для групповой рассылки
17.3 ПРОТОКОЛ УПРАВЛЕНИЯ ГРУППАМИ ИНТЕРНЕТА (IGMP)
17.3.1 Форматирование и пересылка пакетов IGMP
17.3.2 Различные версии
17.3.3 Работа протокола IGMP
17.3.4 Реализация IGMP
17.4 ПУТЬ ГРУППОВЫХ ДАННЫХ В ЯДРЕ LINUX
17.4.1 Поддержка групповых рассылок на MAC-уровне
17.4.2 Путь групповых данных в протоколе Интернета
17.5 ГРУППОВЫЕ РАССЫЛКИ В СОВРЕМЕННОМ ИНТЕРНЕТЕ
17.5.1 Широковещательная магистраль (MBone)
17.5.2 Доступ к MBone через демон mrouted
17.5.3 Алгоритм маршрутизации DVMRP
17.6 ТРАНСПОРТНЫЕ ПРОТОКОЛЫ ГРУППОВОЙ РАССЫЛКИ
Глава 18. Использование управления трафиком для поддержки качества обслуживания (QoS)
18.1 ВВЕДЕНИЕ
18.2 БАЗОВАЯ СТРУКТУРА УПРАВЛЕНИЯ ТРАФИКОМ В LINUX
18.3 УПРАВЛЕНИЕ ТРАФИКОМ В ИСХОДЯЩЕМ НАПРАВЛЕНИИ
18.4 СТРУКТУРЫ И ИНТЕРФЕЙСЫ ЯДРА
18.4.1 Описатели
18.4.2 Дисциплины очередей
18.4.3 Классы
18.4.4 Фильтры
18.5 ПОЛИТИКА ВХОЖДЕНИЯ
18.6 РЕАЛИЗАЦИЯ ДИСЦИПЛИНЫ ОЧЕРЕДИ
18.6.1 Фильтр маркерного ведра
18.7 КОНФИГУРАЦИЯ
18.7.1 Интерфейс RT netlink
18.7.2 Интерфейс пользователя
Глава 19. Фильтры пакетов и брандмауэры
19.1 ВВЕДЕНИЕ
19.1.1 Принцип действия брандмауэра
19.1.2 Специфичные для протокола особенности: TCP, FTP и другие
19.1.3 Критерии качества для реализаций фильтра пакетов
19.1.4 Ограничения принципа брандмауэра
19.2 АРХИТЕКТУРА IPCHAINS LINUX 2.2
19.2.1 Синтаксис правил ipchains
19.2.2 Недостатки архитектуры ipchains
19.3 АРХИТЕКТУРА СЕТЕВОГО ФИЛЬТРА LINUX 2.4
19.3.1 Ловушки сетевых фильтров в ядре Linux
19.3.2 Регистрация и прекращение регистрации функций фильтров пакетов
19.3.3 Сравнение iptables и ipchains
19.3.4 Инструмент командной строки iptables
19.3.5 Стандартные модули сетевого фильтра
Глава 20. Отслеживание соединений
20.1 ВВЕДЕНИЕ
20.1.1 Использование модуля отслеживания соединений
20.2 РЕАЛИЗАЦИЯ
20.2.1 Базовая структура
20.2.2 Элементы соединения
20.2.3 Транспортные протоколы
20.2.4 Вспомогательные модули
20.2.5 Глобальные переменные
20.2.6 Функции
Глава 21. Трансляция сетевых адресов (NAT)
21.1 ВВЕДЕНИЕ
21.1.1 Важная терминология
21.1.2 Прозрачное назначение адресов
21.1.3 Прозрачная маршрутизация
21.1.4 Правильная обработка пакетов ICMP
21.1.5 Отличия от маскарада в Linux 2.2
21.1.6 Разновидности NAT
21.1.7 Проблемы
21.2 КОНФИГУРИРОВАНИЕ NAT В LINUX
21.3 РЕАЛИЗАЦИЯ МОДУЛЯ NAT
21.3.1 Важные структуры данных
21.3.2 Инициализация и деинициализация модуля NAT
21.3.3 Как IP-пакет проходит через модуль NAT
21.3.4 Инициализация процесса привязки адресов
21.3.5 Фактическая трансляция адресов
21.4 ИНТЕРФЕЙСЫ ДЛЯ РАСШИРЕНИЯ МОДУЛЯ NAT
21.4.1 Транспортные протоколы
21.4.2 Вспомогательные модули
Глава 22. Расширение возможностей сетевой архитектуры Linux - KIDS
22.1 УПРАВЛЕНИЕ ДИНАМИЧЕСКИ РАСШИРЯЕМЫМИ ВОЗМОЖНОСТЯМИ
22.2 СТРУКТУРА СИСТЕМЫ КОНСТРУКЦИИ KIDS
22.2.1 Элементарные компоненты QoS
22.2.2 Ловушки
22.3 ИСПОЛЬЗОВАНИЕ ПРИМЕРА KIDS ДЛЯ РАСШИРЕНИЯ СЕТЕВОЙ АРХИТЕКТУРЫ LINUX
22.3.1 Компоненты и их экземпляры
22.3.2 Регистрация компонентов и управление ими
22.3.3 Управление экземплярами компонента
22.3.4 Реализация ловушек
22.3.5 Как работает компонент
22.3.6 Конфигурирование компонентов KIDS
Глава 23. IPv6 - протокол Интернета версии 6
23.1 ВВЕДЕНИЕ
23.2 ВОЗМОЖНОСТИ IPv6
23.2.1 Адресация
23.2.2 Заголовок пакета IPv6
23.2.3 Расширения заголовков пакетов
23.3 РЕАЛИЗАЦИЯ IPv6
23.3.1 Входящие пакеты
23.3.2 Пересылка пакетов
23.3.3 Пакеты, доставляемые локально
23.3.4 Пакеты транспортного уровня
Часть V. Уровень IV - транспортный уровень
Глава 24. Протокол управления передачей (TCP)
24.1 ОБЗОР
24.1.1 Требования к TCP
24.1.2 Формат пакета TCP
24.2 РЕАЛИЗАЦИЯ ЭКЗЕМПЛЯРА ПРОТОКОЛА TCP
24.2.1 Обработка входящих сегментов TCP
24.2.2 Отправка сегментов TCP
24.2.3 Структуры данных экземпляра TCP
24.3 УПРАВЛЕНИЕ СОЕДИНЕНИЕМ
24.3.1 Конечный автомат TCP
24.3.2 Установление соединения
24.3.3 Разрыв соединения
24.4 МЕХАНИЗМЫ ПРОТОКОЛА ДЛЯ ОБМЕНА ДАННЫМИ
24.4.1 Управление потоком
24.4.2 Обнаружение, избежание и обработка перегрузки
24.4.3 Избежание перегрузки
24.5 УПРАВЛЕНИЕ ТАЙМЕРАМИ В TCP
24.5.1 Структуры данных
24.5.2 Функции
24.5.3 Конфигурирование
Глава 25. Протокол пользовательских дейтаграмм (UDP)
25.1 ВВЕДЕНИЕ
25.1.1 Формат пакета
25.2 СТРУКТУРЫ ДАННЫХ
25.2.1 Передача полезной нагрузки
25.2.2 Дейтаграмма UDP
25.2.3 Интеграция UDP в сетевую архитектуру
25.3 ОТПРАВКА И ПОЛУЧЕНИЕ UDP-ДЕЙТАГРАММ
Глава 26. Концепция сокетов
26.1 ВВЕДЕНИЕ
26.2 СОКЕТЫ BSD
26.3 СПЕЦИФИЧЕСКИЕ ДЛЯ ПРОТОКОЛА СОКЕТЫ
26.3.1 Сокеты PF_INET
26.3.2 Сокеты PF_PACKET
26.3.3 Сокеты PF_NETLINK
Часть VI. Уровень V - прикладной уровень
Глава 27. Сетевое программирование с сокетами
27.1 ВВЕДЕНИЕ
27.1.1 Адреса сокетов
27.1.2 Операции сокетов
27.2 ФУНКЦИИ В API СОКЕТОВ
27.2.1 Функции для управления соединением
27.2.2 Функции для передачи данных
27.2.3 Методы упорядочивания байтов
27.2.4 Функции для работы с адресами Интернета
27.3 ПРИМЕРЫ
Часть VII. Приложения
Приложение A. Браузер исходного кода LXR
A.1 ФУНКЦИОНАЛЬНЫЕ ВОЗМОЖНОСТИ
A.1.1 Перемещение по исходному коду
A.2 ИНСТАЛЛЯЦИЯ
Приложение Б. Отладка в ядре Linux
Б.1 РЕГИСТРАЦИЯ ВЫВОДА ИЗ ЯДРА LINUX
Б.1.1 Использование printk() для создания журнала вывода
Б.1.2 Демон syslogd
Б.1.3 Использование console_print() для прямого вывода
Б.2 СОЗДАНИЕ СТРОК В ЯДРЕ
Б.3 СВЕДЕНИЯ В ДИРЕКТОРИИ /PROC
Б.3.1 Элементы в директории /proc
Б.4 ИСПОЛЬЗОВАНИЕ ОТЛАДЧИКА С ЯДРОМ LINUX
Приложение В. Инструменты и команды для работы в сети
В.1 ИСПОЛЬЗОВАНИЕ ifconfig ДЛЯ УПРАВЛЕНИЯ СЕТЕВЫМИ УСТРОЙСТВАМИ
В.2 ИСПОЛЬЗОВАНИЕ ping ДЛЯ ТЕСТИРОВАНИЯ ДОСТУПНОСТИ
В.3 ИСПОЛЬЗОВАНИЕ netstat ДЛЯ ПРОСМОТРА СОСТОЯНИЯ СЕТИ
В.4 ИСПОЛЬЗОВАНИЕ route ДЛЯ ИНФОРМАЦИИ О МАРШРУТИЗАЦИИ
В.5 ИСПОЛЬЗОВАНИЕ tcpdump ДЛЯ АНАЛИЗА СЕТИ
В.6 ИСПОЛЬЗОВАНИЕ traceroute ДЛЯ ОТСЛЕЖИВАНИЯ ПАКЕТОВ
В.7 ДРУГИЕ ИНСТРУМЕНТЫ
Приложение Г. Пример модуля ядра
Приложение Д. Пример протокола сетевого уровня
Приложение Е. Пример транспортного протокола
Приложение Ж. Пример взаимодействия через сокеты
Ж.1 СЕРВЕР
Ж.2 КЛИЕНТ
Библиография
Предметный указатель