组播发送过程
IP 多点广播允许应用程序发送网络中的一组主机可以接收到的单个 IP 数据报。该组中的主机可能驻留在单个子网中,也可能驻留在连接可使用多点广播的路由器的不同子网中。主机可以随时加入或离开组。对主机组中的成员位置或数目没有任何限制。范围在 224.0.0.1 到 239.255.255.255 之间的 D 类因特网地址标识主机组。
应用程序可使用 socket() API 和无连接的 SOCK_DGRAM 类型套接字发送或接收多点广播数据报。多点广播是一种一对多的传送方法。不能使用类型为 SOCK_STREAM 的面向连接的套接字进行多点广播。在创建类型为 SOCK_DGRAM 的套接字后,应用程序可使用 setsockopt() 函数来控制与该套接字相关联的多点广播特征。setsockopt() 函数接受下列 IPPROTO_IP 级别标志:
- IP_ADD_MEMBERSHIP:加入指定的多点广播组。
- IP_DROP_MEMBERSHIP:离开指定的多点广播组。
- IP_MULTICAST_IF:设置通过其发送出局多点广播数据报的接口。
- IP_MULTICAST_TTL:在 IP 头中设置出局多点广播数据报的“有效时间”(TTL)。
- IP_MULTICAST_LOOP:指定当发送主机是多点广播组的成员时,是否将出局多点广播数据报的副本传送至发送主机。
套接字事件流:发送多点广播数据报
以下套接字调用序列提供图形的描述。它还描述发送和接收多点广播数据报的两个应用程序之间的关系。每一组流包含指向有关特定 API 的使用注意事项的链接。如果需要有关使用特定 API 的更多详细信息,可使用这些链接。发送多点广播数据报使用以下函数调用序列:
- socket() 函数返回表示端点的套接字描述符。该语句还标识将对此套接字使用带有 TCP 传输(SOCK_DGRAM)的 INET(网际协议)地址系列。此套接字会将数据报发送至另一应用程序。
- sockaddr_in 结构指定目标 IP 地址和端口号。在此示例中,地址为 225.1.1.1,而端口号为 5555。
- setsockopt() 函数设置 IP_MULTICAST_LOOP 套接字选项,所以发送系统不会接收它传送的多点广播数据报的副本。
- setsockopt() 函数使用 IP_MULTICAST_IF 套接字选项,它定义通过其发送多点广播数据报的本地接口。
- sendto() 函数将多点广播数据报发送至指定组 IP 地址。
- close() 函数关闭所有打开的套接字描述符。
套接字事件流:接收多点广播数据报
接收多点广播数据报使用以下函数调用序列:
- socket() 函数返回表示端点的套接字描述符。该语句还标识将对此套接字使用带有 UDP传输(SOCK_DGRAM)的 INET(网际协议)地址系列。此套接字会将数据报发送至另一应用程序。
- setsockopt() 函数设置 SO_REUSEADDR 套接字选项,以允许多个应用程序接收目标为同一本地端口号的数据报。
- bind() 函数指定本地端口号。在此示例中,IP 地址被指定为 INADDR_ANY 以接收发送至多点广播组的数据报。
- setsockopt() 函数使用 IP_ADD_MEMBERSHIP 套接字选项,它将加入接收数据报的多点广播组。在加入组时,指定 D 类组地址和本地接口的 IP 地址。系统必须对接收多点广播数据报的每个本地接口调用 IP_ADD_MEMBERSHIP 套接字选项。
注意:
必须对通过其接收多点广播数据报的每个本地接口调用 IP_ADD_MEMBERSHIP 选项。
- read() 函数读取正在发送的多点广播数据报。
- close() 函数关闭所有打开的套接字描述符。
以上是在网上找的资料,有张图不能直接粘贴,上传也传不上去。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。