Linux網路的多播IP技術

2021-04-13 06:37:11 字數 4869 閱讀 3381

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、總結

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...