Linux 和FreeBSD libnet 发送机制对比
2009-05-13 10:55:31来源:未知 阅读 ()
发现在Freebsd中,实际发送的数据帧不能超过2034,加上14字节正好是2048了
在Linux中,LibNet采取了RAW SOCKET的方式发送数据socket(PF_SOCKET,SOCK_RAW,htons(ETH_P_ALL))
Freebsd中换了机制,使用的是bpf驱动方式。
查看BPF源代码,发现内核实现时
bpf.c:248
if ((unsigned)len > MCLBYTES)
return (EIO);
而MCLBYTE宏缺省定义为2048,在内核配置文件sys/params.h:144行
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than PAGE_SIZE.
*/
#ifndef MSIZE
#define MSIZE 256 /* size of an mbuf */
#endif /* MSIZE */
#ifndef MCLSHIFT
#define MCLSHIFT 11 /* convert bytes to mbuf clusters */
#endif /* MCLSHIFT */
#define MCLBYTES (1 << MCLSHIFT) /* size of an mbuf cluster */
#define MJUMPAGESIZE PAGE_SIZE /* jumbo cluster 4k */
#define MJUM9BYTES (9 * 1024) /* jumbo cluster 9k */
#define MJUM16BYTES (16 * 1024) /* jumbo cluster 16k */
在配置内核时应该可以通过配置
MCLSHIFT 12 来将缓冲区提高到4096
但是我想发送8K的数据包怎么办??
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than PAGE_SIZE.
*/
专门有一个提示要求不能大于PAGE_SIZE,难道我还要改动PAGE_SIZE?改动后对系统会不会造成较大影响??
看了系统源码,在IA64中,PAGE_SIZE默认为8K,在其其他体系中,包括AMD64,都是4096
为何?待研究
看来RAW SOCKET性能是要高。
下来再研究bfp源码吧
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/54895/showart_431948.html
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- postfix下发送不到gmail邮箱的解决办法 2009-05-13
- 一个机器发送许多ARP广播包的产生原因 2009-05-13
- Unix/BSD/Linux的口令机制初探 2009-05-13
- INADDR_ANY的用法小结 2009-05-13
- setsockopt()用法 - (2) 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash