关于广播风暴的问题

2014-04-08 13:31:58 +08:00
 pyKun
1. 常说的广播风暴指的是类似dhcp过程,发了很多广播。这种时候广播指的是三层上的,而不是二层上的对吧?

2. 追问,二层上的广播有可能“风暴”么?造成网络堵塞

3. 在一台三层交换机上,在一个vlan里,通过设置掩码可以保证两个机器可以通信或者不可以,那这个时候,如果在这个vlan里,有个新加入的机器发dhcp请求ip,这个vlan里的所有机器都会得到这个包么?
8110 次点击
所在节点    Linux
24 条回复
goophile
2014-04-11 22:37:40 +08:00
@pyKun 我解释起来也很混乱的。。。

首先,交换机是二层设备,根据报文的MAC地址来转发,转发时不改变报文的MAC地址;路由器是三层设备,根据报文的IP地址转发,转发时会改变报文的MAC地址。

交换机自己维护一张 MAC-端口 表,记录了哪个端口对应着哪些MAC地址。交换机某个端口收到一个报文时,先记录下源MAC和端口的对应关系,然后根据其目的MAC转发,如果是全1,即广播地址,就从其他所有端口转发出去。如果不是,那么在 MAC-端口 表中查询这个报文的目的MAC,如果有,就从对应的端口发送出去;如果没有,就从其他所有端口发送出去。

用若干交换机连接起来的一个网络,即一个二层网络,如果没有划分VLAN,可以称之为一个广播网络,这个广播网中的所有主机共处一个广播域。因为根据交换机的转发机制,任何一个广播报文都会传播到所有交换机的所有端口连接的主机。如果多个交换机连接成了一个环,那么同一个广播报文会不停地在这些交换机之间来回转发,随着主机发出的广播报文比如ARP或者DHCP越来越多,就引发了广播风暴。(STP可解决环路的问题。)即使没有环路,如果网络中有恶意攻击者,大量发送广播报文,也会导致整个二层网络拥塞。

二层网络很大的时候,大量广播是个严重问题。怎么办呢?划分VLAN。

所谓VLAN,简单地说,就是把交换机的端口做个分组,只有同一个组的端口之间才能做二层转发,这个组就是一个VLAN,拥有一个VLAN号码。交换机发送和接收报文时,可以在报文的MAC地址后插入一个VLAN标签,接收的交换机检查这个标签,和当前端口的VLAN号一致才进行转发,否则直接丢弃。相当于交换机原来的 MAC-端口 表项变成了 VLAN-MAC-端口 表项,增加了VLAN检查。这样就把一个大的广播域划分为多个小的广播域,每个VLAN是一个广播域。

VLAN之间通信,或者两个二层网络的主机之间通信,就得进行三层转发,得靠路由器。路由器根据三层的IP地址转发,并且不转发目的IP是广播地址的报文,所以路由器天然就是隔离广播域的设备。这么看的话,广播其实就是个二层的概念,因为只在同一个二层网络中发生。

然后,其实现在交换机和路由器之间的差距已经越来越小了,交换机可以配置IP地址,可以做三层转发,可以跑路由协议;路由器也可以做二层转发。

自顾自打了这么多字,希望有些帮助。
pyKun
2014-04-11 23:52:29 +08:00
@goophile

多谢回复,传统意义的路由器和交换机经你这么一说明白多了,交换机为啥交换也明白多了,还有vlan标签,希望别人看到这个帖子也能明白多了

追问些

>> 然后根据其目的MAC转发,如果是全1
dhcp发的包实际上是因为包里的mac地址全是1,所以才会让广播域的所有机器都收到这个包是吧?

另一个关于掩码的问题,掩码发明原因说是为了增加ip空间(书上说的),但其实也起到了隔离的作用。在一个二层能到的位置(同一广播域),主机a收到主机b的包,通过计算里面的ip和掩码来判断把这个包丢掉还是处理。所以dhcp中,发的是全为1的mac地址,然后为了确保不会被三层的机制让这个包被丢掉,所以才有的255.255.255.255吧?

另外一个情况,主机a和主机b在同一个交换机上,比如192.168.1.1/24和192.168.1.2/24。这个时候尽管交换机知道mac和端口对应位置,但是包的传送还是需要网关吧?如果网关是192.168.1.3/24,a和b互传个文件应该很快,他们只经过1.1,1.2,1.3而已。但是如果qq传文件,目标地址就不是内网地址了,网关会一层一层往上问,到包回来后经历了很多机器,所以尽管同在一个交换机上的1.1和1.2,通过qq传个文件还是依赖网速了
goophile
2014-04-13 10:22:56 +08:00
@pyKun 不好意思一直没看见回复。。

>> dhcp发的包实际上是因为包里的mac地址全是1,所以才会让广播域的所有机器都收到这个包是吧?
对。实际上是DHCP Client发的包目的MAC和目的IP是广播地址,DHCP Server回复的包是单播的。你可以抓包看看。

>> 另一个关于掩码的问题……
可以这么理解。发DHCPv4请求的时候,主机不知道向谁请求,也只能用广播地址啊。

>> 另外一个情况……
交换机只根据MAC地址来转发,不看上层的东西,它也不区分接口接的是主机还是网关。报文发给谁是由主机决定的。主机发送报文的时候,先判断目的IP和自己是不是在同一网段,如果是,直接封装目的IP主机的MAC地址发送出去,不经过网关;如果不是同一网段,就封装网关的MAC地址,把报文发到网关,由网关根据路由转发。1.1和1.2通信,在同一网段,如果在同一VLAN,是不经过网关转发的。

QQ传文件的机制我不了解,如果QQ传之前会判断是不是在同一局域网,应该可以直接发送不经过外网的;它也可能发到服务器再转发。不过我记得以前在局域网用QQ传文件,100M以太网可以达到10MB/s,和飞鸽传书一样,基本满速了,这么看应该是直接传不经过网关的。
pyKun
2014-04-13 11:57:33 +08:00
@goophile

多谢回答,最后那个情况的例子我再琢磨下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/107646

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX