Imaginem que eu tenho um WS (Web Service) rodando na porta 8080 e um cliente realiza uma requisição nele.
Eu gostaria de saber se consigo identificar o IP desse cliente e se o IP é “real”. Me refiro a IP real porque tenho um problema em relação a redes “fechadas” que utilizam NAT, onde o mesmo “esconde” o IP real da máquina.
A minha necessidade é devido ao fato de que pretendo desenvolver um middleware baseado em P2P onde terão vários nós, cada nó será um WS.
Todavia, eu não consigo enviar uma requisição a outro nó com um IP mascarado ou escondido atrás de um NAT, concordam?
Baixe o nível e em vez de “web service” escreva “socket”. Tente responder à sua pergunta.
Como você não consegue responder à sua pergunta escrevendo “socket” em vez de “web service”, então isso quer dizer que identificar os nós por IP não é uma boa jogada.
Provavelmente você terá de ter um serviço de diretórios indicando onde e como acessar os nós. Cada nó deve ter um IP “público” (no sentido que é o que deve ser usado para acessá-lo) para que os outros nós consigam acessá-lo. Por exemplo, digamos que o IP “local” é 10.100.1.1 e o IP “público” (na sua rede) seja 172.22.22.13 e o serviço atenda na 8080. Essa informação só pode ser obtida usando-se um diretório (talvez um LDAP ou DNS interno, quem sabe).
Para exemplo de um P2P onde a descoberta é dinâmica e funciona através de roteadores, NATs etc (só que o UPnP deve estar habilitado, veja http://pt.wikipedia.org/wiki/Universal_Plug_and_Play ), pense no BitTorrent.
[quote=entanglement]Baixe o nível e em vez de “web service” escreva “socket”. Tente responder à sua pergunta.
Como você não consegue responder à sua pergunta escrevendo “socket” em vez de “web service”, então isso quer dizer que identificar os nós por IP não é uma boa jogada.
Provavelmente você terá de ter um serviço de diretórios indicando onde e como acessar os nós. Cada nó deve ter um IP “público” (no sentido que é o que deve ser usado para acessá-lo) para que os outros nós consigam acessá-lo. Por exemplo, digamos que o IP “local” é 10.100.1.1 e o IP “público” (na sua rede) seja 172.22.22.13 e o serviço atenda na 8080. Essa informação só pode ser obtida usando-se um diretório (talvez um LDAP ou DNS interno, quem sabe).
[/quote]
Hum! Mas veja entanglement, a arquitetura que tenho em mente não é algo totalmente descentralizado. Basicamente, é assim. Existe um nó que será o owner/root, ele será responsável por algumas ações. Uma delas é montar grupos, que terão um limite pré-configurado. Eu terei que ter uma lista de quem quer “Jogar” (o middleware é para um jogo e para uma simulador de robótica), para que os usuários possam escolher. Então, imagina que você configurou para 4 pessoas, a cada 4 pessoas um grupo é formado e a mensagem passa a ser multicast, ao invés de um broadcast da vida. Então, posso ter N grupos com X nós cada grupo. Mas como você bem observou, o IP de cada nó deve ser “público”.
Eu pensei em algo agora, veja se estou delirando. Como tenho um nó que centraliza informações, para cada nó instalado no momento em que ele for realizar a conexão, posso “capturar” o IP público da máquina instalada e enviar ao nó owner/root, assim, ele tem registrado o IP “correto” e resolveria o problema, o que acha ?
E essa “captura” do IP “público”, seria via LDAP? A equipe da minha frente tem uma experiência legal com LDAP, vou aproveitar e trocar uma ideia com eles depois.
Obrigado pela atenção e desculpe se me estendi muito.
[quote=entanglement]Para exemplo de um P2P onde a descoberta é dinâmica e funciona através de roteadores, NATs etc (só que o UPnP deve estar habilitado, veja http://pt.wikipedia.org/wiki/Universal_Plug_and_Play ), pense no BitTorrent.
Provavelmente você terá de usar o UPnP mesmo. [/quote]
Eu havia pensando no BitTorrent, só não havia lido sobre.
Ele usa a mesma ideia do Skype ? Me falaram que o Skype também usa P2P e descobre o IP, mas acho que é mais “baixo” nível, se for verdade, não?
Vou ler sobre o que me passou.