Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые проекты » Реалізація мережі в операційній системі Linux

Реферат Реалізація мережі в операційній системі Linux





Реалізація мережі в операційній системі Linux

Гліб Пахаренко

Розглянемо докладніше що відбувається з пакетом при попаданні в нашу машину. Спочатку він обробляється драйвером апаратури (мережевої карти і т.д) якщо пакет призначено нам то він надсилається на вище лежить рівень - мережевий там визначається для кого він призначений: нам або комусь іншому, для цього проглядається кеш маршрутизації, якщо там немає маршруту то Forwarding Information Base (FIB), якщо пакет призначений іншого комп'ютера те ядро ​​шле його на відповідний пристрій (мережеву карту), якщо нам, то через транспортний і вищерозміщені рівні додатком. Обмін даними між додатком і ядром здійснюється через абстракцію сокета. У Линух використовується BSD сокети. p> Розглянемо поподробнее структуру пакету

Ключ до швидкого обміну даними у використанні структури sk_buf і передачі на вищестоящі рівні тільки покажчика на неї

опис структури лежить в linux/skbuff.h

її поля

struct sk_buff {

/* These two members must be first. */p> 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;

struct ipv6hdr * ipv6h;

struct arphdr * arph;

struct ipxhdr * ipxh;

unsigned char * raw;

} nh;

/* Link layer header */

union

{

struct ethhdr * ethernet;

unsigned char * raw;

} mac;

struct dst_entry * dst;

/*

* This is the control buffer. It is free to use for every

* layer. Please put your private variables there. If you

* want to keep them across layers you have to do a skb_clone ()

* first. This is owned by whoever has the skb queued ATM.

*/

char cb [48];

unsigned int len;/* Length of actual data */

unsigned int data_len;

unsigned int csum;/* Checksum */

unsigned char __ unused,/* Dead field, may be reused */

cloned,/* head may be cloned (check refcnt to be sure). */p> pkt_type,/* Packet class */

ip_summed;/* Driver fed us an IP checksum */

__u32 priority;/* Packet queueing priority */

atomic_t users;/* User count - see datagram.c, tcp.c */

unsigned short protocol;/* Packet protocol from driver. */p> unsigned short security;/* Security level ...


сторінка 1 з 13 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Як враховувати рух грошей, якщо компанія розраховується через електронний г ...
  • Реферат на тему: This is a list of problems facing society today
  • Реферат на тему: Double electric layer. Mechanism of formation and theory of structure
  • Реферат на тему: Налаштування віртуальної мережі Linux
  • Реферат на тему: Якщо ремонт виявився модернізацією