Курсовая работа: Реализация сети в операционной системе Linux
Глеб Пахаренко
Рассмотрим подробнее что происходит с пакетом при попадании в нашу машину. Сначала он обрабатывается драйвером аппаратуры(сетевой карты и т.д) если пакет предназначен нам то он посылается на выше лежащий уровень - сетевой там определяется для кого он предназначен: нам или кому-то другому, для этого просматривается кэш маршрутизации, если там нет маршрута то Forwarding Information Base (FIB), если пакет предназначен другому компьютеру то ядро шлёт его на соответствующее устройство (сетевую карту) ,если нам ,то через транспортный и вышележащие уровни приложению. Обмен данными между приложением и ядром осуществляется через абстракцию сокета. В Линухе используется BSD сокеты.
Рассмотрим поподробнее структуру пакета
Ключ к быстрому обмену данными в использовании структуры sk_buf и передачи на вышестоящие уровни только указателя на неё
описание структуры лежит в linux/skbuff.h
еёполя
struct sk_buff {
/* These two members must be first. */
struct sk_buff * next; /* Next buffer in list */
struct sk_buff * prev; /* Previous buffer in list */
struct sk_buff_head * list; /* List we are on */
struct sock *sk; /* Socket we are owned by */
struct timeval stamp; /* Time we arrived */
struct net_device *dev; /* Device we arrived on/are leaving by */
/* Transport layer header */
union
{
struct tcphdr *th;
struct udphdr *uh;
struct icmphdr *icmph;
struct igmphdr *igmph;
struct iphdr *ipiph;
struct spxhdr *spxh;
unsigned char *raw;
} h;
/* Network layer header */
union
{
struct iphdr *iph;
--> ЧИТАТЬ ПОЛНОСТЬЮ <--