雏鹰部落

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4372|回复: 5

[讨论/求助] 到底是不是交换机打环?-一次典型的案例

[复制链接]
发表于 2008-12-31 13:31:33 | 显示全部楼层 |阅读模式
最近碰到一个典型案例,发表出来和大家一起分享,有什么说的不对的地方,希望大家多包涵,宗旨是共同进步,主要和大家分享解决问题的思路。。。    该问题是通过和客户电话沟通解决得!
    一天,一个客户打电话说他们部门的内网阶段性掉线,而且频率很高,访问外网非常慢,ping网关,时通时不通,延时较大,部门所有机器都是类似情况!初步判断,有可能是内网异常流量占用,或者广播风暴之类的故障!
    简单描述一下网络拓扑,比较简单,只是一个部门网络,路由器——二层交换机——用户。抓包位置,路由器和交换机间串联HUB,科来接HUB!网关地址:192.168.10.1抓包时间28s,总流量16.312M,速率也是比较大的(如图
    概要统计:


    端点视图:


    广播和组播流量比较大,几乎占了总流量的 98% 。
    先前的判断的方向是对的!而且还有两个无效地址 0.0.0.0 , 169.254.134.187 ,没有获取到地址,忘了说了,地址都是自动获得的!
    看了协议视图,豁然开朗


    是dhcp和 netbios在作怪!
    结合dhcp和netbios的联动性(见注释1),初步确定是dhcp在作怪了,正是由于dhcp的缘故,所以出现了169.254.x.x和0.0.0.0这样的地址。

DHCP的工作原理(见注释2),现在我们只说第一次登录的时候
    根据客户端是否第一次登录网络,DHCP的工作形式会有所不同。我们只说第一次登录的时候,当DHCP客户端第一次登录网络的时候,也就是客户发现本机上没有任何 IP数据设定,它会向网络发出一个 DHCPdiscover封包。因为客户端还不知道自己属于哪一个网络,所以封包的来源地址会为 0.0.0.0,而目的地址则为255.255.255.255,然后再附上DHCPdiscover的信息,向网络进行广播。在Windows的预设情形下,DHCPdiscover的等待时间预设为 1秒,也就是当客户端将第一个 DHCPdiscover封包送出去之后,在 1秒之内没有得到响应的话,就会进行第二次DHCPdiscover广播。若一直得不到响应的情况下,客户端一共会有四次DHCPdiscover广播(包括第一次在内),除了第一次会等待 1秒之外,其余三次的等待时间分别是9、13、16秒。如果都没有得到DHCP服务器的响应,客户端则会显示错误信息,宣告 DHCPdiscover的失败。
    Windows操作系统预设,客户端如果学不到地址,系统自动会把一个169.254.x.x分配给它。之后,基于使用者的选择,系统会继续在 5 分钟之后再重复一次 DHCPdiscover 的过程。
    这是数据包 0.0.0.0 的解码图,是 mac 地址为 00:0f:b0:72:ba:8c 发送的广播包,在进行 dhcpdiscover


    这是数据包169.254.134.187的解码图,是mac地址为00:0f:b0:72:ba:8c发送的组播包


    说明是同一个客户端00:0f:b0:72:ba:8c发出的数据包,可是为什么没有学到地址呢?又为什么会产生如此大的流量呢?
    带着这个疑问我们继续分析:首先定位DHCP包,深入分析。。。
    这是 00:0f:b0:72:ba:8c 发出的数据包


    是dhcpdiscover包,向服务器请求地址,大家看,标签53是“dhcp报文类型”的标签,消息类型为1说明dhcpdiscover包,在向服务器请求地址。
    在看192.168.10.1发的包


    大家再看标签类型为53的“消息类型”,为2,说明是dhcpserver发的dhcpoffer包,说明服务器给00:0f:b0:72:ba:8c分配192.168.10.9的地址了,那为什么会有如此多的数据包呢?我们接着分析!既然服务器为00:0f:b0:72:ba:8c提供了地址,说明它收到了00:0f:b0:72:ba:8c的discover包,那就说明服务器没有问题以及他们之间的网络通信是好的,难道问题出在00:0f:b0:72:ba:8c上?
不管三七二十一,让客户先把00:0f:b0:72:ba:8c关了,看看现象。。。。。。。。。。。。。。
    问题依然存在!看来问题不在它身上!
    既然服务器和客户机以及他们之间的链路是畅通的,那问题一定出在中间设备上。。。
    难道是网络中存在环路?那可晕死了,先分析一下数据包再说!
    定位到dhcp协议,看dhcp事物id和ip的标识id
    dhcp 事物 id 如下:


    竟然是同以个事物的ID,就是说是同一个事件的数据包,看来真的有可能存在环路
    为了证明以上观点,再看ipidentifyid:


    接着再看TTL,看是否存在路由环路


    TTL值没有变,说明不是路由环路,那就是交换机的问题了。。。
    让客户检查交换机中。。。。
    结论,没有发现环路,无语。。。
    思索中。。。
    难道是交换机出了故障,让换之测试。。。
    郁闷,问题还存在!
    就在我边郁闷边思索时,客户在一个犄角旮旯里发现了一个布满灰尘的sohu交换机串在pc和交换机之间!
    我大喜过望,罪魁祸首出来了。。。令其去之!网络正常了。
    可是客户仔细查看了该sohu交换机,并没有打环的迹象!
    继续思索着。。。
    突然想起某天某月某日某点某分在internet上看到某位高人写到:有时一些soho交换机会无缘无辜对收到的数据包进行无限转发。。。又一次无语了。。。
    问题解决了,思路似乎也比较清晰了,希望可以提醒以后遇到这种情况的同志不要忽视类似的小东东。。。
    注释 1 : dhcp 和 netbios 的联动性


    注释2:dhcp报文类型(选项53)取值的含义:
    类型为1:dhcpdiscover 此为client开始DHCP过程中的第一个请求报文
    类型为2:dhcpoffer 此为server对dhcpdiscover报文的响应
    类型为3:dhcprequest 此为client对dihcpoffer报文的响应
    类型为4:dhcpdecline 此为当client发现server分配给它的IP地址无法使用,如IP地址发生冲突时,
    将发出此报文让 server 禁止使用这次分配的 IP 地址。
    类型为5:dhcpack 此为server对 dhcprequst报文的响应,client收到此报文后才真正获得了IP地
    址和相关配置信息。
    类型为6:dhcpnak 此为server对client的dhcprequst报文的拒绝响应,client收到此报文后,一般
    会重新开始DHCP过程。
    类型为 7 : dhcprelease 此报文是 client 主动释放 IP 地址,当 server 收到此报文后就可以收回 IP 地址
    分配给其他的client.
    类型为 8 : dhcpinform 此为如果客户通过别的手段获得了网络地址,它可以使用 DHCPINFORM 请求获
    得其它配置参数,服务器接收到 DHCPINFORM 包,并建立一个 DHCPACK 消息,在其中包括一些合适客
    户的配置参数,只是不包括分配网络地址,检查现有的绑定,在信息中不填充'yiaddr'字段或租用时间参数。
    服务器取得 DHCPINFORM 包内的 'ciaddr' 地址,而返回 DHCPACK 包。
    详情请参照DHCP协议之 RFC文件

ps:讲的不错,结合案例,与大家分享

点评

超人钢铁之躯 http://www.6699.tv/kh/63121/ 金刚狼2 http://www.6699.tv/kh/49380/  发表于 2013-3-1 11:59
 楼主| 发表于 2008-12-31 13:50:33 | 显示全部楼层
NetBios协议详解及网上邻居工作原理
Netbois(网络基本输入/输出系统)最初由IBM,Sytek作为API开发,使用户软件能使用局域网的资源。自从诞生,Netbois成为许多其他网络应用程序的基础。严格意义上,Netbios是接入网络服务的接口标准。
  Netbios原来是作为THE网络控制器为IBM局域网设计的,是通过特定硬件用来和网络操作系统连接的软件层。Netbios经扩展,允许程序使用Netbios接口来操作IBM令牌环结构。Netbios已被公认为工业标准,通常参照Netbios-compatible LANs.
  它提供给网络程序一套方法,相互通讯及传输数据。基本上,Netbios允许程序和网络会话。它的目的是把程序和任何类型的硬件属性分开。它也使软件开发员可以免除以下负担:开发网络错误修复,低层信息寻址和路由。使用Netbios接口,可以为软件开发员做许多工作。

  Netbios使程序和局域网操作能力之间的接口标准化。有它们,可以将程序细化到为osi模型的哪一层所写,使程序能移植到其他网络上。在Netbios局域网环境下,计算机通过名字被系统知道。网络中每台计算机都有通过不同方法编的永久性名称。这些名称将在下面做进一步讨论。

  通过使用Netbios的数据报或广播方式,在Netbios局域网上的pc机建立会话彼此联络。会话允许更多的信息被传送,探测错误,和纠正。通信是在一对一的基础上的。数据报或广播方式允许一台计算机和多台其他的计算机同时通信,但信息大小受限。使用数据报或广播方式没有探测错误和纠正。然而,数据报通信可以不必建立一个会话。

  在这种环境下所有的通信以一种称为“网络控制块“的格式提交给NetBIOS。内存中这些块的分配依赖于用户程序。这些“网络控制块“分配到域中,分别为输入/输出保留。

在当今的环境中,NetBIOS是使用很普遍的协议。以太网,令牌环,IBM PC网都支持NetBIOS。在它原始版本中,它仅作为程序和网络适配器的接口。从那以后,传输类功能加入NetBIOS,使它功能日益增多。

  在NetBIOS里,面向连接(tcp)和无连接(udp)通信均支持。它支持广播和复播,支持三个分开的服务:命名,会话,数据报。


[1.0.2] NetBIOS 名称

  NetBIOS名称用来在网络上鉴别资源。程序用这些名称开始和结束会话。你能用多个程序配置一台单独的机器,每个程序都有独特的NetBIOS名称。每台支持应用的pc机也有用户定义或通过内部方法获得的NetBIOS站名。

  NetBIOS能包含至多16个阿尔法数字字母。在整个资源路由网络里,字母的组合必须独特。在一台使用NetBIOS的pc机在网络上能完全工作起来之前,pc必须先登记NetBIOS名称。

以下看仔细啦,一台机器开机啦~~他在干嘛??


  当客户端A活跃时,客户端A广播它的名称。当它成功广播自己,并没有其他人和它重名,客户端就登记成功。登记过程如下:

1.在登陆上,客户端A在所有地方广播它自己和它的NetBIOS信息6到10次(靠,这种办法Who想出来个,馊的。。。。),确保其他网络成员收到信息。(如果有机器没有收到,那该机的网上邻居里这个客户端A就隐身了)

2.如果有另一客户端B已用此名,另一客户端B发布它自己的广播,包括它正在使用的名字。请求登陆的客户端A停止所有登记的企图。

3.如无其他客户端反对登记,请求登陆的客户端A完成登记过程。如果有可用的名称服务器,那么名称服务器会在它的数据库里记上一笔,某机的名称是A,IP地址是XXX.XXX.XXX.XXX

4、当A机正常关机时,重新广播释放刚才注册的这个名字,同一网段上的计算机收到后把这个名字在网上邻居里就麻油了。(靠,晕倒死正常关机。。。。。不正常呢?别急呀)如果网上有Wins服务器的话,客户机非正常关机一定时间以后,Wins也会注销这个名字。如果麻油wins服务的话,您就对着网上邻居里的图标撞大运吧~~,当心噢,这时候查询名字肯定是广播~~,如果你网上有个几十台机器,广播个N篇,再等回答 


  问题真的解决了吗?要知道广播包是很容易出问题的,尤其在机器数量较多的网络里,这就是网上邻居常常找不到人的原因之一,并且广播不能穿过路由,所以不同子网的机器在网上邻居里是看不见地。(如果有wins服务器存在而且节点类型不是B,那还....稍好一点,不广播了。具体方式可参阅wins结点类型的相关资料)

  其实即使有些机器没有收到注册请求,也就是网上邻居里看不看见没什么大关系,只要A不恰好和B同名,如果有WINS服务那就更好了,你和他同名也没关系,WINS会更新纪录或拒绝A登记这个名字。当你试图和A机进行基于NetBios的通讯,比如传只文件什么的,那首先会查询NetBios名字,如果找到就开始通讯。

  在NetBIOS环境中有两类名称:独特的和集合的。独特的名称必须在网络中独特。集合的名称不必在网络中独特,所有同名过程属于同一集合。每个NetBIOS节点包含一张该节点当前使用名称的表。

NetBIOS命名允许16个字母用在NetBIOS名称中。而微软只允许15个字母用在NetBIOS名称中,第十六个为NetBIOS后缀。NetBIOS后缀用在Microsoft networking 软件中,区别安装的功能,登记的设备和服务。

[注意:smb 和nbt(在tcp/ip上的NetBIOS)紧密的工作在一起,且都使用137,138,139端口。137端口是NetBIOS名称UDP,138端口是NetBIOS数据报UDP,139端口是NetBIOS会话tcp]嘿嘿,知道点安全常识的这个端口号不会没听说过吧,要网上邻居还是要安全自已考虑清楚噢~~

以下是Microsoft WindowsNT目前使用的NetBIOS后缀表。后缀是16进制。

名称 数字 类型 用途
=========================================================================
=
00 U Workstation Service
01 U Messenger Service
<\\_MSBROWSE_> 01 G Master Browser
03 U Messenger Service
06 U RAS Server Service
1F U NetDDE Service
20 U File Server Service
21 U RAS Client Service
22 U Exchange Interchange
23 U Exchange Store
24 U Exchange Directory
30 U Modem Sharing Server Service
31 U Modem Sharing Client Service
43 U SMS Client Remote Control
44 U SMS Admin Remote Control Tool
45 U SMS Client Remote Chat
46 U SMS Client Remote Transfer
4C U DEC Pathworks TCPIP Service
52 U DEC Pathworks TCPIP Service
87 U Exchange MTA
6A U Exchange IMC
BE U Network Monitor Agent
BF U Network Monitor Apps
03 U Messenger Service
00 G Domain Name
1B U Domain Master Browser
1C G Domain Controllers
1D U Master Browser
1E G Browser Service Elections
1C G Internet Information Server
00 U Internet Information Server
[2B] U Lotus Notes Server
IRISMULTICAST [2F] G Lotus Notes
IRISNAMESERVER [33] G Lotus Notes
Forte_$ND800ZA [20] U DCA Irmalan Gateway Service

独特的(u):该名仅有一个IP地址分给它。在网络设备中,一个名称的多次出现看来会被登记,但后缀是唯一的,使整个名称唯一。

集合的(g):普通集合,一个名称可有多个IP地址。

多址的(M):名称是唯一的,但由于在同一计算机上有多个网络接口,这种配置应该被允许登记。地址的最大数目是25。

Internet集合(I):这是组名的特殊配置,用在操作WINDOSNT的域名。

域名(D):在NT4.0中新引进的。

为了快速浏览一台服务器上登记的NETBIOS名称和服务,用以下命令:
nbstat -a [ipaddress]
nbstat -a [host]

[1.0.3] NetBIOS 会话

  NetBIOS 会话服务提供给用户程序一种面向连接,可靠的,完全双重的信息服务。NetBIOS要求一个是客户端程序,一个是服务器端程序。NetBIOS会话的建立需要双方预定的合作。一个程序必须先发出listen命令,其他程序才可以发出call命令。listen命令参考在它的NetBIOS名称表中的名称(或windows服务器中的),也参考用于作为会话另一端的远端程序的名称。如果聆听者不在聆听,call命令将不会成功。如果call成功,各程序将接到会话id,以作为会话建立的确认。

send和receive命令操作传输数据。在会话最后,各程序将执行挂起命令。没有为会话服务的实际流控制,因为假定局域网足够快,能够传输需要的数据。


[1.0.4] NetBIOS 数据报

  数据报可以发送到特定的地点,或组中所有成员,或广播到整个局域网。与其它数据服务相比,NetBIOS数据报是无连接,非可靠的。Send_Datagram 命令需要调用者设定目的名。如果目的名是组名,组中每个成员都收到数据。Receive_Datagram 命令的调用者必须确定它接收数据的本地名。除了实际数据外,Receive_Datagram也返回发送者的名称。如果NetBIOS收到数据,但却没有Receive_Datagram 命令在等待,数据将被丢弃。

  Send_Broadcast_Datagram 命令发送信息给本地网上每个NetBIOS系统。当BetBIOS节点收到广播数据,发布Receive_Broadcast_Datagram 命令的每个进程都收到数据。如果当广播数据被收到时,没有这些命令在运行,数据将被丢弃。

  NetBIOS使应用程序能和另一个设备建立会话,使网络转发器和处理协议处理收到、发送到另一台机器的请求。NetBIOS实际上不操作数据。NetBIOS定义规定了用来到达这些服务的协议的网络接口,而非协议本身。历史上,NetBIOS曾与叫做NetBEUI的协议(网络扩展用户接口)捆绑。接口和协议的结合有时引起混淆,但它们是不同的。

  网络协议为定位、连接到网络上特定的服务提供至少一种方法。这通常由将节点和服务名转化为网络地址(名称解析)完成。在连接用TCP/IP建立前,NetBIOS服务名必须解析成IP地址。大多数NetBIOS的TCP/IP实现,用广播或LMHOSTS文件完成名称地址的解析。在Microsoft环境中,你最可能使用叫做WINS的NetBIOS
名称服务器。


[1.0.5] NetBEUI 解释

  NetBEUI是网络操作系统使用的NetBIOS协议的加强版本。它规范了在NetBIOS 中未标准化的传输帧,还加了额外的功能。传输层驱动器经常被Microsofts LAN Manager(微软局域网操作器)使用。NetBEUI执行OSI LLC2 协议。NetBEUI是原始的PC网络协议和IBM为LanManger(局域网操作器)服务器设计的接口。本协议稍后被微软采用作为它们的网络产品的标准。它规定了高层软件通过NetBIOS帧协议发送、接收信息的
方法。本协议运行在标准802.2数据链协议层上。


[1.0.6] NetBIOS 范围

  NetBIOS范围ID为建立在TCP/IP(叫做NBT)模块上的NetBIOS提供额外的命名服务。NetBIOS范围ID的主要目的是隔离单个网络上的NetBIOS通信和那些有相同NetBIOS范围ID的节点。NetBIOS范围ID是附加在NetBIOS名称上的字符串。两个主机上的NetBIOS范围ID必须匹配,否则两主机无法通信。NetBIOS范围ID允许计算机使用相同的计算机名,不同的范围ID。范围ID是NetBIOS名称的一部分,使名称唯一。

NETBIOS是不可路由的服务,如果要实现不同网段的主机名服务,需要设置WINS来解析。
发表于 2008-12-31 13:54:45 | 显示全部楼层
太多字了 看不上去啊 抢个沙发
发表于 2008-12-31 23:13:54 | 显示全部楼层
好多字,先顶再研究
发表于 2009-1-1 01:07:18 | 显示全部楼层
楼主的努力值得赞赏
发表于 2009-3-25 17:15:34 | 显示全部楼层
抄的 还从这炫耀呢 有意思啊?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|熊猫同学技术论坛|小黑屋| 网络工程师论坛 ( 沪ICP备09076391 )

GMT+8, 2024-11-22 21:34 , Processed in 0.127102 second(s), 20 queries , Gzip On.

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