calls tcp_transmit_skb () якщо може
tcp_transmit_skb () - net/ipv4/tcp_output.c (77)
будуємо заголовок tcp і чексумму
calls tcp_build_and_update_options ()
перевіряємо ACKs, SYN
calls tp-> af_specific [ip] -> queue_xmit ()
udp_getfrag () - net/ipv4/udp.c
копіюємо з адресного простору користувача і додаємо checksum
udp_sendmsg () - net/ipv4/udp.c
перевіряємо прапори і тд
заповнюємо заголовок
перевіряємо мультикаст
заповнюємо маршутную інформацію
calls ip_build_xmit ()
оновлюємо статистику udp
returns err
Отримання даних
Отримання даних починається з переривання від мережевої карти. Драйвер девайса виділяє пам'ять і пересилає дані в той простір. Потім передає пакет у сполучний рівень який викликає bottom-halv, яке обробляє подію поза переривання пересилаючи дані на рівень вище-ip.Тот перевіряє помилки фрагменти, маршрутизує пакет або відсилає на рівень вище (tcp | | udp) Цей рівень знову перевіряє помилки визначає сокет якому призначений пакет і покладає його в чергу сокета. Той у свою чергу будить користувальницький процес і копіює дані в його буфер. p> Читання з сокета (1)
Намагаємося щось прочитати (і засипаємо)
Заповнюємо заголовок повідомлення покажчиком на буфер (сокет)
перевіряємо прості помилки
передаємо повідомлення inet сокету
Отримання пакета
Пробудження пристрою (переривання)
перевірка девайса
Отримання заголовка
виділення пам'яті
ложим пакет в те місце судячи з усього використовуючи DMA
ставимо пакет в чергу
виставляємо прапор запуску bottom-halv
BottomHalv
Запуск мережевого ботом-халва
Пересилання пакетів з девайса щоб не було переривань
пересилання пакетів на рівень ip
очищення черзі відсилання
повернення
Рівень IP
Перевірка помилок
Дефрагментація якщо необхідно
Визначення маршруту (форварди чи ні)
Відсилання пакета за призначенням (TCP | | UDP | | forwarding)
Отримання пакету в UDP
Перевірка помилок
перевірка сокета призначення
пересилання пакета в чергу сокета
пробудження чекаючего процесу
Отримання TCP
Перевірка прапорів і помилок а також чи не був отриманий пакет раніше
Визначення сокета
пересилання пакета в чергу сокета
пробудження чекаючего процесу
Читання з сокета (2)
Пробудження процесу
Виклик соответствуюшей функції доставки (udp | | tcp) в буфер користувача
Повернення
IP forwarding
Розглянемо докладніше процес форвардінга пакетів
Спочатку йде перевірка TTL і зменшення його на 1 Перевірка пакету на наявність дійсного маршруту якщо такого немає то відсилається відповідне icmp повідомлення копіювання пакета в н...