首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >绑定、网络(接口)和多播地址之间有什么区别?

绑定、网络(接口)和多播地址之间有什么区别?
EN

Server Fault用户
提问于 2012-02-24 15:03:13
回答 1查看 2.6K关注 0票数 3

Java中的DatagramSocketImpl有一个joinGroup方法,它接受套接字地址(IP和端口)加上接口地址(IP和端口)。我试图了解多播堆栈中这三个地址的不同之处和用途:

  1. 绑定地址的目的是什么?需要港口吗?
  2. 接口地址的用途是什么?需要港口吗?
  3. 多播地址的用途是什么?需要港口吗?

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

EN

回答 1

Server Fault用户

回答已采纳

发布于 2012-02-27 00:07:25

实际上这里有三种方法混在一起。第一个是bind,用于将套接字绑定到指定的地址和端口。使用此方法,您基本上可以打开一个udp端口,并等待该地址上的该端口的数据。第二种是连接方法,它用于让套接字加入指定的多播组。多播组的一个例子是224.0.0.1 --“所有主机”多播组--它处理同一网段上的所有主机。第三种方法是joinGroup,它允许套接字在指定的网络接口上加入指定的多播组。如您所见,方法二和方法三用于IP多播,方法一用于UDP (不一定与多播相结合)。通过加入多播组,套接字能够接收使用IP多播发送的数据报。当然,两者都可以结合在一起,例如,使用多播接收数据,如果有必要,可以使用多播(如果数据对组中的所有主机都感兴趣)或直接对发送方(如果数据只对发送方感兴趣)进行应答。

  1. 当您使用bind方法将套接字绑定到一个地址时,这也涉及到一个端口。除非套接字也加入多播组,否则只能接收该特定地址/端口组合的数据报。
  2. 我不知道您是如何从joinGroup获得接口地址的。您需要的是一个SocketAddress和一个NetworkInterface。NetworkInterface可以通过接口名(NetworkInterface.getByName)或地址(NetworkInterface.getByInetAddress)检索。在getByInetAddress的情况下,您可能可以称它为接口地址,但它所做的只是检索具有指定地址的NetworkInterface,因此不使用端口号。
  3. 多播地址用于IP多播,用于向一组主机发送IP数据报(如果它们对接收数据报感兴趣)。您可以使用端口(如果使用UDP),但不需要使用端口。IPv4组播地址的CIDR为224.0.0.0/4 (224.0.0.0 - 239.255.255.255),IPv6多播地址的前缀为ff00::/8。有不同的多播地址块(和多播组)将以不同的方式处理。例如,224.0.0.0/24不能从其原始子网路由,而239.192.0.0/14可以路由,如果必须对全局路由进行封装。
票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/363436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档