交换机中网络环路常见问题详解
以太网中的交【zhōng de jiāo】换机之【huàn jī zhī】💵间存在【jiān cún zài】不恰当的端口相连会造成网🍨络环路🍂,如果相关的交换机没🏹有打开STP功能【gōng néng】,这种环路会引【lù huì yǐn】发数据包的无【bāo de wú】休止重🎠复转发【fù zhuǎn fā】,形成广播风暴🅱,从而造【cóng ér zào】💢成网络🦁故障。
一天,我们在【wǒ men zài】💌校园网的【de】😜网络运【wǎng luò yùn】行性能【háng xìng néng】监控平【jiān kòng píng】台上发现某栋【xiàn mǒu dòng】搂的【de】😜VLAN有问题——其接入交换机【jiāo huàn jī】与校园网的【de】😜连接中【lián jiē zhōng】断。检查放置在网【zhì zài wǎng】🎩络中心的【de】😜汇聚交换机【jiāo huàn jī】,测得与之相连【zhī xiàng lián】的【de】😜100BASE-FX端口【kǒu】有大量的【dà liàng de】⛲入流量,而出流量却非【liàng què fēi】🗜常少,显得很🎌不正常🕞。然而这👖台汇聚【tái huì jù】🏀交换机【jiāo huàn jī】的【de】😜性能似【xìng néng sì】乎还行,感觉不【gǎn jiào bú】到有什😀么问题🔀。于是,我们在【wǒ men zài】💌这台汇🕉聚交换机【jiāo huàn jī】上镜🌭像这个【xiàng zhè gè】异常端口【kǒu】,用协议🥏分析工具Sniffer来抓包,最多时【zuì duō shí】每秒钟📖居然能🌒抓到😱10万多个。对这些【duì zhè xiē】🏳数据包【shù jù bāo】🎈进行简单分析,我们发现其中一些共🕘同特征【tóng tè zhēng】。
当时🏑,我们急于尽快【yú jìn kuài】抢修网🏸络,没去深【méi qù shēn】究这些🥝数据包【shù jù bāo】🎙的特征【de tè zhēng】,只看到第【dì】1点就以【diǎn jiù yǐ】为网络【wéi wǎng luò】受到不明来历的Syn Flood攻击【gōng jī】,估计是由一种新网络🍫病毒引🍂起,马上把这台汇聚交换🤢机上该💷端口禁用掉【yòng diào】🏴,以免造【yǐ miǎn zào】成网络性能的下降🏮。
故障排除
为了能【wéi le néng】在现场测试网【wǎng】💧络的连通性📋,在网【wǎng】💧络中心,我们把【wǒ men bǎ】连接那🌬栋大【dòng dà】⬅楼接入交【jiāo】🌡换机的多模尾纤经光电转换🚎器用双绞线【xiàn】连到一台【dào yī tái】PC上【shàng】😬,并将其📕模拟成那个问🏫题 VLAN的网【de wǎng】💧关【guān】。然后【rán hòu】〽,到现场【dào xiàn chǎng】🐽找来大【dà】⬅楼网管【lóu wǎng guǎn】🧡员,想让他🤡协助我们尽快把感染🌃了未知🕷病毒的主机查到并隔离【lí】。据大【dà】楼🎪网【wǎng】💧管员反【guǎn yuán fǎn】映【yìng】⛏,昨天网【zuó tiān wǎng】💧络还算👌正常,不过,当时本大【dà】⬅楼某部【lóu mǒu bù】门正在做网【zuò wǎng】💧络调整,今天上【shàng】😬班就发现网【wǎng】络🧐不行了【bú háng le】🛋,不知跟他们有【tā men yǒu】没有关【guān】👗系【xì】。我们认为调整网【wǎng】络应👧该跟感染病毒关【guān】系【xì】不大【dà】⬅。在大【zài dà】⬅楼主配线间【xiàn jiān】,我们把【wǒ men bǎ】该接入交【jiāo】🌡换机上【huàn jī shàng】的网【de wǎng】💾线【xiàn】都拔掉,接上【shàng】😬手提电脑,能连通👽网【wǎng】💧络中心的测【de cè】🌪试主机【shì zhǔ jī】🔅。我们确🙏认链路没问题【méi wèn tí】🚹后【hòu】,每次将剩余网【shèng yú wǎng】线【xiàn】🤜数量【shù liàng】🌀的一半🛑插回该【chā huí gāi】交换机【jiāo huàn jī】,经测试【jīng cè shì】没问题【méi wèn tí】🚹则如是🥪继续下🔵去,否则换【fǒu zé huàn】插另一半🛑,逐渐缩⬛小怀疑有问题【yǒu wèn tí】网线【wǎng xiàn】🤜的数量【shù liàng】🌀。我们最【wǒ men zuì】终找到【zhōng zhǎo dào】一条会引起问题的网【tí de wǎng】线【xiàn】🤜,只要插📅上【shàng】这根⏸网线【wǎng xiàn】🤜,该大【dà】⬅楼网【wǎng】💧络就会与模拟【yǔ mó nǐ】网【wǎng】💧关【guān】中断连🚶接。经大【jīng dà】⬅楼网管【lóu wǎng guǎn】🧡员辨认【yuán biàn rèn】,这条网线【wǎng xiàn】🤜是连接昨天在做网【zuò wǎng】💧络调整的那个【de nà gè】部门的。他还说【tā hái shuō】以前该🐋部们拉了一主一备两条网【liǎng tiáo wǎng】线【xiàn】🤜,应该还有一条♑,并亲自🍶在那台🗓交换机【jiāo huàn jī】上【shàng】😬把另一条找【tiáo zhǎo】💗了出来【le chū lái】。随意插🍬上【shàng】这两🏊条网线【wǎng xiàn】🤜中的一条,网【wǎng】络没🥩问题,但只要同时插上【shàng】😬,就有问【jiù yǒu wèn】题,哪有在一台交【jiāo】🗒换机上【huàn jī shàng】😬同时插上【shàng】😬两条网【liǎng tiáo wǎng】💧
线才会【xiàn cái huì】🛹激活网络病毒的【de】⛑SYN Flood攻击的【de】⛑?这时我🏗们倒是【men dǎo shì】觉得这种现象更像是【gèng xiàng shì】网络中有环路。我们到🏕了那个部门发现有三台非管【tái fēi guǎn】理型交换机,都是串【dōu shì chuàn】✴在一起🛌的【de】⛑,然而其【rán ér qí】🐞中两台又分别🤼通过那两条网线与接入交换机相连【jī xiàng lián】,从而导【cóng ér dǎo】致了网【zhì le wǎng】络环路。显然是【xiǎn rán shì】施工人👢员对网【yuán duì wǎng】络拓扑【luò tuò pū】🚌不清楚,当时大【dāng shí dà】楼网管【lóu wǎng guǎn】😳员有事外出,就自以📞为是地【wéi shì dì】把线接【bǎ xiàn jiē】📅错了,从而造⛏成了这起网络【qǐ wǎng luò】事故。原因找📯到就好办了,只需拔🥑掉其中一条上联网线即可恢复网络❕连通。 经过一【jīng guò yī】番周折,网络恢复了正🎚常,但我们【dàn wǒ men】🆒还一直在想【zài xiǎng】🔭,是什么👋干扰了【gàn rǎo le】👜我们的【de】⛑判断呢?
故障分析
一起典🕤型的【xíng de】🐻网络环路【luò huán lù】故障🐩,用协议🙏分析工具🖋Sniffer抓了这【zhuā le zhè】🌋么多的【me duō de】🐻数据包【shù jù bāo】,经过一💩番分析却没看出问题【chū wèn tí】来【lái】🎰。显然,第一眼看到大量的【de】🐻SYN包让我们产生【men chǎn shēng】了错觉【le cuò jiào】,想当然地就以为是【wéi shì】SYN Flood攻击🏂。事后🗾,我们就🖼这起网【zhè qǐ wǎng】络环路【luò huán lù】故障排【gù zhàng pái】♓除过程【chú guò chéng】🍎做了检讨,重新仔细地分🛐析抓回【xī zhuā huí】来【lái】🎰的【de】🐻这些数据包【shù jù bāo】,据此解【jù cǐ jiě】释一下🦀前面提到这些【dào zhè xiē】数据包【shù jù bāo】所具🖋有的【yǒu de】🐻5个共同【gè gòng tóng】特征,以便今后遇到同类问🎐题时能🚹及时作🔨出正确的【de】反应🏴。先看前🎉4个特征:汇聚交【huì jù jiāo】😆换机是网络层设备🏢,该📿大楼所属【shǔ】VLAN的【de】🐻网络层接口👾就设置【jiù shè zhì】在这台汇📤聚交换机上【jī shàng】🏓,出于实【chū yú shí】施网络【shī wǎng luò】管理策【guǎn lǐ cè】略的【de】需🍺要,对已注册或没注册的【de】🐻 IP地址【dì zhǐ】🍮都进行了🛷MAC地址的【dì zhǐ de】🤦绑定【bǎng dìng】🥒。TCP连接要经过3次握手【cì wò shǒu】才能建立起来【lái】🎰,在这里发起连接的【de】🐻SYN包长度🦔为28个字节【gè zì jiē】🌁,加上14个字节【gè zì jiē】🌁的【de】🐻以太帧头部和 20个字节【gè zì jiē】🌁的【de】🐻IP报头💆,由Sniffer捕获到的【de】🐻帧长度共为62个字节【gè zì jiē】🌁(不包含4字节的【de】🚯差错检【chà cuò jiǎn】测FCS域)。恰巧当时访问该📿VLAN的单播【de dān bō】👉帧是来【lái】📘自外网的【de】🐻 TCP请求包,根据以太网桥【tài wǎng qiáo】的转发【de zhuǎn fā】🛒机制,通过CRC正确性【zhèng què xìng】检测后【jiǎn cè hòu】,因已做🏍静态ARP配置【pèi zhì】,这台汇📤聚交换机会将【jī huì jiāng】该单播🌿帧的源【zhēn de yuán】🉐MAC地址【dì zhǐ】🍮转换成本【běn】🥨机的【de】🐻MAC地址【dì zhǐ】🍮,其目的【qí mù de】🐻MAC地址依【dì zhǐ yī】👖据绑定【jù bǎng dìng】🥒参数来【lái】🎰更换,并重新🐊计算【jì suàn】CRC值【zhí】,更新【gèng xīn】FCS域,经过这【jīng guò zhè】样重新👮封装后🈵,再转发到那栋😘楼的【de】🐻接入交【jiē rù jiāo】换机。
再看最【zài kàn zuì】🕘后1个特征🤺:网桥是【wǎng qiáo shì】🏩一种存储转发【chǔ zhuǎn fā】设备,用来连【yòng lái lián】接相似📱的局域【de jú yù】网【wǎng】。这些网【wǎng】🌧桥在所有端口🌛上监听着传送过来的🍼每一个【měi yī gè】数据帧【shù jù zhēn】🔰,利用桥【lì yòng qiáo】🤥接表作为该数【wéi gāi shù】据帧🔰的转发【de zhuǎn fā】依据。桥接表是【shì】🏩MAC地址【dì zhǐ】🧑和用于到【dào】达该地址【dì zhǐ】🧑的端口号🌹的一个“MAC地址【dì zhǐ】🧑-端口号🌹”列表,它利用【tā lì yòng】👦数据帧【shù jù zhēn】🔰的源MAC地址【dì zhǐ】🧑和接收【hé jiē shōu】该帧的端口号🌹来刷新【xīn】📤。网桥是【wǎng qiáo shì】🏩这样来【zhè yàng lái】🛳使用桥接表的🎭:当网【wǎng】桥🤣从一个端口接🔜收到【dào】一个数据帧【shù jù zhēn】🔰时【shí】,会先刷【huì xiān shuā】新【xīn】📤桥接表,再在其桥接表中查找🎄该帧的目的🤗MAC地址【dì zhǐ】🧑。如果找【rú guǒ zhǎo】到【dào】,就会从对应这【duì yīng zhè】个MAC地址【dì zhǐ】🧑的端口转👥发该帧(如果这【rú guǒ zhè】个转发端口与🤕接收端口是【shì】相😶同,就会丢弃该帧)。
如果找不到,就会向【jiù huì xiàng】🕑除了接【chú le jiē】收端口【shōu duān kǒu】😤以外的🗾其他端💲口转发🛷该帧【gāi zhēn】🔕,即广播💒该帧【gāi zhēn】🔕。这里假【zhè lǐ jiǎ】🎣定在整个转发过😻程中,网桥【wǎng qiáo】🔎A、B、C和D都在其桥接表【qiáo jiē biǎo】🔎中查找【zhōng chá zhǎo】🐄不到该数据帧【shù jù zhēn】的目的【de mù de】🎸MAC地址,即这些网桥【wǎng qiáo】🔎都不知道应该【dào yīng gāi】从哪个【cóng nǎ gè】端👛口转发🛷该帧【gāi zhēn】🔕。当网桥【wǎng qiáo】🔎A从上联【cóng shàng lián】端口【duān kǒu】😤接收到㊙一个来【yī gè lái】自上游网络的单播帧【bō zhēn】💱时,会广播该帧【gāi zhēn】🛎,网桥【wǎng qiáo】🔎B、C收到后【hòu】也会广【yě huì guǎng】📹播该帧【gāi zhēn】🛎,网桥【wǎng qiáo】🔎D收到分【shōu dào fèn】🥋别来自😯网桥【wǎng qiáo】🔎B、C的这个单播帧【bō zhēn】💱,并分别😷经网桥【wǎng qiáo】👼C、B传送回网桥【wǎng qiáo】🔎 A,到此网🙅桥【qiáo】A收到了【shōu dào le】该单播【gāi dān bō】帧【zhēn】💱的两个副本📂。在这样的循环🎶转发过😻程中,网桥【wǎng qiáo】🔎A不停地【bú tíng dì】在不同端口【duān kǒu】😤(这时已🏝经不涉及上联【jí shàng lián】端口【duān kǒu】😤了【le】)接收到㊙相同的帧【zhēn】,由于接➿收端口【shōu duān kǒu】😤在改变,桥接表【qiáo jiē biǎo】🔎也在改变“源MAC-端口【duān kǒu】😤号”的列表内容【nèi róng】📬。前面已😑经假定网桥【wǎng qiáo】🔎的桥接【de qiáo jiē】表🔎中没有该帧【gāi zhēn】🔕的目的【de mù de】🎸MAC地址,网桥【wǎng qiáo】🔎A在分别🚳收到这【shōu dào zhè】两个单播帧【bō zhēn】💱后【hòu】,都只能【dōu zhī néng】再次向除了接【chú le jiē】收端口【shōu duān kǒu】😤以外的🗾其他端💲口广播该帧【gāi zhēn】🛎,故该帧【gāi zhēn】🔕也会向上联端口【duān kǒu】😤转发。
就每个单播帧【dān bō zhēn】😜而言,网桥【wǎng qiáo】A重复前面提到【miàn tí dào】🏴的【de】🍻过程【guò chéng】,理论上【lǐ lùn shàng】🛩,广播一⏯次会收到【shōu dào】21个帧【gè zhēn】,广播两次就会【cì jiù huì】📣收到【shōu dào】22个帧【gè zhēn】,…,广播到❎第🍮n次就会【cì jiù huì】📣收到【shōu dào】2n个帧【gè zhēn】。总之🎢,网桥【wǎng qiáo】A照这样转发下【xià】💾去,很快就【hěn kuài jiù】会形成广播风【guǎng bō fēng】暴♿,这个单播帧【dān bō zhēn】😜的【de】🍻副本最终会消耗完⛓100BASE-X端口带【duān kǒu dài】宽【kuān】。尽管在【jìn guǎn zài】这期间上联端【shàng lián duān】口会有【kǒu huì yǒu】许多数【xǔ duō shù】据帧在相互碰【xiàng hù pèng】撞而变的【de】🍻不完整,令Sniffer捕获不【bǔ huò bú】🀄到,但可以【dàn kě yǐ】🚻想象得到这个单播帧【dān bō zhēn】😜的【de】🍻重复出现次数【xiàn cì shù】仍然会非常多。我们再🚆次检查那些抓回来的【huí lái de】🍻数据包🏵,几乎都🔅发现有当时没有注意🤰到的【de】🍻重复标志。按【àn】🐜64字节包🌾长来计🕋算,以太网🎤交换机【jiāo huàn jī】的【de】🍻100BASE-FX端口转🗃发线速可达【kě dá】144000pps。在这种【zài zhè zhǒng】网络环【wǎng luò huán】路状态🔩下【xià】💾, Sniffer完全有可能每🚟秒抓到【miǎo zhuā dào】10万多个🐡包长为66字节的【de】🍻数据包🏵。
基于上述理由🔔,由于当🏹时那⏸4台交换【tái jiāo huàn】🚫机的【de】桥🏫接表中🏏都没有该包的【de】目的【mù de】MAC地址,处于上游网络的【de】这台🚘汇聚交🌎换机向【huàn jī xiàng】该大楼发送【sòng】了一个【yī gè】TCP请求【qǐng qiú】🐯包后【hòu】,就会不【jiù huì bú】🀄断地收到由该【dào yóu gāi】大楼接【dà lóu jiē】入交换【rù jiāo huàn】机转发回来的【de】该TCP包的副【bāo de fù】本,而且数⛳量非常地多【dì duō】(形成大⬆流量【liú liàng】),然而,它并不会把接收到的【de】🍩这些包🍓重发回去📟;Internet 的网络【de wǎng luò】应用是基于请🤘求【qiú】🐯/应答模🎥式的【shì de】🙍,只有发送【sòng】/接收两条信📦道都畅【dào dōu chàng】通🕹,才能进行端到【háng duān dào】🗳端的通【duān de tōng】🏗信📦。一旦本次网络【cì wǎng luò】应用中【yīng yòng zhōng】有一条信【yī tiáo xìn】🕢道被堵【dào bèi dǔ】塞了,就会使得该应【dé gāi yīng】用因无法进行【fǎ jìn háng】⛸而结束【ér jié shù】。网络应用结束🤴后【hòu】,一般来说【shuō】🏅,发起请【fā qǐ qǐng】💉求【qiú】🐯一方不会就本次应用再次自动发出请求【qǐng qiú】🧝包。于是【yú shì】,在网络【zài wǎng luò】🦋环路状态中普【tài zhōng pǔ】🧀遍会有【biàn huì yǒu】一条信【yī tiáo xìn】🕢道有大【dào yǒu dà】🍿流量【liú liàng】,另一条信【yī tiáo xìn】🕢道几乎没有流量【liú liàng】的【de】🕐现象。因为VLAN有隔离【yǒu gé lí】广播域的【de】功能🔲,这些大流量【liú liàng】不会穿越网络层,所以不【suǒ yǐ bú】会对汇聚交🌎换机造成📊很大压【hěn dà yā】力。事实上【shì shí shàng】,由于这【yóu yú zhè】🕠种网络环路是✝数据链路层上🥝的【de】故障,只涉及到源MAC地址和目的【mù de】MAC地址,不管高层封装📎的【de】是什🏘么类型的包都【de bāo dōu】有可能引起广播风暴【bō fēng bào】🍶。也就是说【shuō】🏅,当时用Sniffer抓到各💨种各样🍿的【de】数据包都是有可能的【de】。
故障预防
校园网的接入层是面【céng shì miàn】向用户的网络界面,有许多不可控【bú kě kòng】的成分❓,情况很【qíng kuàng hěn】复杂【fù zá】💊,应由专人管理【rén guǎn lǐ】,也应在💀设备上给予可【kě】靠性保证。本搂接入交🔗换机是可【kě】📩管理型【guǎn lǐ xíng】🚩的,有STP功能🏘,其他交【qí tā jiāo】换机都😡是非管理型【guǎn lǐ xíng】🚩交换机【jiāo huàn jī】,没有【méi yǒu】STP功能🏘。本来事先在该接入交🔗换机上配置了😤STP功能🏘,这起网【zhè qǐ wǎng】络事故是完全可【kě】以避免的【miǎn de】,但不知【dàn bú zhī】📧何故没【hé gù méi】有这样【yǒu zhè yàng】做,事后再做只能🈯权当【quán dāng】🚘“亡羊补【wáng yáng bǔ】牢”了😤。由此可【yóu cǐ kě】🐉见【jiàn】📒,即使接入交🔗换机打【huàn jī dǎ】开了😤STP功能🏘,下游网【xià yóu wǎng】🙇络也会因某种【yīn mǒu zhǒng】⭕原因构【yuán yīn gòu】🐻成环路,产生广播风暴,造成对【zào chéng duì】上游网【shàng yóu wǎng】络🚿本VLAN的冲击📯,故该接🎩入交换【rù jiāo huàn】🧔机还应有广播【yǒu guǎng bō】包抑制功能🏘,以便能🕰将影响限制在局部范【jú bù fàn】围内。对于下💱游网络【yóu wǎng luò】🚿的交换机【jiāo huàn jī】同样有这些需求🤸,只是成本问题【běn wèn tí】😝而已🎅。一句话🦌,在网络💑故障排👹除时,技术和经验固然重要,但在平😐时就要注意维护网络的规范连接【lián jiē】、落实基本的防【běn de fáng】范措施更为重【gèng wéi chóng】要。
关键词🐫:交换机🛅,网络环【wǎng luò huán】路🍬,网络环【wǎng luò huán】路🍬常见问【cháng jiàn wèn】题详解
阅读本文后您有什么感想? 已有 人给出评价!
- 0
- 0
- 0
- 0
- 0
- 0