linux網路的多播ip技術
一、配置linux支援多播ip
二、使用linux多播ip廣播資料
例如本地計算機的的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支援多播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 - an ip multicast server
*/#include
#include
#include
#include
#include #include
#include int port = 6789;
int main(void)
/* 初始化ip多播位址 */
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);
/* 開始進行ip多播 */
while(1)
sleep(2);
} exit(exit_success);}
2、建立linux客戶端的程式多播ip廣播
建立號廣播伺服器後,就需要乙個客戶端的收聽程式,收聽多播ip廣播要求在程式中作以下幾項工作:
(1)、多播方收聽,客戶端編寫通知linux核心每個指定的套介面加入多播ip廣播組。
(2)、收聽方必須執行在同乙個linux計算機的不同程序的同乙個套介面。
(3)、編寫配置丹江口設定廣播資訊可以傳送給同乙個linux主機,這樣作的用處是在同乙個linux主機上測試廣播程式和收聽程式,易於除錯。
客戶端程式**和解釋
/* * listen.c - an ip multicast client */
#include
#include
#include
#include
#include
#include
#include
char * host_name = "224.0.0.1";
/* 多播ip位址 */
int port = 6789;
int main(void)
/*bzero(&sin, sizeof(sin));*/
memset(&sin, 0, sizeof(sin));
sin.sin_family = af_inet;
sin.sin_addr.s_addr = htonl(inaddr_any);
sin.sin_port = htons(port);
if((socket_descriptor = socket(pf_inet, sock_dgram, 0)) == -1)
/* 呼叫bind之前,設定套介面選項啟用多播ip支援*/
loop = 1;
if(setsockopt(socket_descriptor,
sol_socket, so_reuseaddr,
&loop, sizeof(loop)) < 0)
if(bind(socket_descriptor,
(struct sockaddr *)&sin, sizeof(sin)) < 0)
/* 在同乙個主機上進行廣播設定套介面,
作用是方便單個開發系統上測試多播ip廣播 */
loop = 1;
if(setsockopt(socket_descriptor,
ipproto_ip, ip_multicast_loop,
&loop, sizeof(loop)) < 0)
/* 加入乙個廣播組。進一步告訴linux核心,
特定的套介面即將接受廣播資料*/
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(socket_descriptor, ipproto_ip, ip_add_membership,
&command, sizeof(command)) < 0)
while(iter++ < 8)
printf("response #%-2d from server: %s/n", iter, message);
sleep(2); }
/* 接受8個廣播後退出 */
if(setsockopt(socket_descriptor, ipproto_ip, ip_drop_membership,
&command, sizeof(command)) < 0)
close(socket_descriptor);
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、總結
應用:http://www.gbunix.com/htmldata/2005_05/1/3/article_1201_1.html
Linux網路的多播IP技術
linux網路的多播ip技術 一 配置linux支援多播ip 二 使用linux多播ip廣播資料 例如本地計算機的的ip位址是 127.0.0.1二它的多播位址是 224.0.0.1。這是由rcf 1390定義的。為傳送ip多播資料,傳送者需要確定乙個合適的多播位址,這個位址代表乙個組。ipv4多播...
IP多播技術學習
ip多播技術實現的聊天系統 多播通訊使用的是d類ip位址,這些位址並不和任何主機關聯,而是專門為多播通訊保留下來的,其位址範圍為224.0.0.1 239.255.255.255,除了224.0.0.1 224.0.0.255是留作為多播路由器使用的外,剩下的位址都可以用來進行群組通訊。乙個通訊組的...
linux下多播技術的使用
例如本地計算機的的ip位址是 127.0.0.1二它的多播位址是 224.0.0.1。這是由rcf 1390定義的。為傳送ip多播資料,傳送者需要確定乙個合適的多播位址,這個位址代表乙個組。ipv4多播位址採用d類ip位址確定多播的組。在 internet中,多播位址範圍是從224.0.0.0到23...