Unix网络编程之广播(一)

时间:2022-10-03 05:28:58

        之前编的都是TCP程序,而TCP程序仅支持单播。单播的定义:一个进程与另一个进程通信。强调的是一对一。虽然之前不知道广播和多播是什么东东,但没吃过猪肉,却见过猪跑,对于广播和多播确是早有耳闻。计划广播写两篇文章,第一篇介绍一些广播的概念,从而宏观上把握广播。第二篇会涉及到一些有关广播细节的东西,那个时候会有代码的具体描述和实现。
 

一/   (TCP,UDP),(IPV4,IPV6)与广播

           
            正如摘要中所提到的那样,TCP仅支持单播,而UDP则可以支持单播,多播,广播甚至尚未成熟的任播。这也说明了,可能TCP更安全,但适用范围领域却不如UDP.
            IPV4是单播,多播,广播都支持,而IPV6则取消了广播,这可能是由于广播本身所带有的缺陷导致其被淘汰,至于其缺陷到底是什么,后面会有说明。

二/  广播的用途

         
          举例:1/ARP(Address Resolution Protocol,地址解析协议)
                    2/DHCP(Dynamic Host Configration Protocol,动态主机配置协议)
                    3/NTP(Network Time Protocol,网络时间协议)
                    4/路由守护进程

三/   广播地址

         
          一个IPv4地址可以表示为{子网ID(24位),主机ID(8位)},共32位,也即,我们日程生活电脑网络配置中比如:192.168.1.31,前24位192.168.1代表的是子网,后8位31代表的是我们的电脑ID。广播地址是固定的,有两种,一种叫做“子网定向广播地址”{子网ID,-1},其中-1也就是255的意思。另一种叫做受限广播地址{-1,-1},也即255,255,255,255。

四/  单播与广播的比较

            向一个单播地址发送一个数据报时,它会对它进行层层加头,首先UDP层给它加一个UDP首部,IP层给他加一个IPV4首部,数据链路曾会通过ARP将目的IP地址转换一个以太网地址。比如说:00:0a:95:79:bc:b4。目的主机在接受数据包的时候则是从下到上先要过数据链路层这一关,检查数据包所携带的目的以太网地址是否与你的以太网地址相同,这一地址对于每一个主机来说是不同的,所以不是目的主机,在第一关数据链路曾就通不过,只有唯一一个以太网地址为00:0a:95:79:bc:b4才是目的主机。所以是一对一。
            而对于多播地址来说,会将以太网地址映射为:ff:ff:ff:ff:ff:ff,这个地址会使得该子网上的所有主机的以太网接口都会接受该帧。这样做就可以一对多,但问题在于数据包在通过了数据链路层之后,往往到最后发现在UDP层或者IP曾通不过,这个时候就会出现在数据链路层完全接受了数据帧,但最后却不得不丢弃它,效率低下。