linux下多播技術的使用

2021-06-28 06:17:34 字數 4102 閱讀 1340

例如本地計算機的的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多播...