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

5 respostas
J

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?

5 Respostas

L

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.

L

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.

J

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.

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?

L

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(); ...

J

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(); ...

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é?

Criado 24 de fevereiro de 2012
Ultima resposta 24 de fev. de 2012
Respostas 5
Participantes 2