Endereços públicos e privados

Endereços Públicos e Privados

Criado por Pedro Pinto em 20 de Outubro de 2009 | 56 comentários

Ontem durante uma conversa, uns amigos fizeram-me as seguintes questões: “Qual a diferença entre um IP Privado e um IP Público?”  Quando é que se usa um e quando é que se usa outro?

Bem, isto em conversa é certamente muito mais fácil de explicar,  já escrever… vamos lá ver como sai!

IT Technician With Server Cables

Basicamente as máquina quando estão ligadas em rede possuem um endereço IP configurado (seja ele IPv4 (normalmente) ou IPv6), de forma a poderem ser alcançadas por outras máquinas.

Relativamente a endereços IP existem os endereços públicos e os endereços privados. A maioria dos endereços IP são públicos, permitindo assim que as nossas redes (ou pelo menos o nosso router que faz fronteira entre a nossa rede e a Internet) estejam acessíveis publicamente através da Internet, a partir de qualquer lado.

Quanto a endereços privados, estes  não nos permitem acesso directo à Internet, no entanto esse acesso é possível mas é necessário recorrer a mecanismos de NAT (Network Address Translation) que traduzem o nosso endereço privado num endereço público.

Os intervalos de endereços privados são:

  • de 10.0.0.0 a 10.255.255.255 (10.0.0.0 /8)
  • de 172.16.0.0 a 172.31.255.255 (172.16.0.0 /12)
  • de 192.168.0.0 a 192.168.255.255 (192.168.0.0 /16)

Daí os endereços que usamos com frequência 192.168.x.x

Fazendo uma analogia com o sistema telefónico podemos comparar um endereço público ao número de um telefone/telemóvel. Esse número é público, reservado, único e identifica de forma unívoca o vosso telefone.

Agora imaginem por exemplo uma empresa que possui uma central telefónica. Vocês atribuem as extensões (privadas ex: 101, 302, 45) que quiserem aos telefones mas quanto alguém dessas extensões quer ligar para o exterior ou liga para a telefonista para estabelecer a chamada para o exterior (a partir de um número público) ou marcam um prefixo para que a vossa central proceda ao mecanismo de NAT fazendo assim que a vossa chamada saia por um número público.

No entanto, imaginando que um amigo vos quer contactar do exterior, este não o poderá fazer directamente e nesse caso,  terá de ligar para a telefonista para esta reencaminhar a chamada. O endereçamento privado que eu tenho na minha central telefónica pode ser o mesmo de outras empresas. No entanto o(s) números(s) telefónicos públicos (ex:232234567) que identificam a minha empresa são únicos.

Passando novamente para as redes podemos dizer que máquinas em redes diferentes podem usar os mesmo endereços privados e não existe qualquer entidade reguladora para controlar a atribuição, isso é definido internamente.

Para permitir que vários computadores na rede doméstica ou de empresas comunicassem na Internet, cada computador devia ter assim o seu próprio endereço público. Esse requisito impõe grandes exigências sobre o pool de endereços públicos disponíveis tendo sido criados os mecanismos de NAT como referido anteriormente.

Os endereços públicos são geridos por uma entidade reguladora, muita das vezes são pagos e permitem identificar univocamente uma máquina (PC, routers,etc) na Internet. O organismo que gere o espaço de endereçamento público (endereços IP “encaminháveis”) é a Internet Assigned Number Authority (IANA).

image_2

Obviamente poderíamos ter explanado mais um assunto que por norma tem alguma complexidade. Mas, desta forma simples, perceberão também a utilidade do NAT, endereços públicos e privados e, caso precisem, podem ver no vosso router a área onde a magia acontece.

Caso precisem de mais esclarecimentos, poderão deixar nos comentários a vossa dúvida e caso a caso responderei tentando acrescentar detalhes ao assunto.

Modelo OSI

Redes – Sabe o que é o modelo OSI?

Criado por Pedro Pinto em 15 de Setembro de 2010 | 43 comentários

Recentemente, durante uma conversa de amigos, alguém me questionava no âmbito das redes informática, porque se dizia que um determinado equipamento funciona numa determinada camada (layer) do modelo OSI.

Nesse sentido, preparei um pequeno artigo (não muito técnico), que tenta explicar o modelo OSI.

osi_000

Há uns bons anos atrás, cada fabricante tinha as suas tecnologias, topologias, protocolos e então havia problemas na interoperabilidade entre equipamentos. Com o evoluir da tecnologia, os fabricantes de equipamentos chegaram a conclusão que o caminho a seguir se deveria basear em normas (standards).

Das muitas organizações ligadas a normalização  destacam-se o IEEE (Institution of Electrical and Electronics Engineers) , ISO (International Organization for Standardization) e ITU (International Telecommunication Union).

O Modelo OSI (criado em 1970 e formalizado em 1983) é um modelo de referência da ISO que tinha com principal objectivo ser um modelo standard, para protocolos de comunicação entre os mais diversos sistemas, e assim garantir a comunicação end-to-end.

O modelo é composto por 7 camadas, em que cada camada realizada funções específicas.

Camadas do modelo OSI
  • Aplicação (Application)
  • Apresentação (Presentation)
  • Sessão (Session)
  • Transporte (Transport)
  • Rede (Network)
  • Dados (Data Link)
  • Física (Physical)

osi_00

Principais funções de cada camada
  • Aplicação (Application)
    • Fornece serviços às aplicações do utilizador.
  • Apresentação (Presentation)
    • Encriptação e compressão de dados.
    • Assegura a compatibilidade entre camadas de aplicação de sistemas diferentes
  • Sessão (Session)
    • Controla (estabelece, faz a gestão e termina), as sessões entre aplicações.
  • Transporte (Transport)
    • Controle de fluxo de informação, segmentação e controle de erros
  • Rede (Network)
    • Encaminhamento (routing) de pacotes e fragmentação
    • Esquema de endereçamento lógico
  • Dados (Data Link)
    • Controla o acesso ao meio físico de transmissão.
    • Controlo de erros da camada física
  • Física (Physical)
    • Define as características do meio físico de transmissão da rede, conectores, interfaces, codificação ou modulação de sinais.
Modelo OSI – Protocolos

A seguinte figura, ilustra em que camada funciona um determinado protocolo. Por exemplo, quando falamos a nível de TCP/UDP estamos mais especificamente a falar da camada de transporte.

osi_01

Analogia do modelo OSI com a comunicação via carta

Osi_parallel_port

Vamos então a um exemplo, para ilustrar como tudo isto funciona. Para isso vamos exemplificar como funciona o acesso a uma página Web, através de um browser, e como tudo encaixa no modelo OSI. Vamos começar de cima para baixo (camada de aplicação para camada física)

  • Na camada de aplicação, o browser (aplicação) serve de interface para apresentação da informação ao utilizador. Para este pedido (cliente-> servidor), foi usado o protocolo HTTP
  • O formato dos dados é tratado na camada de apresentação. Os formatos tradicionais da Web incluem HTML, XML, PHP, GIF, JPG, etc. Adicionalmente são usados mecanismos de encriptação e compressão para a apresentação da informação.
  • Na camada de sessão é estabelecida a sessão entre o computador cliente (onde estamos a fazer pedido via browser) e o servidor web (que aloja a página requisitada).
  • O protocolo TCP  fornece garantia na entrega de todos os pacotes entre um PC emissor e um PC receptor (neste caso, a entrega de toda a informação da página web do servidor para o cliente). Isso é uma funcionalidade da camada de transporte.
  • Tanto o PC cliente como servidor possuem um endereço lógico (endereço IP neste caso). Isso é uma funcionalidade da camada de rede. Adicionalmente os routers determinam qual o melhor caminho para que os pacotes possam fluir (encaminhamento) entre cliente e servidor web.
  • O endereço IP (endereço lógico) é então “traduzido” para o endereço físico (endereço MAC da placa de rede. Isto é funcionalidade da camada da dados
  • Cabos de cobre, fibra óptica, placas de rede, hubs e outros dispositivos, ajudam na ligação física entre o cliente e o servidor que acontece na camada física.

Para finalizar, e respondendo a questão fundamental que me levou a escrever a este artigo, apenas referenciar as camadas onde operar os 3 equipamentos activos  tradicionais de uma rede:

  • HUB funciona a nível da camada 1 (camada física),
  • Switch na camada 2 (camada de dados). Há switchs capazes de funcionar também na camada 3.
  • Router na camada 3 (camada de rede)

Estejam atentos, pois brevemente teremos outros conteúdos da área das redes.

Endereços físicos e endereços lógicos

Redes – Sabe o que são endereços físicos e endereços lógicos ?

Criado por Pedro Pinto em 13 de Dezembro de 2010 | 18 comentários

No mundo das redes informáticas existem muitos termos e conceitos. Ao longo de alguns artigos que temos publicado no pplware, temos tentado explicar alguns desses termos/conceitos por forma a que os nossos leitores estejam mais contextualizados com a área das redes de dados.

Hoje o desafio é tentar explicar-vos o que são endereços físicos e o que são endereços lógicos.

mac_ip2

Relativamente à questão colocada neste artigo, a resposta é bastante simples. No âmbito das redes informáticas, quando falamos em endereço físico estamo-nos a referir ao endereço MAC (associado por exemplo a uma placa de rede) e quando falamos em endereço lógico é o endereço IP (configurado na placa de rede).

Endereços físicos

O endereço MAC (Media Access Control) é definido como sendo um endereço físico de uma placa de rede, e é composto por 48 bits (12 caracteres hexadecimais). Os primeiros seis caracteres identificam o fabricante (ex. Intel, surecom, broadcom, etc)  e os restantes seis identificam a placa em si. O endereço MAC é único no mundo para cada placa de rede (apesar de existirem ferramentas que possibilitam a alteração do mesmo), e é mantido na memória ROM , sendo posteriormente essa informação copiada para a memória RAM aquando da inicialização da placa. Há várias formas de representar um endereço MAC:

00-22-18-FB-7A-12
0022.18FB.7A12
00:22:18:FB:7A:12

Para poderem visualizar o MAC associado à vossa placa (no Windows) podem aceder às propriedades da mesma e conferirem o campo Physical Address

mac_00

Para quem pretender observar o MAC Address através da linha de comandos do Windows pode escrever:ipconfig /all ou getmac.

Endereços lógicos

Quando falamos em endereços na área das redes, é normal associarmos de imediato ao endereço IP configurado numa placa de rede. O endereço IP (versão 4)  é um endereço lógico definido por 32 bits (4 octetos) e identifica um dispositivo numa determinada rede. Os endereços lógicos IPv6 são constituídos por 128 bits, sendo apresentados em 8 grupos de 4 dígitos hexadecimais separados por ‘:’ (por ex. 1234:5678:90AB:CDEF:FEDC:BA09:8765:4321).

Relativamente a endereços IP existem os endereços públicos e os endereços privados. A maioria dos endereços IP são públicos, permitindo assim que as nossas redes (ou pelo menos o nosso router que faz fronteira entre a nossa rede e a Internet) estejam acessíveis publicamente através da Internet, a partir de qualquer lado.
Os endereços IP representam-se da seguinte forma:

192.168.10.1
2.83.6.2
10.10.10.1

Para poderem visualizar o IP associado à vossa placa (no Windows) podem aceder às propriedades da mesma e conferirem o campo IPv4 Address ou já na versão 6 do protocolo IP IPv6 Address.

ip_00

Para quem pretender observar o endereço IP através da linha de comandos do Windows pode escrever:ipconfig

O endereço IP funciona na camada 3 (camada de rede) no modelo OSI, enquanto o MacAddress funciona na camada 2 (camada de ligação), no modelo OSI. Para quem quiser saber mais sobre o modelo OSI pode dar uma vista de olhos no nosso artigo Sabe o que é o modelo OSI?

Em Resumo…

Aproveitando aquilo que já foi referido, quando falamos em endereços físicos estamo-nos a referir ao endereço MAC. Por outro lado, o endereço lógico é o endereço IP configurado numa placa de rede.

Há “relação” entre o endereço físico e o endereço lógico? Sim..vamos analisar essa questão num próximo artigo.

Aproveito para deixar um “repto” aos nossos leitores. Que mais temas gostariam de ver por aqui abordados no âmbito das redes informáticas?

Artigos relacionados

ASP.NET–State Management

ASP.NET – State Management

Criado por Henrique Graça em 14 de Dezembro de 2010 | 9 comentários

Estamos de volta com mais um tutorial sobre ASP.NET. Hoje iremos falar sobre State Management numa aplicação ASP.NET. Fiquem atentos e participem neste brainstorming de programação.

1. State Management

Nenhuma framework Web, por muito avançada que seja, pode alterar o facto de o protocolo HTTP ser stateless (não guarda o estado entre Requests). Depois de cada Request, o cliente desliga-se do servidor e o ASP.NET descarta os objectos que foram criados para a página. Esta arquitectura garante que as aplicações Web podem servir milhares de Requests simultaneos, sem que o servidor fique sem memória. A desvantagem é que precisamos de outras tecnicas para garantir que a informação das páginas se mantém entre Requests e possa ser utilizada quando necessário.
O ASP.NET, inclui uma grande variedade de opções no que toca a State Management. A opção correcta depende do tipo de dados que queremos guardar, onde queremos guardar, se está disponivel para um ou mais utilizadores, o nivel de segurança e performance que queremos obter.
Em baixo podem ver um quadro com as várias opções e qual o seu contexto de utilização.

Como podem ver existem muitas opções, felizmente, o ASP.NET fornece um modo de trabalhar semelhante para todas elas. Se estas formas de State Management não forem suficientes, podemos criar o nosso próprio mecanismo de State Management. Em baixo, veremos mais em pormenor estas ferramentas.

2. ViewState

Deve ser a nossa primeira escolha para guardar informação no contexto de uma única página. O View State é utilizado internamente pelo ASP.NET para guardar o estado dos controlos da página entre PostBacks.

O ViewState permite guardar todos os tipos de Objectos de .NET e as nossas próprias classes, desde que estajam marcadas com o atributo [Serializable].

O ViewState pode ser desactivado por controlo, por página ou por Site.

Para guardar dados no View State utilizamos a propriedade:

ViewState["NomeIdenfificativo"] = "Valor";

Para aceder ao View State:

string ValorViewState = ViewState["NomeIdenfificativo"].ToString();

Lembrar que o ViewState retorna um objecto, logo temos de fazer um “cast” para o tipo de objecto que queremos.

3. QueryString

Uma das desvantagens do ViewState, é o facto de só existir no contexto de uma página. Aqui entram as QueryStrings, permitem enviar informação entre páginas.

Este mecanismo é muito utilizado, por exemplo em motores de busca.

http://www.google.pt/search?q=pplware

A QueryString é o pedaço de texto a seguir ao “?”. Neste caso define uma única variável “q”, que contém o valor “pplware”.

A vantagem da QueryString é ser leve e não trazer nenhum fardo para o servidor. A desvantagem é os valores estarem visiveis para o utilizador e podem ser alterados.

Utilizar a QueryString:

string valor = "teste";   Response.Redirect("pagina.aspx?variavel=" + valor);

Receber valores de QueryString:

string valor = Request.QueryString["variavel"];
4. Cookies

São pequenos ficheiros que são criados no disco do cliente(ou na memória do Browser se forem temporários). As vantagens dos Cookies, podem ser utilizados por qualquer página do site e podem ser mantidos entre visitas. Estão limitados em termos de tamanho e de tipo de objectos que se pode guardar (string). Tem de se ter muita atenção, especialmente agora que estão cada vez mais a ser utilizados smartphones para aceder à internet, pois estes não permitem cookies.

Para utilizar os Cookies, usamos o Request para aceder e o Response para guardar.

HttpCookie cookie = new HttpCookie("Preferencias");   cookie["Lingua"] ="PT";   cookie["Pais"] ="PT";   Response.Cookies.Add(cookie);

Um cookie adicionado desta maneira, persiste até o browser ser encerrado. Para persistir tem de se definir a propriedade:

cookie.Expires = DateTime.Days.Add(1);

Para aceder a um cookie:

HttpCookie cookie = Reques.Cookie["Preferencias"];   string Pais = cookie["Pais"];

Para remover um cookie definimos a propriedade “Expires” com uma data que já passou.

5. Session

É o peso pesado do State Management. Permite que as informações persistam em todas as páginas do site. Cada utilizador que entra no site tem um SessionId diferente o que permite guardar informações por utilizador. A Session tem um peso grande para a memória do servidor.

Para guardar o SessionId entre Requests é utilizado um cookie chamado “ASP.NET_SESSIONID”. Se o browser não suportar cookies, é utilizado QueryString.

Este cookie só é criado quando guardamos algo na sessão, até lá, é sempre gerado um novo SessionId a cada Request.

Utilizar Session:

Session["Variavel"] ="valor";   string valor = Session["Variavel"].ToString();

É sempre necessário fazer “cast” para o tipo de objecto.

A sessão é global para toda a aplicação por utilizador. A sessão perde-se quando o utilizador fechar o browser, a aplicação fizer Restart ou terminar a sessão utilizando o método Session.Abandon();

Podemos configurar o comportamento da Sessão no Web.config. No atributo “SessionState”, podemos definir o timeout, o modo de guardar a sessão (memória do servidor, sql server, state server), se utiliza cookies, etc.

6. Application

Semelhante à Session mas, permite que os valores guardados sejam acedidos por qualquer utilizador da nossa aplicação. Esses valores perdem-se quando a aplicação fizer um Restart à pool.

Uma utilização corrente é contabilizar quantos utilizadores estão a utilizar a aplicação nesse momento, utilizando o global.asax.

Para utilizar a Application:

Application["Variavel"] = "valor";   string valor = Application["Variavel"].ToString();
7. Resumo

O State Management é a arte de reter informação entre Requests. Geralmente a informação é “user-specific” como por exemplo, items do carrinho de compras, username, nivel de acesso), mas por vezes pode ser global, como estatisticas que fazemos track no decorrer da aplicação. Como o ASP.NET utiliza uma arquitectura desconectada, é sempre preciso implicitamente indicar que queremos guardar/receber a informação a cada Request.

A ferramente que escolhemos para guardar estado pode ter um grande impacto na escalabilidade, performance e segurança da nossa aplicação.

Por hoje damos o tutorial por terminado. Para a semana vamos começar a desenhar a nossa aplicação. Caso tenham alguma questão já sabem, deixem um comentário em baixo.