动态网站制作指南
[  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 操作系统 > Linux教程
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Linux教程 ]的信息

本月文章推荐
.Linux 指令篇:文件打印--lprm.
.Linux SUSE系统下安装Enlightenm.
.新手学堂:Linux操作系统下如何添.
.在Linux操作系统中使用手写板.
.Novell公布SUSE Linux Server11四.
.教你如何在Linux操作系统下观看电.
.在Linux系统下Mldonkey的配置和使.
.Linux 指令篇:档案目录管理--find.
.简析Linux中如何改变文件或目录的.
.关于Linux操作系统下内存泄漏的检.
.RPM 的使用.
.菜鸟乐园:Linux系统Shell入门命.
.Linux操作系统下目录创建与删除常.
.Linux操作系统下自带BIND的使用注.
.Linux 指令篇:档案目录管理--mkd.
.Linux系统中如何正确安装摄像头驱.
.Linux X-Window配置指南.
.Linux 指令篇:讯息传送与信件管理.
.RedHat源码升级-(OpenSSL + Ope.
.用Linux防火墙伪装抵挡黑客恶意攻.

剖析Linux操作系统的网络多播IP技术

文章类别:Linux教程 | 发表日期:2006-10-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, 
SOL_SOCKET, SO_REUSEADDR,
 &loop, sizeof(loop)) < 0)

 perror("setsockopt:SO_REUSEADDR");
 exit(EXIT_FAILURE);
  }
if(bind(socket_descriptor, 
(struct sockaddr *)&sin, sizeof(sin)) < 0)
 {
   perror("bind"); 
   exit(EXIT_FAILURE);
    }
/* 在同一个主机上进行广播设置套接口,
作用是方便单个开发系统上测试多播IP广播 */ 
loop = 1; 
if(setsockopt(socket_descriptor, 
IPPROTO_IP, IP_MULTICAST_LOOP, 
  &loop, sizeof(loop)) < 0) 
{   
 perror("setsockopt:IP_MULTICAST_LOOP");
 exit(EXIT_FAILURE); 
   } 
 /* 加入一个广播组。进一步告诉Linux内核,
特定的套接口即将接受广播数据*/ 
 command.imr_multiaddr.s_addr = inet_addr("224.0.0.1"); 
 command.imr_interface.s_addr = htonl(INADDR_ANY);
 if(command.imr_multiaddr.s_addr == -1) 
{  
 perror("224.0.0.1 not a legal multicast address"); 
 exit(EXIT_FAILURE); 
}
if (setsockopt(socket_descriptor, IPPROTO_IP, IP_ADD_MEMBERSHIP, 
  &command, sizeof(command)) < 0)
 {   
  perror("setsockopt:IP_ADD_MEMBERSHIP");
    } 
 while(iter++ < 8) 
{    
  sin_len = sizeof(sin); 
  if(recvfrom(socket_descriptor, message, 256, 0,
  (struct sockaddr *)&sin, &sin_len) == -1) { 
   perror("recvfrom");   
    }  
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) { 
     perror("setsockopt:IP_DROP_MEMBERSHIP"); 
   }   
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是一种同时向价格进程高效的发送信息的介绍。多播传输中,数据被发送到接收者的多播地址,而不是每个接收者的单播地址,发送者只发送一个数据拷贝,源端到目标端路径上的中间节点复制该数据。现在多播IP已经广泛应用于网络游戏、视频广播的领域。


上一篇:通过Linux系统引导CD排除服务器故障 人气:3550
下一篇:Linux下一种ELF文件代码签名验证机制 人气:3521
点击此处浏览全部Linux的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-5-16 乘风多用户PHP统计系统 v3.4
2008-5-16 轩溪下载系统 v3.78 build 0515
2008-5-16 普沙B2B 浙江省商贸网 v2.0
2008-5-16 asp抓蜘蛛的小程序 v1.0
2008-5-16 齐齐乐网私服发布站 仿haosf新版
2008-5-16 IssTech信息反馈系统 v1.0
2008-5-16 自由领域大头贴(js接口版) 修正版
2008-5-16 医院网站系统
2008-5-16 智拓-分类信息管理系统 v5.0
2008-5-7 Windows XP SP3 官方英文版
2008-5-7 Windows XP SP3 官方香港中文版
2008-5-7 Windows XP SP3 官方繁体中文版
2008-5-7 Windows XP SP3 官方简体中文版
2008-4-30 Multiple Unzip Wizard 1.02
2008-4-30 Multiple Unrar Wizard 1.0.0
2008-4-30 WinZip Install/Try/Uninstall a
2008-4-30 ZIP压缩文件修复器WzipFix 2.0
2008-4-30 Pentazip 6.01 Build 189 For Wi
  发表评论
姓 名: 验证码: [ 全部贴吧 ] [ 浏览评论 ]
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報