Linux

我應該在 RHEL/CentOS 上為盲發者創建多播路由嗎?

  • April 5, 2013

CentOS 5 系統似乎沒有開箱即用的多播流量路由。它看起來確實是使用預設路由(如果已配置)。換句話說,這樣的路由表:

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.42.128.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         10.42.128.1     0.0.0.0         UG        0 0          0 eth0

將與我的基於 Java 的多播客戶端應用程序(或下面的測試案例)一起使用,它希望能夠發送到站點本地多播地址。

此設置有效。如果我沒有預設路由,例如

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.42.128.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

我的 Java 應用程序在嘗試發送時會失敗。我可以通過添加多播路由來糾正這個問題:

# route add -net 224.0.0.0/4 via eth0

並永久執行上述操作:

# echo 224.0.0.0/4 via eth0 >>/etc/sysconfig/network-scripts/route-eth0

無論如何我應該創建這條路線嗎?讓預設路由處理多播流量有什麼害處,除瞭如果預設路由消失它會停止工作的事實嗎?


這是一個簡短的測試案例,可以通過執行javac Sender.java; java Sender. 它向站點本地地址 239.192.0.1 發送一個 0 字節的 UDP 數據包。如果我沒有預設路由,它將失敗

Exception in thread "main" java.io.IOException: Network is unreachable
       at java.net.PlainDatagramSocketImpl.send(Native Method)
       at java.net.DatagramSocket.send(DatagramSocket.java:629)
       at Sender.main(MulticastSender.java:7)

但是,如果存在預設路由(或我上面提到的多播路由),它將成功地將數據包發送到 239.192.0.1。

Sender.java

import java.net.*;

class Sender {
   public static void main(String[] args) throws Throwable {
       MulticastSocket socket = new MulticastSocket();
       InetAddress groupAddress = InetAddress.getByName("239.192.0.1");
       socket.send(new DatagramPacket(new byte[0], 0, groupAddress, 9999));
   }
}

您應該只需要在您的主機中添加一個路由是多宿主的。

看:

http://sourceforge.net/apps/trac/ganglia/wiki/Ganglia%203.1.x%20Installation%20and%20Configuration

否則,預設路由會做正確的事情。

您通常不希望使用多播路由。不需要。

顯示什麼netstat -gn?預設情況下,連接應該從編號最小的介面eth0出去。

請參閱我在以下位置記錄的步驟:多播似乎不適用於 RHEL 5.5

引用自:https://serverfault.com/questions/495180