Alguém manja de multicast => Diferenca entre bind, interface and multicast addresses?

Qual a diferenca entre o bind address, entre o interface address e o multicast address? Quais desses necessitam de uma porta e qual o significado e propósito de cada um deles?

Vamos supor que seu computador tenha 3 placas de rede.

Endereços da placa de rede:
[list]Placa 1 192.168.0.1
Placa 2 172.25.15.1
Placa 3 10.0.0.1[/list]

O interface address é o endereço de cada placa.

Agora vc tem uma aplicação que roda na porta 8888 e ela só dever ser acessada da rede interna da sua empresa(placa 1), então sua aplicação escutará(bind) apenas essa interface na porta 8888, quer dizer que mesmo sendo o mesmo computador conexões para 172.25.15.1 ou 10.0.0.1 não serão aceitas, apenas para a 192.168.0.1 na porta 8888. Esse é o bind address.

O multicast adress vc pode entender aqui http://en.wikipedia.org/wiki/Multicast_address. Mas não tem muito a ver com desenvolvimento.

Completando…

E ainda tem a interface padrão de loopback, com IP 127.0.0.1, que serve apenas para uso local. Quando vc instala o MySQL, por exemplo, ele vem habilitado para escutar apenas nessa interface, sendo necessário modificar o my.ini para permitir o acesso de outros computadores.

[quote=lsjunior]Vamos supor que seu computador tenha 3 placas de rede.

Endereços da placa de rede:
[list]Placa 1 192.168.0.1
Placa 2 172.25.15.1
Placa 3 10.0.0.1[/list]

O interface address é o endereço de cada placa.

Agora vc tem uma aplicação que roda na porta 8888 e ela só dever ser acessada da rede interna da sua empresa(placa 1), então sua aplicação escutará(bind) apenas essa interface na porta 8888, quer dizer que mesmo sendo o mesmo computador conexões para 172.25.15.1 ou 10.0.0.1 não serão aceitas, apenas para a 192.168.0.1 na porta 8888. Esse é o bind address.

O multicast adress vc pode entender aqui http://en.wikipedia.org/wiki/Multicast_address. Mas não tem muito a ver com desenvolvimento.[/quote]

Confuso demais. Vc basicamente disse que o Bind Address é IGUAL ao Interface Address. Mas quando programo isso em Java, primeiro faco o BIND com o bind address. Depois faco o join passando a interface. Redundante? Ou eu que não estou entendendo direto?

O bind address é o endereço que sua aplicação escutará, podendo ser o endereço de uma interface ou de várias interfaces.

Se vc fizer isso, sua aplicação escutará em todos os endereços na porta 8888:

... ServerSocket ss = new ServerSocket(8888); Socket s = ss.accept(); ...

Mas se mudar para isso, apenas na interface local(127.0.0.1):

... ServerSocket ss = new ServerSocket(8888); ss.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 8888)); //ss.bind(new InetSocketAddress(InetAddress.getByName("localhost"), 8888)); Mesma coisa da linha anterior Socket s = ss.accept(); ...

E se mudar para isso, apenas em determinada endereço(192.168.0.1):

... ServerSocket ss = new ServerSocket(8888); ss.bind(new InetSocketAddress(InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, (byte) 0, (byte) 1 }), 8888)); // 192.168.0.1 //ss.bind(new InetSocketAddress(InetAddress.getByName("meucomputador"), 8888)); Mesma coisa da linha anterior, trocando 'meucomputador' pelo nome do seu PC Socket s = ss.accept(); ...

[quote=lsjunior]O bind address é o endereço que sua aplicação escutará, podendo ser o endereço de uma interface ou de várias interfaces.

Se vc fizer isso, sua aplicação escutará em todos os endereços na porta 8888:

... ServerSocket ss = new ServerSocket(8888); Socket s = ss.accept(); ...

Mas se mudar para isso, apenas na interface local(127.0.0.1):

... ServerSocket ss = new ServerSocket(8888); ss.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 8888)); //ss.bind(new InetSocketAddress(InetAddress.getByName("localhost"), 8888)); Mesma coisa da linha anterior Socket s = ss.accept(); ...

E se mudar para isso, apenas em determinada endereço(192.168.0.1):

... ServerSocket ss = new ServerSocket(8888); ss.bind(new InetSocketAddress(InetAddress.getByAddress(new byte[] { (byte) 192, (byte) 168, (byte) 0, (byte) 1 }), 8888)); // 192.168.0.1 //ss.bind(new InetSocketAddress(InetAddress.getByName("meucomputador"), 8888)); Mesma coisa da linha anterior, trocando 'meucomputador' pelo nome do seu PC Socket s = ss.accept(); ...
[/quote]

Entendi. O default é 0.0.0.0. Mas não entendi a redundancia da PORTA. O que acontece se a porta que vc passa no ServerSocket não é a mesma que vc passa no bind? Deveria jogar uma exception ou ele escolhe ignorar uma das duas? Confuso né?