UDP广播
1、UDP广播
1.1、广播的概念
广播:由一台主机向该主机所在子网内的所有主机发送数据的方式
例如 :192.168.3.103主机发送广播信息,则192.168.3.1~192.168.3.254所有主机都可以接收到数据
广播只能用UDP或原始IP实现,不能用TCP
1.2、广播的用途
单个服务器与多个客户主机通信时减少分组流通 以下几个协议都用到广播
1、地址解析协议(ARP)
2、动态主机配置协议(DHCP)
3、网络时间协议(NTP)
1.3、广播的特点
- 同一子网内的所有主机都必须处理接收到的数据。这意味着当一台主机发送广播信息时,子网内的所有其他主机都将接收并处理该数据,无论它们是否需要该信息。
- 由于广播只能通过UDP或原始IP实现,因此UDP数据包会沿着协议栈向上传输,直到到达UDP层。这与TCP不同,TCP数据包在传输过程中会经过更多的协议层处理。
- 运行音频、视频等高速率应用时,广播通信可能会带来较大的负载。这是因为所有主机都必须处理接收到的数据,即使它们并不需要这些数据。这可能会导致网络拥塞和性能下降。
- 广播通信通常局限于局域网(LAN)内使用。这是因为广播信息会被发送到子网内的所有主机,而不同子网之间的通信通常需要使用其他网络协议,如单播或多播。
1.4、广播地址
{网络ID,主机ID}
网络ID表示由子网掩码中1覆盖的连续位
主机ID表示由子网掩码中0覆盖的连续位
定向广播地址:主机ID全1
1、例:对于192.168.220.0/24,其定向广播地址为192.168.220.255 2、通常路由器不转发该广播
受限广播地址:255.255.255.255
路由器从不转发该广播
2 、广播与单播的对比
单播
广播
3 、广播流程
- 创建套接字:使用socket()函数创建一个数据报套接字(SOCK_DGRAM),以支持UDP通信。
- 设置广播权限:使用setsockopt()函数将套接字设置为允许发送广播数据。这通常需要设置SO_BROADCAST选项。
- 发送数据:使用sendto()函数向广播地址发送数据。广播地址是一个特殊的IP地址,用于表示子网内的所有主机。例如,在IPv4中,广播地址通常表示为子网掩码全1的形式。
接收广播数据的步骤如下:
- 创建套接字:与发送者一样,使用socket()函数创建一个数据报套接字(SOCK_DGRAM)。
- 绑定套接字:使用bind()函数将套接字与一个本地地址和端口号绑定。这将使套接字能够接收发送到该地址和端口的数据。
- 接收数据:使用recvfrom()函数接收发送到绑定地址和端口的数据。该函数将返回发送者的信息,包括其IP地址和端口号。
4、套接字选项
#include
int setsockopt(int socket, int level, int option_name,
const void *option_value, socklen_t option_len);
功能:设置一个套接字的选项(属性)
参数:
socket:文件描述符
level:协议层次
SOL_SOCKET 套接字层次
IPPROTO_TCP tcp层次
IPPROTO_IP IP层次
option_name:选项的名称
SO_BROADCAST 允许发送广播数据(SOL_SOCKET层次的)
option_value:设置的选项的值
int类型的值,存储的是bool的数据(1和0)
0 不允许
1 允许
option_len:option_value的长度
返回值:
成功:0
失败:-1
5、广播示例
5.1 发送者
//广播发送者代码实现
#include //printf
#include //exit
#include
#include //socket
#include //sockaddr_in
#include //htons inet_addr
#include //close
#include
int main(int argc, char const *argv[])
{
if(argc
5.2 接收者
#include //printf
#include //exit
#include
#include //socket
#include //sockaddr_in
#include //htons inet_addr
#include //close
#include
int main(int argc, char const *argv[])
{
if(argc
执行结果
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!



