前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >速读原著-TCP/IP(BSD 分组过滤器)

速读原著-TCP/IP(BSD 分组过滤器)

作者头像
cwl_java
发布2020-03-18 17:50:45
7290
发布2020-03-18 17:50:45
举报
文章被收录于专栏:cwl_Javacwl_Java

A.1 BSD 分组过滤器

当前由 B S D演变而来的 U n i x内核提供了 BSD 分组过滤器 BPF (BSD Packet Filter) ,t c p d u m p用它来截获和过滤来自一个被置为混杂模式的网络接口卡的分组。 B P F也可以工作在点对点的链路上,如 S L I P(2 . 4节),不需要什么特别的处理就可以截获所有通过接口的分组。B P F还可以工作在环回接口上( 2 . 7节)。

B P F有一个很长的历史。1 9 8 0年卡耐基梅隆大学的Mike Accetta和Rick Rashid创造了E n e t分组过滤程序。斯坦福的J e ffrey Mogul将代码移植到B S D,从1 9 8 3年开始继续开发。从那以后,它演变为D E C的U l t r i x分组过滤器、SunOS 4.1下的一个STREAMS NIT模块和B P F。劳伦斯伯克利实验室的Steven McCanne在1 9 9 0年的夏天实现了B P F。其中很多设计来自于Van Jacobson。[McCanne and Jacobson 1993] 给出了最新版本的细节以及与Sun的NIT的一个比较。

图A - 1显示了用于以太网的B P F的特征。 B P F将以太网设备驱动程序设置为混杂模式,然后从驱动程序那里接收每一个收到的分组和传输的分组。这些分组要通过一个用户指明的过滤器,使得只有那些用户进程感兴趣的分组才会传递给用户进程。

多个进程可以同时监视一个接口,每个进程指明了一个自己的过滤器。图 A - 1显示了t c p d u m p的两个实例进程和一个 R A R P守护进程(5 . 4节)监视同样的以太网接口。 t c p d u m p的每个实例指明了一个自己的过滤器。 t c p d u m p的过滤器可以由用户在命令行指明,而r a r p d总是使用只截获R A R P请求的过滤器。

除了指明一个过滤器,B P F的每个用户还指明了一个超时定时器的值。因为网络的数据传输率可以很容易地超过 C P U的处理能力,而且一个用户进程从内核中只读小块数据的代价昂贵,因此, B P F试图将多个帧装载进一个读缓存,只有缓存满了或者用户指明的超时到期才将读缓存保存的帧返回。 t c p d u m p将超时定时器置为 1秒,因为它一般从 B P F收到很多数据。而R A R P守护进程收到的帧很少,所以 r a r p d将超时置为0(收到一个帧就返回)。

在这里插入图片描述
在这里插入图片描述

用户指明的过滤器告诉B P F用户进程对什么帧感兴趣,过滤器是对一个假想机器的一组指令。这些指令被内核中的 B P F过滤器解释。在内核中过滤,而不在用户进程中,减少了必须从内核传递到用户进程的数据量。R A R P守护进程总是使用绑定在程序里的、同样的过滤程序。

另一方面,t c p d u m p在每次运行时,让用户在命令行指明一个过滤表达式。 t c p d u m p将用户指明的表达式转换为相应的 B P F的指令序列。t c p d u m p表达式的例子如下:

代码语言:javascript
复制
% tcpdump tcp port 25
% tcpdump icmp [0] != 8 and icmp[0] != 0

第一个只打印源端口和目的端口为 2 5的T C P报文段。第二个只打印不是回送请求和回送应答的I C M P报文(也就是非 p i n g的分组)。这个表达式指明了 I C M P报文的第一个字节,图6 - 2中的t y p e字段,不等于8或0,即图6 - 3中的回送请求和回送应答。正像你所看到的,设计过滤器需要有底层分组结构的知识。第二个例子中的表达式被放在一对单引号中,防止 U n i x外壳程序解释特殊字符。

参考t c p d u m p (1) 的手册,了解用户可以指明的表达式的全部细节。 bpf(4) 的手册详细描述了B P F使用的假想机器指令。 [McCanne and Jacobson 1993] 比较了这个假想机器方法与其他方法的设计与性能。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • A.1 BSD 分组过滤器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档