加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 绑定,网络(接口)和多播地址有什么区别?

发布时间:2020-12-13 17:06:32 所属栏目:Linux 来源:网络整理
导读:Java中的DatagramSocketImpl有一个joinGroup方法,它接受套接字地址(IP和PORT)加上接口地址(IP和PORT).我试图了解多播堆栈中这三个地址中每个地址的区别和目的: 绑定地址的目的是什么?它需要一个端口吗? 接口地址的目的是什么?它需要一个端口吗? 多播地
Java中的DatagramSocketImpl有一个joinGroup方法,它接受套接字地址(IP和PORT)加上接口地址(IP和PORT).我试图了解多播堆栈中这三个地址中每个地址的区别和目的:

>绑定地址的目的是什么?它需要一个端口吗?
>接口地址的目的是什么?它需要一个端口吗?
>多播地址的目的是什么?它需要一个端口吗?

我很困惑:我不知道绑定地址和接口地址之间的区别.此外,我不确定多播地址是否真的需要一个端口.我可以将多播地址的IP称为多播地址组吗?

解决方法

实际上你在这里混淆了三种方法.第一个是bind,用于将套接字绑定到指定的地址和端口.使用此方法基本上您打开一个udp-port并等待该地址上的此端口的数据.第二个是join-method,用于让套接字加入指定的多播组.组播组的示例是224.0.0.1 – “所有主机”组播组 – 其针对同一网段上的所有主机.第三种方法是joinGroup,它允许套接字在指定的网络接口上加入指定的多播组.如您所见,方法二和三用于IP多播,方法一用于UDP(不一定与多播组合).通过加入多播组,套接字能够接收使用IP多播发送的数据报.两者当然可以组合在一起,例如使用多播接收数据,然后在必要时使用多播(如果数据对组中的所有主机感兴趣)或直接发送给发送者(如果数据仅对发送者有意义) .

>使用bind方法将套接字绑定到地址时,这也涉及端口.除非套接字也加入多播组,否则只能接收该特定地址/端口组合的数据报.>我不确定你是如何从joinGroup到接口地址的.你需要的是一个SocketAddress和一个NetworkInterface. NetworkInterface可以通过接口名称(NetworkInterface.getByName)或地址(NetworkInterface.getByInetAddress)检索.在getByInetAddress的情况下,您可以将其称为接口地址,但它所做的只是检索具有指定地址的NetworkInterface,因此不使用端口号.>多播地址用于IP多播,用于将IP数据报发送到一组主机(如果他们有兴趣接收数据报).您可以使用端口(如果使用UDP)但不需要. IPv4组播地址的CIDR为224.0.0.0/4(224.0.0.0 – 239.255.255.255),IPv6组播地址的前缀为ff00 :: / 8.这些范围中的每个IP地址代表一个多播组.存在不同的多播地址块(和多播组),这些块将被不同地处理.例如,224.0.0.0 / 24不会从其原始子网路由,而239.192.0.0/14可以路由,如果全局路由必须封装.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读