速读原著-TCP/IP(SunOS的网络接口分接头)

2020-03-19 10:35:07 浏览数 (1)

A.2 SunOS的网络接口分接头

SunOS 4.1.x提供了一个S T R E A M S伪设备驱动程序(pseudo-device driver),称为网络接口分接头(Network Interface Ta p )或者N I T([Rago 1993] 包含了流设备驱动程序的其他细节。我们把这种特征叫作“流”)。N I T类似于B S D分组过滤器,但不如后者功能强大和效率高。图A - 2显示了使用N I T所用到的流模块。这个图与图 A - 1之间的一个不同点在于B P F可以截获网络接口收到的和传送的分组,而 N I T只能截获接口收到的分组。将 t c p d u m p与N I T结合起来意味着我们只能看见由网络中其他主机发送来的分组—即根本不可能看见我们自己主机发送的分组(尽管B P F可以工作在SunOS 4.1.x上,但它需要对以太网设备驱动程序的源代码进行改变,大多数的用户没有权限访问源代码,因而这是不可能的)。

当设备/ d e v / n i t被打开时,流驱动程序n i t _ i f就会被打开。既然N I T是使用流来构造的,处理模块可以放在n i t _ i f驱动程序之上。t c p d u m p将模块n i t _ b u f放在S T R E A M之上。这个模块将多个网络帧聚集在一个读缓存中,允许用户进程指明一个超时的值。这种情况类似于我们在B P F中所描述的。R A R P守护进程没有把这个模块放在它的流之上,因为它只处理了一小部分分组。

用户指明的过滤由流模块 n i t _ p f处理。在图 A - 2中,我们注意到这个模块被 R A R P守护进程所用,但没有被t c p d u m p使用。在S u n O S操作系统中,t c p d u m p代之以在用户进程中完成自己的过滤操作。这么做的理由是 n i t _ p f使用的假想机器的指令与 B P F所支持的指令不同(不如B P F所支持的功能强大)。这就意味着当用户对 t c p d u m p指明了一个过滤表达式时,与B P F相比较,使用N I T就会有更多的数据在内核与用户进程之间交换。

0 人点赞