在一个没有任何运行的系统中(至少我不知道)。监听传入和传出流量会打印以下输出:
192.168.1.1 => all-systems.mcast.net 0b 26b 19b
<= 0b 0b 0b
192.168.1.2 => 224.0.0.251 128b 26b 19b
<= 0b 0b 0b
(有时它不只显示 26b 或 128b,而是跳转到大数字,就像正在发送实际信息一样)
这是什么意思?
192.168.1.1是网关,我的路由器
192.168.1.2是我,我的机器
但是 all-systems.mcast.net 是谁?还有224.0.0.251是谁?更重要的是,为什么会有数据包被发送?
发现这个: https://davidsimpson.me/2015/11/16/why-is-my-machine-contacting-all-systems-mcast-net/ 但我没有运行 DLNA 服务器。那么我要向谁广播呢?
最后一个(也是重要的问题)是:我可以理解 192.168.1.2 与某物联系,我可以理解 192.168.1.1 与我联系,但我不明白为什么我看到 192.168.1.1 与所有系统联系.mcast.net,那么监控我的机器怎么可能显示来自我的路由器但未发送给我的流量呢?我应该看不到这个吧?
我正在使用的实用程序是:
iftop - display bandwidth usage on an interface by host
实用程序 tcptrack 和 netstat 根本没有显示任何内容。因此,唯一合理的解释是该实用程序是该流量的负责人?
问题更新
因此,这种多播的东西显然集成在我的系统内核中,也在我的路由器中,带有一个非常基本的问答系统,一个计时器,每 60 秒一次。我不太明白为什么,在一些好人试图向我解释之后,我想我永远不会明白。所以我想把它关掉。是否可以?
答案1
您看到的这些数据包是常规多播服务(虽然过程类似于广播数据包,但它们本身不是广播);它们在网络中的输出流量也(通常)可以忽略不计。
实际上,您不仅可以看到自己生成的流量,还可以看到网络上其他计算机生成的地址的流量。
- 224.0.0.1 是 all-systems.mcast.net
默认情况下,所有 (Linux) 服务器都会定期在网络中向 224.0.0.1 广播多播,以便向附近的路由器报告它们能够进行多播通话。这些数据包应该是 Linux 内核发送的。
- 224.0.0.251 是 mDNS
至于224.0.0.251,Avahi/zeroconf使用它来进行服务公告和发现。
Avahi 是一个免费的零配置网络 (zeroconf) 实现,包括用于多播 DNS/DNS-SD 服务发现的系统。
D 类地址 - 多播地址 / 224.0.0.0 - 239.255.255.255
o 224.0.0.1 是所有主机组。如果您 ping 该组,网络上所有支持多播的主机都应该应答,因为每个支持多播的主机都必须在启动时在其所有支持多播的接口上加入该组。
至于看到不适合您的数据包,您应该收听广播和多播数据包/公告,因为它们(通常)发送到所有电台。其中存在细微差别,我不会在这里深入探讨。请参阅我链接的介绍。
最后,虽然iftop
看到流量,但它并不负责生成流量。
您还可以查看服务器所属的多播组:
netstat -g
最后,没有普通用户/您的用户运行程序并不意味着系统正在执行没有什么。 Linux是一个多用户/多任务系统,后台有很多内务处理功能。
答案2
组播 IP 流量与普通单播或广播流量具有不同的规则。多播 IP 地址从不用作源地址:它始终只是目标地址。发送多播的系统将使用其常规 IP 地址作为源地址。每个组播IP地址都会指定一个组播组:发送到该多播地址的任何内容都将被属于该组的所有主机接收。 (或者这就是理论。在实践中,除非您做出了特定安排以将多播路由到您的子网或组织之外,否则默认情况下多播流量往往会在这些限制处停止。)
当主机中的某些软件想要收到多播流量时,它会告诉主机内核“我希望接收发送到该多播 IP 地址的多播”。然后,内核会将该多播 IP 地址添加到它将侦听的多播地址列表中,并发出 IGMP 报告消息:“我希望接收寻址到这些多播 IP 的多播流量:”。该 IGMP 报告本身就是多播 IP 消息。在 Linux 中,IGMP 在内核级别处理:这就是为什么您看不到负责它的进程。
支持组播的路由器还将定期(通常每 60 秒)发送 IGMP 查询消息,本质上是:“至此网段上的所有系统:如果您仍然对任何组播流量感兴趣,请立即报告。”这也是一条多播 IP 消息,发送到 224.0.0.1 = all-systems.mcast.net。这可能是您的路由器发送的内容。正如该地址的 DNS 名称所暗示的那样,所有具有多播功能的主机必须始终侦听寻址到 224.0.0.1 的多播流量。
具有多播功能的主机应该在两种情况下发送 IGMP 报告:
- 当它想要开始或停止侦听寻址到特定多播 IP 的流量时,或者
- 当它收到IGMP查询报文时。
通常主机的内核会自动处理这个问题。在 Linux 中,您可以使用它cat /proc/net/igmp
来查看系统当前在每个网络接口上侦听哪些多播 IP。不幸的是,多播 IP 以十六进制报告,并且字节顺序与通常的 IP 地址格式相反:例如,224.0.0.1 表示为“010000E0”; 224.0.0.251 是“FB0000E0”。
支持多播的路由器将向其所属的每个网段发送 IGMP 查询,并跟踪它作为响应获得的 IGMP 报告。这就是它如何知道到某个多播 IP 地址的多播流量是否需要从一个网段路由到另一个网段。
例外:如果在某个网段中进行 IGMP 查询时已经存在另一个源,并且该源的源 IP 地址低于该路由器,则该路由器将不会发送查询,而只会侦听。不过,它可能会尝试使用某种多播路由协议与其他 IGMP 查询源进行通信,以便协调路由器之间的多播流量。
如果支持多播的主机未回答三个连续的 IGMP 查询(即 180 秒),则路由器假定该主机不再对任何多播流量感兴趣。如果主机重新启动、断电或失去网络连接,这将清除任何不必要的多播流。
在简单的家庭 Wi-Fi 网络中,多播的实用性有限:Wi-Fi 网络中的任何主机组仍然会消耗每个人的共享无线电带宽,无论它们使用多播还是简单的广播。但在有线网络或网状 Wi-Fi 网络中,多播允许交换机和/或 AP 监视 IGMP 消息,从而了解是否需要将特定多播数据包发送到特定交换机端口或 Wi-Fi 单元或不是。这可以为那些对特定多播不感兴趣的用户节省带宽,但代价是交换机/AP 需要做更多工作。此功能称为“IGMP 监听”。