Giải pháp bảo mật của IP-CRYPTO 1 Quản lý cỏc gúi tin mạng trong nhõn Linu

Một phần của tài liệu đề tài phần mềm bảo mật mạng dùng giao thức ip quyển 4a các phần mềm bảo mật gói ip trên hệ điều hành linux (Trang 105 - 106)

1. Quản lý cỏc gúi tin mạng trong nhõn Linux

Linux quản lý cỏc gúi tin mạng được gửi đi và nhận về theo một phương thức

thống nhất. Đú chớnh là việc cung cấp vựng hàng đợi bộ nhớ để quản lý gúi tin

mạng. Độ dài của vựng bộ nhớ đệm (buffer) được quản lý một cỏch khỏ mềm dẻo,

điều đú tạo điều kiện cho chỳng ta cú thể dễ dàng thay đổi độ dài vựng buffer theo

chủ ý. Một gúi tin mạng được nhõn Linux quản lý bằng một cấu trỳc sk_buff. Cấu trỳc này được khai bỏo trong file skbuff.h như sau:

struct sk_buff {

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 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;

char cb[48];

unsigned int len; /* Length of actual dat */ unsigned int csum; /* Checksum */

volatile char used;

unsigned char is_clone, /* We are a clone */ cloned,

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. */ unsigned short security; /* Security level of packet */ unsigned int truesize; /* Buffer size */

unsigned char *head; /* Head of buffer */ unsigned char *data; /* Data head pointer */ unsigned char *tail; /* Tail pointer */ unsigned char *end; /* End pointer */ void (*destructor)(struct sk_buff *);

#ifdef CONFIG_IP_FIREWALL

__u32 fwmark; /* Label made by fwchains, used by pktsched */

#endif

#if defined(CONFIG_SHAPER) || defined(CONFIG_SHAPER_MODULE) __u32 shapelatency; /* Latency on frame */ __u32 shapeclock; /* Time it should go out */ __u32 shapelen; /* Frame length in clocks */ __u32 shapestamp; /* Stamp for shaper */ __u16 shapepend; /* Pending */

#endif #if defined(CONFIG_HIPPI) union{ __u32 ifield; } private; #endif };

Ta nhận thấy, trong cấu trỳc này cú con trỏ chỉ tới đầu frame (khung tin), và cuối

frame. Ở mỗi tầng tương ứng của mụ hỡnh mạng sẽ cú con trỏ chỉ tới phần header của tầng đú. Vớ dụ, ở tầng datalink thỡ cú cấu trỳc struct ethhdr *ethernet, ở tầng mạng cú cấu trỳc struct iphhdr *iph . . . Mỗi gúi tin đến và đi đều gắn liền với một giao diện mạng tương ứng, giao diện này được chứa trong trường cấu trỳc struct device *dev. Ngoài ra, Linux cũn cú hỗ trợ cỏc hàm lập trỡnh kernel API dựng để cung cấp cỏc phương thức dịch chuyển con trỏ trờn struct sk_buff, và cỏc phương thức cung cấp thờm bộ nhớ cho phần đầu, phần cuối. . .

Một phần của tài liệu đề tài phần mềm bảo mật mạng dùng giao thức ip quyển 4a các phần mềm bảo mật gói ip trên hệ điều hành linux (Trang 105 - 106)