5000字学习本地广播和定向广播,非常详尽!
大家好,这里是网络技术联盟站,我是瑞哥。
今天主要带大家了解一下网络的中的广播IP。
网络中存在两种类型的广播 IP 地址:
本地广播IP 地址 定向广播IP 地址
它们具有的功能基本相同,但它们也有一个典型的不同之处。
在本文中,我将清楚地说明这两个概念并且详细的阐述它们的功能。
我们将使用这个拓扑来讨论这些概念:
首先,我们看一下术语“广播”。
广播是一种将帧或数据包传送给本地网络上的每台主机的技术。
广播与单播消息大致相反,单播是从一台Host到另一台Host的通信,单播有时被称为一对一通信,而广播可以被认为是一对多通信。
广播 的定义提到了帧 和数据包,这是因为广播有第 2层和第 3 层方面的知识。
1二层广播
第 2 层广播是目标 MAC 地址为 的任何帧FFFF.FFFF.FFFF
。
这是专门为广播帧保留的 MAC 地址,它有时也表示为ff:ff:ff:ff:ff:ff
或ff-ff-ff-ff-ff-ff
。
任何网络上的任何节点都可以简单地使用此目标 MAC 地址创建 L2 表头,以便向本地网络上的每台主机发送帧。
交换机知道,如果他们看到这个目标 MAC 地址,他们应该自动将泛洪所有接口(除了接收它的接口)。
请记住,设置目标 MAC 地址的是帧的发送者。因此,是帧的发送者决定将特定帧传送给本地网络上的每个人还是网络上的单个节点。
2三层广播
与 L2 广播类似,第 3 层广播只是设置为特定数据包的目标 IP 地址的特殊 IP 地址。
但是,与 L2 广播不同,对于用作第 3 层广播的目标 IP 地址的内容,有两种不同的选项。
这两个选项是本地广播和定向广播(有时也称为目标广播)。
3本地广播
在本地广播 IP地址是255.255.255.255
。
无论特定Host在哪个IP 网络上,该Host始终可以使用此 IP 地址向本地网络上的每个节点发送数据包。
在我们的拓扑中,Host 1 可以向 IP 地址发送一条消息,以便与255.255.255.255
它自己的本地网络上的其他Host通信。
当然了,也包括路由器。由于 R1 在10.1.1.0/24
网络中具有 IP 地址,因此它是Host 1 本地网络的成员。
Host1# ping 255.255.255.255
PING 255.255.255.255 (255.255.255.255): 56 data bytes
64 bytes from 10.1.1.11: seq=0 ttl=64 time=0.044 ms
64 bytes from 10.1.1.33: seq=0 ttl=64 time=0.944 ms (DUP!)
64 bytes from 10.1.1.22: seq=0 ttl=64 time=1.108 ms (DUP!)
64 bytes from 10.1.1.1: seq=0 ttl=255 time=1.324 ms (DUP!)
^C
--- 255.255.255.255 ping statistics ---
1 packets transmitted, 1 packets received, 3 duplicates, 0% packet loss
round-trip min/avg/max = 0.044/0.855/1.324 ms
Host1#
Host 1 向其自身(10.1.1.11
)、Host 3 (10.1.1.33
)、Host 2 (10.1.1.22
) 和路由器(10.1.1.1
)发送 ping255.255.255.255
并接收响应.
这是数据包在线路上的样子:
请注意,目标 IP 地址是255.255.255.255
,还要注意目标 MAC 地址是ff:ff:ff:ff:ff:ff
,这个数据包既是L2 广播又是 L3 广播。
在抓包窗口中,我们可以看到来自Host 3、Host 2 和路由器的响应,但是我们没有看到来自Host 1 的响应。
这是因为该数据包只是在内部发送,从未真正到达线路。
Wireshark 正确地将该数据包标记为broadcast数据包,同样,发送到的任何内容255.255.255.255都是广播。
为了比较,这里是Host 1 和Host 3 之间单播 ping 的数据包的抓包详情:
请注意,L2 源和目标是属于Host 1 ( ee:ee:ee:11:11:11
) 和Host 3 ( ee:ee:ee:33:33:33
)的 MAC 地址。当然,L3 源和目标是属于Host 1 ( 10.1.1.11
) 和Host 3 ( 10.1.1.33
)的 IP 地址。
4定向广播
定向广播 IP 地址就是所谓的每个子网的广播 IP。要找到此 IP 地址,必须进行一些子网划分。
与上述本地广播非常相似,定向广播 IP 可被任何Host用于与其本地网络上的每个Host通信。
Host 1 具有网络10.1.1.11
上的IP 地址10.1.1.0/24
,因此,该 IP 子网的广播 IP 地址为10.1.1.255
.
Host 1 可以使用此 IP 地址向其本地网络上的其他人发送消息,就像上面的本地广播一样:
Host1# ping 10.1.1.255PING 10.1.1.255 (10.1.1.255): 56 data bytes64 bytes from 10.1.1.11: seq=0 ttl=64 time=0.046 ms64 bytes from 10.1.1.33: seq=0 ttl=64 time=0.615 ms (DUP!)64 bytes from 10.1.1.22: seq=0 ttl=64 time=0.835 ms (DUP!)64 bytes from 10.1.1.1: seq=0 ttl=255 time=1.261 ms (DUP!)^C--- 10.1.1.255 ping statistics ---1 packets transmitted, 1 packets received, 3 duplicates, 0% packet lossround-trip min/avg/max = 0.046/0.689/1.261 msHost1#
Host 1 向其自身( 10.1.1.11
)、Host 3 (10.1.1.33
)、Host 2 ( 10.1.1.22
) 和路由器(10.1.1.1
)发送 ping10.1.1.255并收到响应。
这是数据包在线路上的样子:
注意目的IP地址是10.1.1.255
,目的MAC地址是ff:ff:ff:ff:ff:ff
。
Wireshark 对这些数据包的分析可以看到两个细节:
首先,我们知道10.1.1.255
是10.1.1.0/24
网络的广播 IP 。但是 Wireshark 没有像前面例子中的本地广播那样标记它。
原因是 Wireshark 不知道这个捕获来自一个带有/24掩码的网络,因此,Wireshark 无法推断这10.1.1.255
是一个广播 IP。如果掩码是/22,则广播 IP 将是10.1.3.255
,并且10.1.1.255
将是一个完全有效的Host地址。
其次,注意 ICMP 标头上的黄色背景,这是 Wireshark 表示“expert info”发出警告,因为未找到 ICMP 回显请求的响应。
Wireshark 看到发送到 的回显请求10.1.1.255
,因此正在寻找来自 的响应10.1.1.255
,这个主机不可能回应的。
在这一点上,我们已经证明Host可以使用本地广播IP 或定向广播IP与其本地网络上的每个节点通信。
这就引出了一个问题:如果这两种类型的广播执行相同的功能,为什么我们有两种不同类型的 L3 广播?
答案是:定向广播可以做本地广播不能做的事情,定向广播可用于与外部网络上的每个节点通信。
5定向广播到外部网络
每个 IP 网络都有自己的广播 IP,因此,Host可以使用外部网络的广播 IP 地址将广播定向到该外部网络中的每个节点这个就是定向广播(或有时有针对性的广播)。
在我们的拓扑中,Host 1 可以使用 IP 地址10.3.3.127
与10.3.3.0/25
网络中的每个Host通信:
为了比较,先看下从Host 1 到Host 6 的单播 ping。
Host1# ping 10.3.3.66
PING 10.3.3.66 (10.3.3.66): 56 data bytes
64 bytes from 10.3.3.66: seq=0 ttl=61 time=3.792 ms
^C
--- 10.3.3.66 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 3.792/3.792/3.792 ms
在网络上,这是在 Hub1 和 R1 之间捕获的:
源 IP 是10.1.1.11
(Host 1),目标 IP 是10.3.3.66
(Host 6)。这是 L3 表头,在整个行程中大部分将保持不变。
L2 报头离开Host 1 时的源 MAC 地址为ee:ee:ee:11:11:11
(Host 1),目标 MAC 地址为ee:ee:10:11:11:11
(R1),该L2 表头将在沿路径的每一跳中被丢弃并重新生成。
在 R3 和 SW2 之间捕获的相同数据包如下所示:
请注意 L3 表头未更改,但是 L2 报头现在包括ee:ee:10:33:33:33
(R3)的源 MAC和ee:ee:ee:66:66:66
(Host 6)的目标 MAC 。
现在让我们测试对外部网络的定向广播,Host 1 ping IP 地址10.3.3.127
。请记住,网络上有四个节点10.3.3.0/25
,我们应该期待每个节点的响应。
Host1# ping 10.3.3.127PING 10.3.3.127 (10.3.3.127): 56 data bytes64 bytes from 10.2.3.3: seq=0 ttl=253 time=1.171 ms64 bytes from 10.3.3.66: seq=0 ttl=61 time=3.683 ms (DUP!)64 bytes from 10.3.3.55: seq=0 ttl=61 time=7.340 ms (DUP!)64 bytes from 10.3.3.44: seq=0 ttl=61 time=9.838 ms (DUP!)^C--- 10.3.3.127 ping statistics ---1 packets transmitted, 1 packets received, 3 duplicates, 0% packet lossround-trip min/avg/max = 1.171/5.508/9.838 ms
正如预期的那样,我们收到了四个对 ping 的响应:路由器 3 ( 10.2.3.3
)、Host 6 ( 10.3.3.66
)、Host 5 ( 10.3.3.55
) 和Host 4 ( 10.3.3.44
)。
奇怪的是,R3 响应的地址是10.2.3.3
,这是在 R2 和 R3 之间的链路上的 IP 地址。我原以为这个响应来自10.3.3.3
。我不确定这是错误还是预期行为,或者仅仅是思科响应定向广播的实现。无论哪种方式,这个响应确实来自 R3。
数据包揭示了一些有趣的细节,以下是 Hub1 和 R1 之间链路的抓包:
需要指出的最重要的事实是这个数据包是一个单播数据包。L2 和 L3 头部的构造与 Host1 和 Host6 之间的单播 ping 相同(当然,目标 IP 地址除外)。
这说明:Host 1 不知道它正在与定向广播 IP 地址通信。但从Host 1 的角度来看,10.3.3.127
它只是一个外部网络上的 IP 地址,Host 1 只是遵循与外部网络上的 IP 通信的所有常规规则。
事实上,数据包从 Host1 传输到 R1,从 R1 传输到 R2,再从 R2 传输到 R3 作为常规单播数据包。唯一知道IP 地址·10.3.3.127· 是目标子网的广播 IP 的路由器是 R3。R3 另一端的抓包表明了 R3 对它收到的单播数据包做了什么:
注意目的 MAC 地址是ff:ff:ff:ff:ff:ff
,目的 IP 地址是255.255.255.255
,这是 L2 和 L3 广播。
R3 知道此数据包已发送到定向广播 IP 地址,因此将其接收到的单播数据包转换为广播数据包。
6安全
虽然将数据包发送到外部网络上的每个Host的功能看起来非常简单,在实际环境中,这是由安全风险的。
定向广播是在计算机网络诞生之初发明的,当时互联网还是一个相对来说比较简单、友好的地方。当时很简单,只需信任 Internet 上的其他用户不要滥用定向广播即可。
然而,随着互联网的发展,其他用户的信任继承消失了。目前,几乎所有现代操作系统和路由器软件都忽略定向广播。
在 Cisco 路由器上,涉及此命令:
R3# show run int eth0/0
!
interface Ethernet0/0
mac-address eeee.1033.3333
ip address 10.3.3.3 255.255.255.128
ip directed-broadcast
在 Linux Host上,这涉及将此文件的值从 更改1为0:
Host1# cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts0
我之所以说这一切,是因为在阅读本文后,不可避免地有些人会尝试 ping 外部网络的广播 IP,并且很可能会失败。
如果您将自己置于网络管理员的角度,这是很有道理的,您不希望 Internet 上的某个随机用户能够向网络上的每个Host发送 ping 。
7总结
在本文中,我们讨论了第 2 层广播和第 3层广播的思想,我们深入研究本地广播和定向广播(也称为目标广播)的概念时,我们进一步解开了 L3 广播。总结这些定义:
本地广播 IP – 255.255.255.255
可用于与本地网络上的每个人通信 定向广播—— <每个子网的广播ip> 可用于与本地网络上的每个人通信 可用于与外部网络上的每个人通信
技术交流群
有不少同学问瑞哥,是否有相关技术交流群可以加入,这里向大家说明一下,有qq群和微信群,qq群群号是874073941。