深度探索套接字缓冲区.docxVIP

  • 2
  • 0
  • 约5.91千字
  • 约 5页
  • 2020-04-10 发布于广东
  • 举报
深度探索套接字缓冲区(1) 套接字缓冲区用结构体struct sk_buff表示,它用于在网络子系统中的各层之间传递数据, 处于一个核心地位,非常Z重耍。它包含了一组成员数据用于承载网络数据,同时,也定义 了在这些数据上操作的一组函数。下面是其完整的定义: struct sk_buff { struct sk_buff * next; struct sk_buff *prev; struct sock *sk; struct skb_timeval tstamp; struct nct_dcvicc * dev; struct net_device *input_dev; union) struct tcphdr *(h; struct udphdr *uh; struct icmphdr *icmph; struct igmphdr *igmph; struct iphdr *ipiph; struct ipv6hdr *ipv6h; unsigned char *raw; }h; union { struct iphdr *iph; struct ipv6hdr *ipv6h; struct arphdr *arph; unsigned char *raw; }nh; union { unsigned char *raw; )mac; struct dst_entry *dst; struct sec_path *sp; char cb[48]; unsigned int len, data_len, mac_lcn, esum; —u32 priority; _u8 local_df: 1, cloned: 1, ip_summed:2, nohdr: 1, nfctinfo:3; _u8 pkt_type:3, fclone:2, ipvs_propeily: 1; —be 16 protocol; void (*destructor)(struct sk_buff *skb); #ifdcf CONHG.NETFILTER —u32 nfmark; struct nf_conntrack *nfct; #if defined(CONFIG_NF_CONNTRACK) II defined(CONFIG_NF_CONNTRACK_MODULE) struct sk buff *nfct reasm; MB SMMB #endif #ifdef CONFIG_BRIDGE_NETFILTER struct nf_bridge_info *nf_bridge; #endif #endif /* CONFIG_NETFILTER */ #ifdcf CONHG_NET_SCHED —ul6 tc_index; #ifdef CONFIG_NET_CLS_ACT ul6 tc verd; MM 7 #endif #endif unsigned int truesize; atomic_t users; unsigned char * head, *data, *tail, *end; }; 这是一个比较宠人的结构体,为了便于理解,我们分成多块进行分析。 为了使用套接字缓冲区,内核创建了两个后备高速缓存(looaside cache),它们分别是 skbuff_head_cache和skbuff_fclone_cache,协议栈中所使用到的所有的sk_buff结构都是从这 两个后备高速缓存屮分配出来的。两者的区别在于skbuff_head_cache在创建时指定的单位 内存区域的大小是sizeof(struct sk_buff),可以容纳任意数目的struct sk_buff,而 skbuff_fclone_cache在仓U建时指定的单位内存区域大小是2*sizeof(struct sk_buff)+sizeof(atomic_t),它的最小区域单位是一对strcut sk_buff和一个引用计数,这一对 sk.buff是克隆的,即它们指向同一个数据缓冲区,弓I川计数值是0,1或2,表示这一对屮有 几个sk_buff已被使用。 创建一个套接字缓冲区,最常用的操作是alloc_skb,它在skbuff_head_cache中创建一个 struct sk_buff,如果要在skbuff_fclone_cache中创建,可以调用—alloc_skb,通过特定参数 进行。 struct sk_buff的成员head指向一个已分配的空间的头部,该空间用于承载网络数据,end 指向该空间的尾部,这两个成员指针从空间创建Z后,就不能被修改。data指向分配空间小 数据的头部,tail指向数据的尾部,这两个值随着网络数据在各层ZI可的传递、修

文档评论(0)

1亿VIP精品文档

相关文档