LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 825|回复: 5

是否有以太级并发服务的概念(看unix network programming后的疑问)

[复制链接]
发表于 2005-7-21 10:53:02 | 显示全部楼层 |阅读模式
学习了一段时间stevens的unix网络编程 卷1:套接字联网API(第三版)。在看到书中对“链路层访问”(第29章)的描述时,产生了如下的疑问:对数据链路层是否有并发的概念?如果有如何实现。

如果将以太网中一个机器通过libpcap设置到混杂模式来诊听其他机器的数据,然后此机器对所诊听的其他计算机的数据进行处理。那么应该可以将它类似看作为一个可以诊听其他机器数据的“server”吧。当sever连接的client个数大于一并且clients发送的数据时间没有限制,如果要加快处理数据的效率,那么应该使用并发server.

stevens的书上面只介绍了TCP和UDP的并发server,一般都是创建新线程或者创建新进程处理。如果要实现以太层面的并发,是不是也是通过pcap_open_live()得到descriptor,然后创建新进程,或者线程,再来处理。

但是通过对libpcap库的学习,发现pcap_dispatch()和pcap_next()函数,通过读man发现,它们都应该是从buffer读取,所以应该数据都先存储在了buffer里面。如果数据都要先通过buffer,并发很难实现吧

请大家指教,谢谢。
发表于 2005-7-21 11:49:23 | 显示全部楼层
你说的这个不能称为并发。并发是对cpu讲的,指的是通过操作系统实现cpu在多个指令流之间快速切换,使多个程序看起来似乎在同时运行。你所说的应该是用一台物理主机通过网络设置虚拟成多台虚拟主机,这是没有必要在数据链路层实现的,只要对网络配置一下就可以了。
ps:从问题的描述来看,你对很多基本概念都不清楚。建议好好学习一下网络和操作系统的基础。
回复 支持 反对

使用道具 举报

发表于 2005-7-23 00:09:05 | 显示全部楼层
楼主。。。。我没看明白你问的啥。。。
:confused:
我不大清楚libcap,who能详细解释下他的意思?
回复 支持 反对

使用道具 举报

发表于 2005-7-23 17:39:08 | 显示全部楼层
libpcap是用来在数据链路层抓包的。
回复 支持 反对

使用道具 举报

发表于 2005-7-23 18:10:10 | 显示全部楼层
Libpcap是Linux/BSD/UNIX 平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础,比如Snort,Tcpdump,其功能相当于Windows平台下Winpcap 库文件。
回复 支持 反对

使用道具 举报

发表于 2005-7-24 00:03:29 | 显示全部楼层
Post by hgrant


如果将以太网中一个机器通过libpcap设置到混杂模式来诊听其他机器的数据,然后此机器对所诊听的其他计算机的数据进行处理。那么应该可以将它类似看作为一个可以诊听其他机器数据的“server”吧。当sever连接的client个数大于一并且clients发送的数据时间没有限制,如果要加快处理数据的效率,那么应该使用并发server.



这里不是什么“server”,hoho
使用hub的ethernet,hub会把所有frame转发到每个网卡(NIC),网卡会丢弃不是发给它的包。其实是得到了,只不过是丢弃了而已。而把网卡驱动模块设为promiscuous,那么libpcap会可以从网卡的缓存里复制一份所有的frame,也就是说,这个ethernet里所有的frame你都可以得到了。
如果交换设备用的是以太网交换机而不是hub,那么切分信道的交换机就会把frame进行一定程度的分拣转发,这样的话,就“听”不到本以太网的所有frame,而只能听到广播帧和目的为本机的帧。你如果用以libpcap为基础的软件(ethereal等)来抓些数据包就可以看出来的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表