当前位置:  技术问答>linux和unix

请各位大侠给点有关sk_buff结构的意见!!谢谢!!

    来源: 互联网  发布时间:2015-08-27

    本文导语:  谁能告诉我一些介绍sk_buff的书? 或哪位大侠能给我介绍一下sk_buff的用法和特点。 | Socket Buffers 1 概述 Linux将网络协议分成许多层,每一层都使用其它层提供的服务。但这样的网络协议会有一个问题:...


谁能告诉我一些介绍sk_buff的书?
或哪位大侠能给我介绍一下sk_buff的用法和特点。

|
Socket Buffers
1 概述
Linux将网络协议分成许多层,每一层都使用其它层提供的服务。但这样的网络协议会有一个问题:每一个协议都要在传送的时候在数据上增加协议头和尾,而在处理接收数据的时候删除协议头和尾。这使得在协议之间传送数据缓冲区相当困难,因为每一层都需要找出它的特定的协议头和尾在哪里。一个解决方法是在每一层都拷贝缓冲区,但是这样会非常低效。替代的,Linux使用socket 缓冲区或者说sk_buffs在协议层之间,或协议层与网络设备驱动程序之间传输数据。
Sk_buffs例程的首要目标就是要为所有的网络各层提供一个统一高效的缓冲区处理机制。sk_buffs包括指针和长度域,允许每一协议层使用标准的函数或方法操纵应用程序数据。
sk_buff * next
sk_buff * prev
sk_buff_head * list
*head;
*data;
*tail;
*end;
sock *sk
timeval stamp
net_device *dev
union h;
union nh;
union mac;
dst_entry *dst;
cb[48];  
len
csum
used
cloned,
pkt_type,
ip_summed;
priority;
users
protocol;
security;
truesize;
*destructor
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;
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;指明里发送目标地址。存放了路由路径中下一台主机的地址。经常与rtable指针进行类型的强制转换。其中的output函数指针指明了发送函数。

/* 
 * 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];  存放没一协议层都可以自由使用的一段空间,一般用来存放控制指令和控制数据。!!!如:在TCP中cb用于存放tcp_skb_cb类型的控制缓冲――TCP连接序列号、flags等,因此这段空间预留的比较大。(也可以存放一个指针,指向另一个数据区)

unsigned int  len; /* Length of actual data */整个包
unsigned int csum; /* Checksum  */
volatile char  used; /* Data moved to user and not MSG_PEEK */
unsigned char cloned,  /* head may be cloned (check refcnt to be sure). */
   pkt_type, /* Packet class */
   ip_summed; /* Driver fed us an IP checksum */
在TCP和IP Fragment的实现中都需要用到IP数据报的校验和。
__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 *); /* Destruct function */
#ifdef CONFIG_NETFILTER
/* Can be used for communication between hooks. */
        unsigned long nfmark;
/* Cache info */
__u32 nfcache;
/* Associated connection, if any */
struct nf_ct_info *nfct;
#ifdef CONFIG_NETFILTER_DEBUG
        unsigned int nf_debug;
#endif
#endif /*CONFIG_NETFILTER*/

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

#ifdef CONFIG_NET_SCHED
       __u32           tc_index;               /* traffic control index */
#endif
}
 
}; 


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 各位大侠,本人是新手上路,经理马上让做palm,我可是从0学起!有没有那位大侠给我介绍一点经验和好的技术论坛,谢了!
  • hotenM(CMP)大侠等EJB大侠进来!小问题请教!
  • 请教大侠,怎么选开发学习板?
  • 写过BBS的大侠看过来!
  • 请各位大侠推荐两本Solaris的经典书籍?
  • 各位大侠,求助Linux下关机
  • 大侠们,我是新手,请教怎么判断串口是否有连接
  • 想各位大侠求教了,为什么我的jdbc驱动不支持absolute这个方法呢?
  • 数据恢复, 求大侠帮助, 急等!!!!!!!
  • 各位大侠,给点意见
  • JSP+数据库文本存取中的换行问题,请教大侠
  • 各位大侠:lock 命令怎么用?
  • 关于session方面的问题!哪位大侠帮帮忙!?
  • 各位大侠,那有JBuilder书down? 那有PDF格式文件的阅读器?
  • 各位大侠,还有一问题请教,如下:
  • 请“路人甲”大侠进来来看看。。。多谢了。。
  • 请各位大侠介绍几本 UNIX 的书籍
  • solaris,请大侠帮忙!
  • 哪位大侠能提供一些Motif的电子书?
  • 后退+前进=重复提交,各位大侠怎么解决呢?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3