以太网是无连接的,不可靠的服务,采用尽力传输的机制。
以太网CSMA/CD我就不多讲了,我相信大家都了解这个原理。
以太网是不可靠的,这意味着它并不知道对方有没有收到自己发出的数据包,但如果他发出的数据包发生错误,他会进行重传。
以太网的错误主要是发生碰撞,碰撞是指两台机器同时监听到网络是空闲的,同时发送数据,就会发生碰撞,碰撞对于
以太网来说是正常的。
我们来看一下,假设A检测到网络是空闲的,开始发数据包,尽力传输,当数据包还没有到达B时,B也监测到网络是空闲的,开始发数据包,这时就会发生碰撞,B首先发现发生碰撞,开始发送碰撞信号,所谓碰撞信号,就是连续的01010101或者10101010,十六进制就是55或AA。这个碰撞信号会返回到A,如果碰撞信号到达A时,A还没有发完这个数据包,A就知道这个数据包发生了错误,就会重传这个数据包。但如果碰撞信号会返回到A时,数据包已经发完,则A不会重传这个数据包。
我们先看一下,
以太网为什么要设计这样的重传机制。首先,
以太网不想采用连接机制,因为会降低效率,但他又想有一定的重传机制,因为
以太网的重传是微秒级,而传输层的重传,如
TCP的重传达到毫秒级,应用层的重传更达到秒级,我们可以看到越底层的重传,速度越快,所以对于
以太网错误,
以太网必须有重传机制。
要保证
以太网的重传,必须保证A收到碰撞信号的时候,数据包没有传完,要实现这一要求,A和B之间的距离很关键,也就是说信号在A和B之间传输的来回时间必须控制在一定范围之内。IEEE定义了这个标准,一个碰撞域内,最远的两台机器之间的round-trip time 要小于512bit time.(来回时间小于512位时,所谓位时就是传输一个比特需要的时间)。这也是我们常说的一个碰撞域的直径。
512个位时,也就是64字节的传输时间,如果
以太网数据包大于或等于64个字节,就能保证碰撞信号到达A的时候,数据包还没有传完。
这就是为什么
以太网要最小64个字节,同样,在正常的情况下,碰撞信号应该出现在64个字节之内,这是正常的
以太网碰撞,如果碰撞信号出现在64个字节之后,叫 late collision。这是不正常的。
我们以前学习CISCO网络的时候,CISCO交换机有一种转发方式叫fragment-free,叫无碎片转发,他就是检查64个字节之内有没有错误,有的话不转发,这样就排除了正常的
以太网错误包。
(这是范老师的板书,我画不出来,大家将就点吧)
我们再来看一看
以太网的帧结构。
要讲帧结构,就要说一说OSI七层参考模型。七层参考模型大家很熟悉,以前我们看书的时候会觉得不知所云,我刚学的时候就是这感觉,其实我们只要掌握两点就行了。
一个是访问服务点,每一层都对上层提供访问服务点(SAP),或者我们可以说,每一层的头里面都有一个字段来区分上层
协议。
比如说传输层对应上层的访问服务点就是端口号,比如说23端口是telnet,80端口是http。IP层的SAP是什么?(同学们没说话)
其实就是protocol字段,17表示上层是
UDP,6是
TCP,89是
OSPF,88是EGIRP,1是ICMP等等。
以太网对应上层的SAP是什么呢?就是这个type或length。比如 0800表示上层是IP,0806表示上层是ARP。我后面还会将各种
以太网的帧类型。
第二个要了解的就是对等层通讯,对等层通讯比较好理解,发送端某一层的封装,接收端要同一层才能解封装。
我们再来看看帧结构,
以太网发送方式是一个帧一个帧发送的,帧与帧之间需要间隙。这个叫帧间隙IFG—InterFrame Gap
IFG长度是96bit。当然还可能有Idle时间。
以太网的帧是从目的MAC地址到FCS,事实上
以太网帧的前面还有preamble,我们把它叫做先导字段。作用是用来同步的,当接受端收到preamble,就知道
以太网帧就要来了。preamble有8个字节前面7个字节是10101010也就是16进制的AA,最后一个字节是10101011,也就是AB,当接受端接受到连续的两个高点平,就知道接着来的就是D_mac。所以最后一个字节AB我们也叫他SFD(帧开始标示符)。
所以在
以太网传输过程中,即使没有idle,也就是连续传输,也有20个字节的间隔。对于大量64字节数据来说,效率也就显得不高。
所以,有时我们用下载数据来检查我们的网速,这是不完全准确地,我们要了解他的传输特征,才能准确判断电信究竟给了你多少带宽。我有一个移动的学员,他说用户总怀疑我给他的带宽不够,其实我肯定给他两兆了,所以有时运营商也挺不容易(同学们笑)。后来我告诉他怎么样用sniffer来测带宽,不知道他后来成功了吗,我没有得到反馈。后面我会介绍怎样用
Sniffer来做带宽测试,非常精确的喔。我给很多用户作过带宽测试,他们大多都是怀疑电信给的带宽不够。(同学们问:有没有不够的时候?)我测试的案例里还没有。还有就是帮集成商作方案验证,比如,集成商给用户作了多链路捆绑,或路由负载均衡,用户说比原来更慢了,我去证明给用户看,负载均衡确实做起来了,流量分担很正常。(同学们问:那为什么会慢呢),这就涉及到应用的特征和不同厂商采用均衡的机制。我还没试过作进一步
分析。因为这是集成商的朋友叫我去帮忙的,我只要证明给用户看方案没问题,并告诉集成商如何给用户解释就行了,在做下去,就会画蛇添足了,因为可能让用户觉得我的水平比我朋友高,那不是帮倒忙了。(同学们笑)所以帮忙也要适可而止。 (同学们笑)
好了,有点扯远了。前面讲这些主要是帮大家复习以下
以太网知识,大家别担心,时间是足够的,因为这门课里有很一些基础的知识,比如交换原理、vlan原理,那些知识我都会跳过,我第一天的内容不会很难,考虑到大家远道而来,第一天都很累。但后面回越来越难,大家要有心理准备。晚上要早点睡觉(同学们笑)。还有一个,就是大家别指望能记得住我讲得全部内容,今天讲得明天还记得一点,后天就全忘了,(同学们笑),到了课程结束的时候,基本上全忘光了,(同学们大笑),所以做笔记很重要,我建议大家把笔记写在书上,到时才对得起来。我也注意到一些同学在录音,我知道的,不用放在桌子底下(同学们笑),那样效果不好,(同学们大笑),其实这是不允许的,不过没关系,只有一个要求,不要放在互联网上。
(编者:写到这里,有点写不下去了,觉得很内疚,觉得对不起范老师。我参加过很多培训,范老师是我很喜欢的一个老师,他讲课不会非常幽默,但很实用,这是因为他有很多经历,他在讲课过程中,会补充很多课程以外的东西,比如很多网络中的细节知识,很多工作中的思路,我觉得这方面收获很大,我个人觉得是对我知识的全面补充,学完之后觉得不仅学会了
Sniffer,网络
管理的思路更清晰了,现在我指导工程师时,套了很多范老师的话,我觉得范老师很好。怎么办?我在进行思想斗争。。。该不该再写下去。我想在论坛里发起投票,听听大家的意见,我该不该再写下去。)
(编者:范老师的课程内容: 第一天 monitor功能,
Sniffer的部署
第二天 expert,capture filter ,troubleshooting
第三天 decode,display filter ,trigger
第四天 应用的类型,应用的剖析,应用的
分析思路
第五天 应用性能的
分析,应用性能预测)

好,我们继续看第二个monitor功能,Host table,我们叫他主机列表
这是非常好用的一个功能,有什么用呢?
第一看流量最大的TOP10主机,
第二看广播量有多少,当时我发现冲击波、振荡波的时候,就是看
这个host table,发现有大量的全子网广播
第三可以快速过滤单一主机流量。
第四通过过滤功能可以看到单一业务主机的流量分布,当然也可以通过镜像接口去实现
我们一个一个来看。
首先TOP10主机,
我们可以点击各列的标题来排序,方便我们分析,比如收发包情况。大家可以试一下。
第二广播量有多少
我们点击broadcast或multicast的标题,查看广播量,有一点要注意,不要忘记看MAC层的广播和组播,因为MAC的广播不一定有IP头,比如ARP,同样IP的广播在MAC也可能是单播,比如子网广播。
MAC层的广播是目的MAC为48个1,MAC层的组播为目的MAC第一个字节最低位是1。(范老师有板书,我的本子上有,懒得画了)
IP的广播有三种:255.255.255.255叫本地广播,也叫直播,direct broadcast,不跨路由器。
172.16.33.255叫子网广播,广播给172.16.33.0这个子网,可以跨路由器。
172.16.255.255叫全子网广播,广播给172.16.0.0这个主网,可以跨路由器。
大家以前学网络的时候,老师会给一个概念,说路由器是三层设备,隔离广播,对吧,我也是这样给同学介绍的,但我在后面会告诉同学,并不是所有广播都隔离。
事实上只有255.255.255.255这类本地广播,路由器才不转发,对于子网广播和全子网广播,路由器是转发的,这是为什么呢?
我们来看4个255的广播,在MAC的封装中,对应的目的MAC是广播,而子网广播和全子网广播,对应的目的MAC是单播,所以路由器会转发。(范老师在演示)所以我们注意到,路由器隔离的广播是目的MAC为全1的广播,对于目的MAC是单播的上层广播,路由器是不能隔离的。
现在想想冲击波震荡波为什么影响那么大,因为它采用的是全子网广播,可以跨路由感染。所以对于这种流量我们要小心,希望下次再出现蠕虫病毒时,大家能快速发现,做个世界第一(同学们笑),同样我们要关注MAC层的广播。
第三,就是我们可以关注单一主机流量。
第一种办法,抓包。选中主机,点一下抓蝴蝶的工具,这样通过专家系统和解码你就可以分析他在干什么了。这个我们后面再讲
第二种办法,用single station。选中主机,点一下下面这个电脑的图标,你可以看到他在跟谁通信,如果你看到他跟几十台、上百台机器同时通讯,可能是什么?(同学们:BT),对,像BT,电驴等P2P应用会有这个特征。
第四,就是我们如果我们把单一业务服务器的接口镜像过来,我们就可以看到这台机器的流量状况,我们也可以采用过滤的方式。
Sniffer有一种叫Monitor 过滤器。大家选中一台机器,假设这是你要关心的业务主机,再点一下这个定义过滤器的图标,(范老师在演示),你看他自动产生一个叫NEW1的过滤器,就是这台机器跟任何机器通讯这样的一个过滤器。我们点一下确定。
我们在选择monitor菜单上的select filter,选apply monitor filter,再选new1,确定。
大家注意到,现在host table就只有和这台机器通讯的所有主机流量情况。要注意一点是,monitor filter应用的时候,对所有monitor功能生效,所以在分析单一业务的时候,特别好用。当然如果你们买的是InfiniStream的话,就更方便了,想分析那个业务就分析哪个业务。
怎么样?Host table好用吧?
(同学问:为什么广播也是一台主机?不是说广播地址不会作为主机地址吗?)(编者:这个问题好像比较低级)
这是流量分析技术的特点,再流量分析中,它纯粹从包结构中去取得主机信息,也就是目的MAC,源MAC,目的IP,源IP,他都作为主机处理,广播地址不会在原地址中出现,但在目的地址中出现,也是一台主机。这并不影响我们分析。
好。还有什么问题吗?大家用5分钟自己试一下。

好,我们继续看第3个monitor功能,Matrix,我们叫他矩阵,其实就是主机会话情况,很多人用他来发现病毒,其实用他来评估网络状况,和异常流量,是一个很好用的工具。
大家看,一下子就满了,大多数网络中都是这样的,我们可以按一下崭停。
然后来分析
分析什么呢?
看那一台主机的连接数最多,要注意这个连接数不是传输层的连接数,是指谁跟最多的主机连接
按右建选zoom,放大。
找到对外连接最多的机器,选中,按右建,选show select nodes,大家自己试一下。

我们注意到这台机器跟很多机器通讯,这正常吗?(同学们:不正常)
这要看实际情况,如果这时一台业务主机,太正常了,如果这时一台PC机,或许在作P2P。
我们注意到这台机器向公网发出大量的ICMP包,那是在作什么?(同学们:在ping)
对!PING采用ICMP协议,ping可以用来扫描,也可以用来攻击。
扫描就是看那一台机器活着,接着扫描端口,在攻击,所以扫描是攻击主机的前奏。
另外 ,还可以用ping 来冲击路由器,或占用带宽,是一种DOS攻击。
大家看这个过程更像哪一种类型。
(同学们:扫描,DOS攻击)
一般情况下,扫描会是比较连续的地址,我们看这个地址并不连续,我们先排除扫描,当然不是绝对的,也有比较聪明的扫描。
有同学说,这是DOS攻击,那是冲击路由器,还是占用带宽?
(同学们:冲击路由器)
嘿,这次比较统一,我也觉得他在冲击路由器,我们看,他的目标地址基本不在一个网段,这样路由器收到这样的数据包会消耗大量资源在查找路由表上面。所以对路由器有一定冲击。
一般来说,如果他想占用带宽的话,会发大包,我们发现,包的长度不大,并且一秒钟才发10几个包,所以对贷款冲击不大。
或许大家会觉得这没秒10几个包对路由器冲击也不大呀。大家想像一下,如果有很多机器在作这个操作,那影响就会很大。
大家自己在找一找,是否还有其他机器在作同类事情。
(同学们找出7台这样的机器)
好大家找出7台这样的机器,怎么找出来的?有同学用钢材的办法,有同学用过滤,都市好办法。
现在假设在你们的网络中出现这样的情况,我们发现了异常,接下来怎么做?
(同学们:找到这台机器)
然后呢?
我们可以看看这台机器的任务管理器,看看有什么不常见的进程,把他去掉,看是否解决。在看其他的机器,是否有类似的特征。
这是我的一个学员发给我的,当时他发现这7台机器都有一个特殊的进程,但是他的防病毒软件没有查出来。他手工解决了。
这很好说明用Sniffer可以比防病毒软件更快发现病毒,因为防病毒软件是后知后觉得,什么意思?防病毒软件必须有相应的特征才能查病毒。而Sniffer通过流量可以发现一些特征,一些异常。
但是有一点,我们不能拿Sniffer当防病毒软件用,那不是他的特长,同时也太低沽Sniffer的功能了(同学们笑)
好我们在看看扫描是怎么一回事,大家看这个trace file(范老师在演示,我就不写了)
先是ARP扫描,再端口扫描,接下来就是攻击了。
(编者:接着我们做了一个游戏,范老师让大家用Sniffer攻击他的机器,结果1台机器就把他的机器搞死了,这个就不细说了)
好,我们再看第四个monitor功能,ART,Application Response Time,应用响应时间。
应用响应时间是分析应用的一个很好工具,主要用来分析应用的性能。
ART是指一个客户端发出一个请求,到服务器响应回来的时间差。
一般来说,应用响应的快慢,是应用性能的一个重要指标。
应用性能主要决定于几个因素:网络因素、服务器因素、客户端因素、应用协议因素
我们先看看如何操作,再来看看应用这个功能。
我们打开ART,大家看到Http的应用响应时间分析,这里有几个列,server Address,Client Address.
他是怎么知道谁是Server,谁是Client?其实也就是看端口号和IP的对应关系,比如如果一个数据包的目的IP是1.1.1.1,目的端口是80,Sniffer就会认为1.1.1.1就是Http服务器。对应的源IP就是Client。
AvgRsp—平均响应时间
90%Rsp—90%响应时间,去掉头尾个5%,其实我个人觉得去掉最大的10%更合理一些。
还有最大最小的响应时间,这些都是以毫秒为单位。
接着就是TotalRsp,这个是响应次数,单位是次。
接着是0到25毫秒的响应有多少次,25到50毫秒的响应有多少次。。等等。
后面还有server发送子节数,client发送子节数,timeout次数等等,5秒不响应则Timeout。
我们再看看怎么增加其他应用,按属性,选择display protocol,添加你关心的协议,再确定,ART会重新刷新(范老师在演示)
你看我这里就有了telnet,Oracle。
(同学们:我们没有Oracle)
我知道,其实平时我们更关心的是我们关键业务,所以我们要把我们关键业务的端口添加进来,怎么添加?大家跟我来,
选菜单上的toolsàoptionsàprotocol,拉到下面,添加一种应用,比如Oracle,端口1521。
再在属性里把这个新协议选上,有了吗?(跑去解答问题去了)
好,大家都做出来了,我们平常分析关键业务就行了,有一点要说明,一种业务可能有多个应用,也就是多个端口,需要同时分析。
有些同学喜欢把所有well known的协议添加到协议列表里,我在共享目录上有两个注册表注入工具,大家只要运行以下就可以将这些常用端口都注入到协议列表里,就不用一个一个敲了。其实我个人觉得不太必要,多了反而乱。
大家打开注册表,我们看一下协议列表,找到这两项:
HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates, Inc.\Sniffer\4.7\1CommonSettings\Protocols\IP Protocols\TCP
HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates, Inc.\Sniffer\4.7\1CommonSettings\Protocols\IP Protocols\UDP
这就是协议列表。注意不要有重复的,否则会报错。
(编者:这是范老师的板书)
应用响应时间是评估影响应用性能因素的一种很好的工具。我们看这样一个例子。
比如通过client通过广域网连接到服务器。
我们同时在AB两点部署Sniffer,分析某一业务的响应时间。
假设Sniffer在A点,他所看到的响应时间包括网络消耗时间和服务器处理时间
在B点的Sniffer看到的响应时间主要是服务器处理时间。这样我们比较AB两点的响应时间,来判断影响性能的主要因素是网络还是服务器。
假设A点的响应时间是400毫秒,B点的响应时间是100毫秒,我们就知道A点的400毫秒中有300毫秒是消耗在网络上的,我们可以认为对于这个业务,性能的主要瓶颈在网络上,如果我们在深入分析是距离因素还是贷款因素,我们就可以判断是否有改善空间。这个细节我们在第二门课讲。
如果B点的响应时间达到250毫秒,我们可以认为改善服务器的性能对于这个应用来说会更明显一些。
如果我们Sniffer用多了。我们就可以做一个AB点的响应时间的基准线,假设正常情况下A点的响应时间是400毫秒,有一天你发现平均响应时间达到600毫秒,你就应该关注了,或许用户还没有抱怨,如果你这时分析应用性能下降的原因,你就可以避免故障的产生,同时避免用户投诉。当然你也会有B点的基准线,比较跟平时有何不同,很快就知道应该检查网络还是服务器。
对于ART还有什么不清楚地吗?或者大家平常还有其他用法?