为什么 iftop 不显示来自多播 IP 的带宽,但 tcpdump 显示? ffmpeg 也无法从多播中捕获
Why does iftop show no bandwidth from a multicast IP but tcpdump does? ffmpeg also cannot capture from the multicast
我 运行 在尝试接收多播 IP(来自 239.193.140.11:1234 的视频)时遇到了一个令人费解的问题。
$tcpdump dst 239.193.140.11 -w capturedData.pcap
时,抓包正确。
例如,11:05:25.357138 IP 192.168.34.34.46192 > 239.193.140.11.1234:UDP,长度 1328
这意味着我的机器正在接收多播 IP 数据包。
然而,当 $iftop -i any
为 运行 时,iftop 不显示来自 239.193.140.11 的任何带宽。此外,当我尝试使用 ffmpeg 捕获多播数据包时:$ffmpeg -i udp://239.193.140.11:1234?localaddr=192.168.34.34
,没有捕获任何数据包。
为什么 tcpdump 和 iftop 显示的内容不一致,如何解决才能使 ffmpeg 正确捕获?
看起来反向路径过滤器 (rp_filter) 已启用,它正在拒绝数据包。
根据我在 PROD 环境中的经验,我可以说禁用 rp_filter 使我的 client/listener 应用程序能够接收数据包。使用以下命令禁用 rp_filter:
$echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
在上面,如果不是 eth0,则将 'eth0' 替换为接收多播的接口,或者编辑 rp_filter 文件并将值设置为“0”
我 运行 在尝试接收多播 IP(来自 239.193.140.11:1234 的视频)时遇到了一个令人费解的问题。
$tcpdump dst 239.193.140.11 -w capturedData.pcap
时,抓包正确。
例如,11:05:25.357138 IP 192.168.34.34.46192 > 239.193.140.11.1234:UDP,长度 1328
这意味着我的机器正在接收多播 IP 数据包。
然而,当 $iftop -i any
为 运行 时,iftop 不显示来自 239.193.140.11 的任何带宽。此外,当我尝试使用 ffmpeg 捕获多播数据包时:$ffmpeg -i udp://239.193.140.11:1234?localaddr=192.168.34.34
,没有捕获任何数据包。
为什么 tcpdump 和 iftop 显示的内容不一致,如何解决才能使 ffmpeg 正确捕获?
看起来反向路径过滤器 (rp_filter) 已启用,它正在拒绝数据包。 根据我在 PROD 环境中的经验,我可以说禁用 rp_filter 使我的 client/listener 应用程序能够接收数据包。使用以下命令禁用 rp_filter:
$echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
在上面,如果不是 eth0,则将 'eth0' 替换为接收多播的接口,或者编辑 rp_filter 文件并将值设置为“0”