深度探索套接字缓冲区

深度探索套接字缓冲区

ID:35413642

大小:59.72 KB

页数:5页

时间:2019-03-24

深度探索套接字缓冲区_第1页
深度探索套接字缓冲区_第2页
深度探索套接字缓冲区_第3页
深度探索套接字缓冲区_第4页
深度探索套接字缓冲区_第5页
资源描述:

《深度探索套接字缓冲区》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、深度探索套接字缓冲区(1)套接字缓冲区用结构体structsk_buff表示,它用于在网络子系统中的各层之间传递数据,处于一个核心地位,非常Z重耍。它包含了一组成员数据用于承载网络数据,同时,也定义了在这些数据上操作的一组函数。下面是其完整的定义:structsk_buff{structsk_buff*next;structsk_buff*prev;structsock*sk;structskb_timevaltstamp;structnct_dcvicc*dev;structnet_device*input_dev;union)structtcphdr*(h

2、;structudphdr*uh;structicmphdr*icmph;structigmphdr*igmph;structiphdr*ipiph;structipv6hdr*ipv6h;unsignedchar*raw;}h;union{structiphdr*iph;structipv6hdr*ipv6h;structarphdr*arph;unsignedchar*raw;}nh;union{unsignedchar*raw;)mac;structdst_entry*dst;structsec_path*sp;charcb[48];unsignedin

3、tlen,data_len,mac_lcn,esum;—u32priority;_u8local_df:1,cloned:1,ip_summed:2,nohdr:1,nfctinfo:3;_u8pkt_type:3,fclone:2,ipvs_propeily:1;—be16protocol;void(*destructor)(structsk_buff*skb);#ifdcfCONHG.NETFILTER—u32nfmark;structnf_conntrack*nfct;#ifdefined(CONFIG_NF_CONNTRACK)IIdefined(CO

4、NFIG_NF_CONNTRACK_MODULE)structskbuff*nfctreasm;MBSMMB#endif#ifdefCONFIG_BRIDGE_NETFILTERstructnf_bridge_info*nf_bridge;#endif#endif/*CONFIG_NETFILTER*/#ifdcfCONHG_NET_SCHED—ul6tc_index;#ifdefCONFIG_NET_CLS_ACTul6tcverd;MM7#endif#endifunsignedinttruesize;atomic_tusers;unsignedchar*h

5、ead,*data,*tail,*end;};这是一个比较宠人的结构体,为了便于理解,我们分成多块进行分析。为了使用套接字缓冲区,内核创建了两个后备高速缓存(looasidecache),它们分别是skbuff_head_cache和skbuff_fclone_cache,协议栈中所使用到的所有的sk_buff结构都是从这两个后备高速缓存屮分配出来的。两者的区别在于skbuff_head_cache在创建时指定的单位内存区域的大小是sizeof(structsk_buff),可以容纳任意数目的structsk_buff,而skbuff_fclone_cache

6、在仓U建时指定的单位内存区域大小是2*sizeof(structsk_buff)+sizeof(atomic_t),它的最小区域单位是一对strcutsk_buff和一个引用计数,这一对sk.buff是克隆的,即它们指向同一个数据缓冲区,弓I川计数值是0,1或2,表示这一对屮有几个sk_buff已被使用。创建一个套接字缓冲区,最常用的操作是alloc_skb,它在skbuff_head_cache中创建一个structsk_buff,如果要在skbuff_fclone_cache中创建,可以调用—alloc_skb,通过特定参数进行。structsk_buff

7、的成员head指向一个已分配的空间的头部,该空间用于承载网络数据,end指向该空间的尾部,这两个成员指针从空间创建Z后,就不能被修改。data指向分配空间小数据的头部,tail指向数据的尾部,这两个值随着网络数据在各层ZI'可的传递、修改,会被不断改动。所以,这四个指针指向共同的一块内存区域的不同位置,该内存区域由_alloc_skb在创建缓冲区时创建,四个指针间存在如卜•关系:head<=data<=tail

8、alloc_skb屮根据各平台不同进行

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。