荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: everlove.bbs@bbs.shuoshuo.net (我是如此厌倦), 信区: Linux
标  题: unp第十九章学习体会
发信站: 寂寞森林 (Mon Sep 23 10:52:13 2002)
转信站: SZUBBS!news2.happynet.org!news.happynet.org!LonelyWood


发信人: clown (梧桐叶), 信区: UNP
标  题: unp第十九章学习体会
发信站: UNIX编程 (2001年10月09日16:17:46 星期二), 站内信件

本章介绍的是多播,下面主要介绍在TCP/IP协议栈中是如何处理多播的。

多播主要是为了克服广播的缺点,特别是一些多媒体应用给不需要的主机带
来的处理负担。另外广播只能在一个局域网内,而多播可以跨越Internet。

在IPv4中,专门有一个D类地址(224.0.0.0--239.255255.255)用于多播,其
中有一些D类地址已经用于固定的用途。例如224.0.0.0--224.0.0.255只能
在局域网内传播,不能出现在Internet上。

1 数据链路层多播接收过程
有一个IP到MAC地址的映射关系(多对一),而且多播MAC地址的前3个字节
已经固定,格式为01:00:5e:##:##:##,这样网卡就能识别出一个多播地址。
对于广播,是多播的一个特例(单播也可以说是一个特例),其MAC地址为
ff:ff:ff:ff:ff:ff。

下面是接收者的数据链路处理过程:1)目的mac地址是否为本接口地址?
2)目的mac地址是不是广播地址?3)目的mac地址是不是上层已经通知的
多播地址?
如果符合以上一条,则会接受该数据报,否则丢弃。

对于发送多播的主机来说,发送的数据报是1到多,但是返回的应答数据报
是1对1的,应为返回的数据报的源地址和目的地址都已经确定。

如果一个多播数据报要跨越局域网,那么由路由器进行转发,对用户是透明的。

2 多播的发送和接收
在继续介绍之前,先介绍一个概念:多播组。
对于一个多播地址,例如224.0.1.1,所有希望接收目的ip为该多播地址的主机
都应该在自己网卡中设置为接收相应的多播mac地址,这样所有接收该多播地址的
主机就组成了一个组,称为224.0.1.1多播组。主机的这一设置过程称为加入多
播组,在socket中通过setsockopt函数中的IP_ADD_MEMBERSHIP来进行。

对于socket编程,发送多播与发送udp数据报完全相同,不需要做任何特殊的处理,
也不需要加入多播组,唯一不同的是目的ip是一个多播ip地址。

接收方与接收普通的udp数据报相比,也没有很大的区别,只需要使用setsockopt
加入到一个多播组就可以了。


3 多播在TCP/IP协议栈的处理

对于数据链路层传递上来的数据数据报,首先是IP层进行处理,它比较数据报的
目的ip是否是本机中的应用程序已经加入的多播组,如果是就向udp层传递,否则就
丢弃。然后udp层比较数据报的目的端口,是否是本机已经绑定的端口,如果是就
将数据传递给应用进程。

由此可知,多播所使用的端口和普通udp套接口所使用的端口完全相同,属于同一个
资源,因此要注意端口冲突。

对于这种情况,我曾经作过测试:客户端bind端口8001(使用了SO_REUSEADDR选项),

发送多播到多播服务器。同时在该主机上打开一个udp服务器,bind的端口同样是
8001(使用了SO_REUSEADDR选项),当多播服务器的应答数据返回时,结果该数据
被udp服务器,而不是多播客户端得到。

4 关于SO_REUSEADDR

以前已经讨论过该选项,但是现在有了更深的体会。:)

对于UDP套接口,如果使用了该选项,那么就允许完全重复的绑定(TCP不允许),
也就是不同的套接口所绑定的ip地址和端口完全相同。而且这些套接口可以在
不同的进程中。对于完全重复的套接口,当数据到达时,如果该数据报的目的
地址是广播或者多播,那么每个套接口都会收到一份数据的拷贝,如果该数据
报的目的地址是单播地址,那么只有一个套接口收到该数据报。

下面有一个测试多播发送接收的例子。
注意: 多播客户端和服务器端不能在同一台机器上.

--
易朽的是生命,似那转瞬即谢的花朵;然而永存的,是对未来的渴望,
是那生生世世传递下来的,不朽的,生的激情。每一朵勇敢开放的花,
都是一个死亡唇边的微笑。
※ 修改:·clown 於 10月09日17:59:27 修改本文·[FROM: 211.69.205.23]
※ 来源:·UNIX编程 www.tiaozhan.com/unixbbs/·[FROM: 211.69.205.23]


--
我站在夜的尽头
窗外的雨悄悄坠落





※ 来源:.寂寞森林 http://bbs.shuoshuo.net  ◆ FROM: 211.161.158.231


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店