TCP/IP网络编程学习笔记(七)

  1. 多播的Sender端就类似与客户端,Receiver端就类似与服务端;

  2. 多播的实现过程:

    • Sender端设置TTL;
    • Sender端向一个D类IP地址发送UDP数据报(此IP地址可以随便指定一个D类的即可);
    • Receiver端将本次使用的socket所对应的本主机IP(可以用INADDR_ANY)存放于一个iq_mreq结构体中,并将一个与Sender端一致的D类IP也存放于上述结构体中;
    • 将上述设置好地址的结构体注册到多播组中;
    • Receiver端设置本次使用的socket所对应的本主机IP(可以用INADDR_ANY)和端口(使用bind()函数设置);
    • Receiver端使用recvfrom()接收UDP数据报。
  3. 多播数据传输特点:

    • 多播服务器针对特定多播组,只发送一次数据;
    • 即使只发送一次数据,但该组内的所有客户端都会接收到数据;
    • 多播组数可在IP地址范围内任意增加;
    • 加入特定组即可接收发往该多播组的数据。
  4. 向大量客户端发送相同数据时,可以使用多播,因为多播的主机方只发送一次数据,然后路由器负责将数据复制,并发往不同的客户端。这样,处于网络中的数据报就比较少(因为会在最终位置被复制为多份,然后发给不同的主机,所以在路由器之间流通的数据报就相对比较少)。多播主要用于“多媒体数据的实时传输”;

  5. TTL是决定数据包传递距离的主要因素,每经过一个路由器就减去1。TTL变为0时数据包就无法再被传递,只能销毁;

  6. 多播的Sender端使用的是D类地址和一个指定的端口来发送UDP数据报,而Receiver端一般是使用本机的一个IP地址和一个与Sender端相同的端口来接收数据;

  7. 多播并不是使用本主机的真实IP来通信,它需要额外的一个D类地址,通过D类地址来通信。因此,多播的路由过程与普通的TCP和UDP路由过程不一样,多播需要尽可能的将数据报发送到任何能够到达的主机上,然后查看对应的端口中对应的socket上有木有设置对应的多播组,如果有,那就将数据存到缓冲区等待读取。所以需要TTL,不然就会无限的扩展下去。普通的TCP和UDP直接使用传递进去的IP地址,通过地址路由,来找到一条合适的路线;

  8. 广播也可以一次性向多个主机发送数据,只不过传输范围有区别。多播可以跨越不同的网络(指不同的网络号),而广播只能向某一个网络号中对应的所有主机号发送相同的数据;

  9. 广播分为直接广播本地广播。直接广播是指定对方的网络地址(IP中的主机IP全部用255来替换,只留下网络号,比如发送给192.12.34网络中的所有主机,则设置为192.12.34.255即可),本地广播是直接发送给本主机所在的网络中的所有主机(此时把对方的IP设置为255.255.255.255就行了);

  10. 多播的发送端只需要设置TTL即可(接收端要设置加入多播组),而广播的发送端只需要设置套接字允许进行广播即可(设置SOL_SOCKET协议下的SO_BROADCAST即可);

  11. 广播除了设置允许套接字进行广播外,其他与UDP通信的代码几乎一模一样(客户端可服务端都一样);

  12. Windows下实现多播和广播,除了要包含<winsock2.h>外,还要包含ws2tcpip.h>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值