剖析Linux操作系统的网络多播IP技术
2008-02-23 07:26:31来源:互联网 阅读 ()
摘要
多播广播是用于建立分步式系统:例如网络游戏、ICQ聊天构建、远程视频会议系统的重要工具。使用多播广播的程序和UDP向单个介绍方发送信息的程序相似。区别在于多播广播程序使用特殊的多播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
其中出现多播地址: 224.0.0.1。就表示配置成功了。
二、使用Linux多播IP广播数据
1、首先在服务器端建立多播程序:
服务器端程序代码和解释:
/* * broadcast.c - An IP multicast server */
#include
#include
#include
#include
#include #include
#include int port = 6789;
int main(void)
{
int socket_descriptor;
struct sockaddr_in address;
/* 首先建立套接口 */
socket_descriptor = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_descriptor == -1)
{
perror("Opening socket");
exit(EXIT_FAILURE);
}
/* 初始化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) {
if(sendto(socket_descriptor, "test from broadcast",
sizeof("test from broadcast"), 0,
(struct sockaddr *)&address, sizeof(address)) < 0)
{
perror("sendto");
exit(EXIT_FAILURE);
}
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)
{
struct ip_mreq command;
int loop = 1;
/* 多播循环 */
int iter = 0;
int sin_len;
char message[256];
int socket_descriptor;
struct sockaddr_in sin;
struct hostent *server_host_name;
if((server_host_name = gethostbyname(host_name)) == 0)
{
perror("gethostbyname");
exit(EXIT_FAILURE);
}
/*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)
{ perror("socket");
exit(EXIT_FAILURE);
}
/* 调用bind之前,设置套接口选项启用多播IP支持*/
loop = 1;
if(setsockopt(socket_descriptor,
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash