Você está na página 1de 9

7/31/12

Broadcast  e  Mul3cast  

Comunicação  
•  Camada  de  Transporte  
– Unicast  
•  Toda  comunicação  unicast  pode  ser  replicada  
n  vezes  
– Desperdício  da  vazão  
– Comprome3mento  da  arquitetura  cliente-­‐servidor  
– Ineficiência  

1  
7/31/12  

Exemplo  
•  Considere  o  serviço  de  uma  rádio  IP  onde  cada  
conexão  unicast  u3liza  8  kbps  da  banda  
passante  
•  Considere  agora  que  essa  rádio  é  popular,  com  
1.000.000  de  usuários  simultâneos  
•  1.000.000  x  8  =  (aproximadamente)  8Gbps  
•  O  mesmo  conteúdo  poderia  ser  distribuído  a  
todos  os  clientes  

Rede  
•  Possibilidade  de  duplicação  do  conteúdo  
apenas  quando  necessário  
– No  exemplo  anterior  o  servidor  precisaria  de  uma  
banda  de  apenas  8kbps  
•  Serviços  1  para  vários  
– Broadcast  
– Mul3cast  
•  Datagram  Sockect  (UDP)    

2  
7/31/12  

Broadcast  
•  Todos  recebem  o  conteúdo  transmi3do  
– Implementado  através  de  um  endereço  de  
broadcast  
– IP  local  broadcast  address  =  255.255.255.255  
– Todos  os  computadores  na  mesma  subrede  devem  
receber  as  transmissões  
•  Mensagens  de  broadcast  não  são  
encaminhadas  nos  roteadores  da  Internet  

Broadcast  
•  Normalmente  não  existem  construções  
específicas  para  broadcast  
– Implementado  na  camada  de  rede  
– Rodando  com  UDP  
•  Porém  o  mesmo  não  é  verdade  para  Mul3cast  
em  função  do  controle  de  grupos  
– O  que  é  mesmo  Mul3cast?  

3  
7/31/12  

Mul3cast  
•  Um  mesmo  grupo  recebe  o  conteúdo  
transmi3do  
– Transmissão  UDP  
•  Controle  dos  par3cipantes  do  grupo  
– Mul3castSocket  
•  Pode  ser  u3lizado  o  DatagramSocket  com  
endereços  de  Mul3cast  
– Endereços  Classe  D  

Mul3cast  
•  Endereços  de  Rede  
– Range  224.0.0.0  a  239.255.255.255  
– Endereços  que  começam  com  “1110”  
– Os  demais  28  bits  iden3ficam  o  grupo  de  envio  
•  Alguns  grupos  conhecidos  
– 224.0.0.1  –  todos  os  hosts  da  subrede  
– 224.0.0.2  –  todos  os  roteadores  

4  
7/31/12  

Mul3castSocket  
•  UDP  Socket  (DatagramSocket)  com  algumas  
facilidades:  
– Gerência  de  Grupos  
– Recebimento  das  mensagens  enviadas  (LoopBack)  
– Controle  do  TimeToLive  
•  TTL  =  0  Comunicação  restrita  ao  mesmo  host  
•  TTL  =  1  Comunicação  restrita  a  mesma  subrede  
•  TTL  <  32  Comunicação  restrita  a  mesma  organização  
•  TTL  <  128  Comunicação  restrita  ao  mesmo  con3nente  
•  TTL  <  255  Global    

Mul3castSocket  
•  Criação  do  Socket  
– Mul3castSocket  ms  =  new  Mul3castSocket(port);  
•  Entrada  e  Saída  em  um  grupo  
– ms.joingGroup(group);  
– ms.leaveGroup(group);  
•  Recebimento  de  mensagens  
– DatagramPacket  recv  =  new  DatagramPacket(buf,  
buf.length)  
– ms.receive(recv);  

5  
7/31/12  

Mul3castSocket  
•  Envio  de  Mensagens  
– DatagramPacket  sendPacket=  new  
DatagramPacket(buf,  buf.length(),  group,  port);  
– ms.receive(sendPacket);  
•  Time-­‐to-­‐live  
– ms.setTimeToLive(2);  
•  Loopback  
– ms.setLoopbackMode(true);  

Mul3castChat  
•  Selecione  o  Projeto  
– File  
– New  
– Class  
– Mul3castChat  

6  
7/31/12  

Mul3castChat  
import java.io.*;!
import java.net.*;!

class ChatThread extends Thread {!


private MulticastSocket msocket;!
private DatagramPacket recv;!

public ChatThread(MulticastSocket msock, InetAddress


group_no, int Port_no) {!
msocket= msock;!
start(); // start chama run!
}!

Mul3castChat  
public void run() {!
byte[] buf = new byte[1000];!
String tmp;!
try {!
for(;;) {!
recv = new DatagramPacket(buf, buf.length);!
msocket.receive(recv);!
tmp = new String(recv.getData(),0,
recv.getLength());!
System.out.println("\nRecebido: "+ tmp);!
}!
} catch (IOException e) {!
System.out.println("Exit...");!
msocket.close(); }!
} !
}!

7  
7/31/12  

Mul3castChat  
public class MulticastChat {!
public static void main(String[] args) throws IOException{!
String str;!
int port;!

port = Integer.parseInt("6500"); !
InetAddress group = InetAddress.getByName("224.0.0.0");!

try {!
MulticastSocket s = new MulticastSocket(port);!
s.joinGroup(group);!
new ChatThread(s,group,port);!

BufferedReader myinput = new BufferedReader(!


new InputStreamReader(System.in));!

Mul3castChat  
System.out.println(”Digite a mensagem seguida por ENTER
ou CTRL+D para encerrar o programa");!
for(;;) {!
str = myinput.readLine();!
if (str == null) break; // Ctrl+D!
DatagramPacket dp = new DatagramPacket(str.getBytes
(), str.length(), group, port);!
s.send(dp);!
}!

System.out.println(”Saindo do Grupo...");!
s.leaveGroup(group);!
s.close();!
} catch (Exception err){!
System.exit(1); }!
} }!

8  
7/31/12  

9  

Você também pode gostar