如何更好地理解“广播”
0. 定义
广播(Broadcast):
广播是指在IP子网内广播数据包,所有在子网内部的主机都将收到这些数据包。
广播意味着网络向子网每一个主机都投递一份数据包,不论这些主机是否乐于接收该数据包。所以广播的使用范围非常小,
只在本地子网内有效,通过路由器和交换机网络设备控制广播传输。
“广播”可以理解为一个人通过广播喇叭对在场的全体说话,这样做的好处是通话效率高,信息一下子就可以传递到全体。
1.特点
广播的优点:
1)网络设备简单,维护简单,布网成本低廉2)由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。
广播的缺点:
1)无法针对每个客户的要求和时间及时提供个性化服务。
2)网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。
3)广播禁止允许在Internet宽带网上传输。
与单播、多播的区别:
单播(Unicast):
定义:
单播在发送者和每一接收者之间实现点对点网络连接。
如果一台发送者同时给多个的接收者传输相同的数据,也必须相应的复制多份的相同数据包。
如果有大量主机希望获得数据包的同一份拷贝时, 将导致发送者负担沉重、延迟长、网络拥塞;
为保证一定的服务质量需增加硬件和带宽。
“单播”可以理解为一个人对另外一个人说话,此时信息的接收和传递只在两个节点之间进行。
特点:
单播的优点:
1)服务器及时响应客户机的请求
2)服务器针对每个客户不通的请求发送不通的数据,容易实现个性化服务。
单播的缺点:
1)服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。
2)现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞。而将主干扩展20倍几乎是不可能。
组播(Multicast):
定义:
组播在发送者和每一接收者之间实现点对多点网络连接。
如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包。
它提高了数据传送效率。减少了骨干网络出现拥塞的可能性。
“多播”可以理解为一个人向多个人(但不是在场的所有人)说话,这样能够提高通话的效率。
特点:
优点:
1)需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。具备广播所具备的优点。
2)由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP协议允许有2亿6千多万个组播,所以其提供的服务可以非常丰富。
3)此协议和单播协议一样允许在Internet宽带网上传输。
缺点:
1)与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。
2)现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。
单播可以看作仅包括一台机器群组的组播;
广播可以看作包含了所有机器群组的组播。
组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景。
----------------------------UDP中的广播----------------------------------------
#coding=utf-8
import socket, sys
dest = ('<broadcast>', 7788) #此处若使用192.168.1.255 ///为啥不用这个固定IP?因为用这个IP的话,前提是你自己的进程也要在这个网段里面,否则,就用不了。一般用broadcast。
# 创建udp套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 对这个需要发送广播数据的套接字进行修改设置,否则不能发送广播数据
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)#如果s套接字需要发送广播数据,那么可以加上这段代码
# 以广播的形式发送数据到本网络的所有电脑中
s.sendto("Hi", dest)#192.168.1.0 网络号 0->0000 0000 / 192.168.1.255 广播地址 255->1111 1111
print "等待对方回复(按ctrl+c退出)"
while True:
(buf, address) = s.recvfrom(2048)
print "Received from %s: %s" % (address, buf)