当前位置: 首页 > article >正文

linux网络编程4

24.9.20学习目录

  • 一.UDP(续)
    • 1.广播
      • 广播流程
    • 2.多播
      • 多播流程

一.UDP(续)

1.广播

由一台主机向该主机所在子网内的所有主机发送数据的方式;
广播只能用UDP或原始IP实现,不能使用TCP;
其作用是将单个服务器与多个客户主机通信时减少分组流通;

用到广播的协议如下:

  • 地址解析协议(ARP)
  • 动态主机配置协议(DHCP)
  • 网络时间协议(NTP)

特点:

  • 处于同一子网的所有主机都必须处理数据
  • UDP数据包会沿协议栈向上一直到UDP层
  • 运行音频等高速率工作的应用,会带来较大的负担
  • 局限于局域网内使用
  • 当数据传入到链路层时不会进行阻拦,只到传输到网络层时,查看当前端口是否在进行,如果没有则舍弃
  • 在IPv6中是不可以选的,IPv4可以选用

广播流程

发送者:

  1. 创建套接字
  2. 设置为允许发送广播权限setsockopt()
  3. 向广播地址发送数据sendto()
//设置套接字的属性
int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t optlen);

level:SOL_SOCKET(套接字层次)
optname:SO_BROADCAST(允许发送广播数据包)、SO_RCVBUF(接收缓冲区大小)、SO_SNDBUF(发送缓冲区大小)

接收者:

  1. 创建套接字
  2. 将套接字与广播的信息结构体绑定
  3. 接收数据recvfrom()

2.多播

数据的收发仅仅在同一分组中运行;
其又称为组播;
在IPv4中其地址为D类地址

特点:

  • 多播地址标示一组接口
  • 多播可以用于广域网使用
  • 在IPv4中多播是可选的
  • 相对于广播,多播具有可控性

多播使用的结构体:

struct in_addr
{
	in_addr_t s_addr;
};

struct ip_mreq
{
	struct in_addr imr_multiaddr;//多播组IP
	struct in_addr imr_interface;//将要添加到多播组的IP
};

多播流程

发送者:

  1. 创建套接字
  2. 发送数据

接收者:

  1. 创建套接字
  2. 设置加入多播组setsocketopt()
  3. 套接字的绑定
  4. 接收数据
int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t optlen);

level:IPPROTO_IP
optname:IP_ADD_MEMBERSHIP(加入多播组)、IP_DROP_MEMBERSHIP(离开多播组)
optval:多播的结构体


http://www.kler.cn/a/312793.html

相关文章:

  • yolov7论文翻译
  • HTML(超文本标记语言)
  • 数据分析那些事儿——时间片轮转实验
  • python识别ocr 图片和pdf文件
  • Select,poll,epoll和IO多路复用和NIO
  • 数据库MySQL索引详解
  • 定义可引用的 CI/CD 配置文件中的输入参数
  • 【笔记】自动驾驶预测与决策规划_Part3_路径与轨迹规划
  • 中国IT产业新挑战与机遇共存
  • 【使用Hey对vllm接口压测】模型并发能力
  • ATE自动化测试系统集成:软件与硬件的技术结合
  • 迭代器和生成器的学习笔记
  • JVM 运行时数据区详解(下)
  • Windows通过网线传文件
  • Spring Boot整合MyBatis Plus详解
  • 二级C语言2023-9易错题
  • 反游戏学(Reludology):概念、历史、现状与展望?(豆包AI版)
  • mac 怎么查看CPU核数
  • 通过UV快速计算品牌独立站网络流量
  • 【算法】BFS 系列之 多源 BFS
  • Unity之FPS
  • 谷粒商城のElasticsearch
  • 优先级队列(堆)
  • 行业分析---自动驾驶行业的发展
  • MySQL定长窗口SQL
  • Spring为什么要用三级缓存解决循环依赖?