UDP x Roteador

Salve!

Pessoal, envio datagram por udp para uma máquina em outra rede, mas só chega se o roteador estiver direcionando a porta para a máquina interna… O problema, tenho que fazer esses datagrams serem trocados entre uma 30 redes diferentes, será utilizado para voz… como faço?

Vou uma por uma liberando o acesso?

Utilizo conexões TCPs , em todas essas 30 redes, para uns 100 computadores, que são interligados por um servidor.

O que seria melhor? Colocar essa conexão de voz por TCP também??? Triangular isso no servidor???

Veja o dilema: a conexão TCP é roteada com tranquilidade pelos roteadores, porque ela é ativa do lado deles, e passiva do lado do server… mas a udp não, precisa ser ativa e passiva em todos… aí vem o problema…

o q fazer?

Hum… é UDP Multicast? Se for, normalmente dá problemas com roteadores.

nao, acho que não. Preciso interligar, por voz, duas máquinas em redes diferentes. o sistema faz tudo, mas o pacote udp não chega na máquina final, pára no roteador… mas como o skype faz entao? e o msn???

entendeu a dúvida?

Não sei se eles usam UDP. O Skype não usa TCP (para consultar um diretório central) e UPNP (para conectar um cliente ao outro) , talvez usando TCP ou UDP dependendo da configuração de rede? Não sei exatamente como é que funcionam.

O BitTorrent pode usar UDP, mas ele precisa de um protocolo chamado UPNP (Universal Plug & Play), que permite configuração automática de um roteador doméstico para aceitar conexões e que o UPNP esteja habilitado no roteador e que aceite UDP.

já clareou… e esse upnp, existe alguma biblioteca em java que o utiliza??? googlei e vi que é meio sem documentação…

Na prática, todas essas questões são do escopo da sua infra-estrutura de rede, ou seja, dependem unicamente das políticas de tráfego da sua empresa.

Em algum momento você vai precisar configurar os roteadores, pois mesmo que a sua aplicação utilize o UPNP os roteadores devem estar habilitados para aceitar esse tipo de configuração.

Se você não consegue mexer nos roteadores (e mesmo mexendo costuma dar confusão habilitar UDP - só se justifica se realmente houver algum benefício como diminuição de alguma latência, ou sei lá o quê - não costuma ser o caso de tráfego de voz :slight_smile: ) então use TCP mesmo, que costuma dar bem menos dor de cabeça.

Achei um artigo interessante sobre TCP x UDP para trasmissão de voz:

O mais apropriado é usar UDP, pois você não tem retransmissões de pacotes e portanto o delay é menor. Mas o bloqueio de UDP por firewalls pode ser realmente um problema.

O problema dele não é exatamente firewalls mas sim roteadores - roteadores normalmente bloqueiam tráfego UDP, exceto se explicitamente programados para deixar passar alguns endereços e portas específicos.

No caso dele é UDP “unicast” (ou seja, o campo porta e endereço de cada pacote UDP descreve o destino de uma única máquina, não de algo que pode ser ouvido por todas as máquinas que desejem ouvir, como é o caso do “UDP Multicast”), mesmo assim é meio complicado configurar isso em roteadores.

O UPNP surgiu exatamente para isso (você pode olhar o código do LimeWire para saber como é que se faz a programação do UPNP em Java), mas roteadores empresariais (diferentemente dos roteadores domésticos) normalmente não têm o UPNP habilitado.

Então, agradeço mto a ajuda.

achei o pacote org.wetorrent.upnp que é exclente para upnp, mas não consegue encontrar todos os routeadores… justamente pelo fato de alguns terem o serviço desabilitado…

Vou tentar com TCP, mas vcs sabem de alguma configuração no tcp que pode ajudar na latencia? por exemplo, ele poderia perder padotes sem problema… se desse pra configurar isso já ajudaria…

valeu.

[quote=zerokelvin]Então, agradeço mto a ajuda.

achei o pacote org.wetorrent.upnp que é exclente para upnp, mas não consegue encontrar todos os routeadores… justamente pelo fato de alguns terem o serviço desabilitado…

Vou tentar com TCP, mas vcs sabem de alguma configuração no tcp que pode ajudar na latencia? por exemplo, ele poderia perder padotes sem problema… se desse pra configurar isso já ajudaria…

valeu.[/quote]

aí é que está … o TCP foi projetado para garantir que todos os pacotes serão entregues e em ordem.

Testei em TCP, fica legal tbm… mas cai no mesmo problema do roteamento… o socketserver precisa ter a porta liberada!

pois é como eu falei, isso é um problema de infra-estrutura de rede, não de aplicação. Você teria o mesmo problema se tentasse instalar um jogo on-line, por exemplo.

aproveitando o topico qual lib usar para fazer o Upnp estou passando por algo parecido.