例如本地計算機的的ip位址是:127.0.0.1二它的多播位址是: 224.0.0.1。這是由rcf 1390定義的。為傳送ip多播資料,傳送者需要確定乙個合適的多播位址,這個位址代表乙個組。ipv4多播位址採用d類ip位址確定多播的組。在 internet中,多播位址範圍是從224.0.0.0到234.255.255.255。其中比較重要的位址有:
224.0.0.1 - 網段中所有支援多播的主機
224.0.0.2 - 網段中所有支援多播的路由器
224.0.0.4 - 網段中所有的dvmrp路由器
224.0.0.5 - 所有的ospf路由器
224.0.0.6 - 所有的ospf指派路由器
224.0.0.9 - 所有ripv2路由器
ipv6位址空間中有1/256的位址空間分配給多播位址。乙個ff(11111111)值標識該位址是多播位址。標識段高三位始終設定為0並 保留。第四位t標識設定為0時表示乙個永久分配的多播位址。t標識設定為1時,表示非永久分配的多播位址,這種位址作為乙個臨時的多播位址。
注: 在linux下除錯時可能需要用root使用者登入.
一、配置linux支援多播ip
在預設狀態下,大多linux發行版本關閉的對多播ip的支援。為了在linux系統使用多播套介面,需要從新配置和編譯linux核心。下面看一下配置步驟:
1.cd /usr/src/linux
2.make menuconfig
3.選擇網路選項
4.選中ip:enable multicasting ip一項
5.儲存並從menuconfig 退出
6.執行:make dep;make clean;make bzlmage
7.cp/vmlinuz/vdimlz_good
8.cparch/i386/boot/zimage/vmlinzz
9.cd/etc
10.編輯lilo.conf,加入針對/vmlinuz_good的核心新選項
11.執行li1o
linux核心編譯後,以超級使用者身份執行命令: #router add –net 224.0.0.0 netmask 224.0.0.0 dev lo
核實命令是否加入系統,執行命令:
#route –ekernel ip routing table
destination gatewary genmask flags mss window irtt iface
10.0.0.0 * 255.255.255.0 u 0 0 0 eth0
127.0.0.0 * 255.0.0.0 u 0 0 0 lo
base_address>mc * 240.0.0.0 u 0 0 0 lo
default 10.0.0.1 0.0.0.0 ug 0 0 0 eth0
二、使用linux多播ip廣播資料
1、首先在伺服器端建立多播程式:
伺服器端程式**和解釋:broadcast.c
#include
#include
#include
#include
#include
#include
#include
int port = 6789;
int main(int argc, char **argv)
memset(&address, 0, sizeof(address));
address.sin_family = af_inet;
address.sin_addr.s_addr = inet_addr("224.0.0.1");
address.sin_port = htons(port);
//starting mcast transmit...
while(1)
sleep(2);
}exit(exit_success);
}2、建立linux客戶端的程式多播ip廣播
建立好廣播伺服器後,就需要乙個客戶端的收聽程式,收聽多播ip廣播要求在程式中作以下幾項工作:
(1)、多播方收聽,客戶端編寫通知linux核心每個指定的套介面加入多播ip廣播組。
(2)、收聽方必須執行在同乙個linux計算機的不同程序的同乙個套介面。
(3)、編寫配置埠設定廣播資訊可以傳送給同乙個linux主機,這樣作的用處是在同乙個linux主機上測試廣播程式和收聽程式,易於除錯。
客戶端程式**和解釋:
#include
#include
#include
#include
#include
#include
#include
char *host_name = "224.0.0.1";
int port = 6789;
int main(int argc, char **argv)
socketfd = socket(af_inet, sock_dgram, 0);
if (-1 == socketfd)
memset(&sin, 0, sizeof(sin));
sin.sin_family = af_inet;
sin.sin_addr.s_addr = htonl(inaddr_any);
sin.sin_port = htons(port);
loop = 1;
if (setsockopt(socketfd, sol_socket, so_reuseaddr, &loop, sizeof(loop)) < 0)
if (bind(socketfd, (struct sockaddr *)&sin, sizeof(sin)) < 0)
loop = 1;
if (setsockopt(socketfd, ipproto_ip, ip_multicast_loop, &loop, sizeof(loop)) < 0)
command.imr_multiaddr.s_addr = inet_addr("224.0.0.1");
command.imr_inte***ce.s_addr = htonl(inaddr_any);
if (command.imr_multiaddr.s_addr == -1)
if (setsockopt(socketfd, ipproto_ip, ip_add_membership, &command, sizeof(command)) < 0)
while(iter < 8)
printf("response #%-2d from server: %s\n", iter++, message);
sleep(2);
}if (setsockopt(socketfd, ipproto_ip, ip_drop_membership, &command, sizeof(command)) < 0)
close(socketfd);
exit(exit_success);
}3、執行linux多播ip程式
執行程式,開啟兩個終端視窗並在每個視窗中輸入以上的源**。在乙個視窗中鍵入make,編譯 broadcast和1isten這兩個的可執行檔案,由gun make建立乙個makfiles檔案。gun make是linux系統中乙個自動生成和維護目標程式的工具。
在乙個視窗中通過執行./broadcast,在另乙個的視窗執行./listen,啟動收聽程式,你應該看到如下輸出:
#./listenresponse #1 form sever :test from broadcast
response #2 form sever :test from broadcast
response #3 form sever :test from broadcast
response #4 form sever :test from broadcast
response #5 form sever :test from broadcast
response #6 form sever :test from broadcast
response #7 form sever :test from broadcast
response #8 form sever :test from broadcast
# 4、總結
linux下的多播
進行linux下的多播程式設計時,需要關閉防火牆,關閉防火牆的方法如下 1 重啟後生效 開啟 chkconfig iptables on 關閉 chkconfig iptables off 2 即時生效,重啟後失效 開啟 service iptables start 關閉 service iptab...
Linux網路的多播IP技術
linux網路的多播ip技術 一 配置linux支援多播ip 二 使用linux多播ip廣播資料 例如本地計算機的的ip位址是 127.0.0.1二它的多播位址是 224.0.0.1。這是由rcf 1390定義的。為傳送ip多播資料,傳送者需要確定乙個合適的多播位址,這個位址代表乙個組。ipv4多播...
Linux網路的多播IP技術
linux網路的多播ip技術 一 配置linux支援多播ip 二 使用linux多播ip廣播資料 例如本地計算機的的ip位址是 127.0.0.1二它的多播位址是 224.0.0.1。這是由rcf 1390定義的。為傳送ip多播資料,傳送者需要確定乙個合適的多播位址,這個位址代表乙個組。ipv4多播...