Conceitos básicos de redes
A figura abaixo ilustra uma rede de computadores simples, com quatro hosts conectados entre si.
Figura 2-1: Quatro hosts conectados formando uma rede de computadores.
Rede
Uma rede de computadores, ou simplesmente rede, nada mais é do que um conjunto de computadores que, mesmo separados fisicamente, podem trocar informações entre si.
Por “computadores”, eu quero dizer qualquer dispositivo de computação: Desktops, celulares, consoles de videogame, Smart TVs, carros, etc. Muitas vezes, esses computadores que participam da rede são chamados de hosts.
Existem redes privadas, que são gerenciadas e acessadas por uma organização, e redes públicas, que são acessíveis por múltiplas organizações. A rede pública mais importante de todas é a Internet.
A troca de informações numa rede não pode ser feita de qualquer forma. Para dois computadores trocarem informações, é importante que ambos falem a mesma língua e sigam as mesmas regras, o que nos leva ao próximo conceito.
Protocolo
Um conceito que está presente em toda a disciplina de redes é o de protocolo: um conjunto de regras que duas ou mais partes devem seguir fielmente para atingir um objetivo comum. Para um protocolo funcionar é necessário que todas as partes estejam cientes dele e o sigam.
Um protocolo de rede é um protocolo onde as partes são computadores! E as regras dos protocolos de rede geralmente seguem mais ou menos a mesma cara, geralmente fazendo alguma dessas funções:
- Definem quais são os tipos de mensagens possíveis que as partes podem trocar
- Definem qual o conteúdo das mensagens trocadas.
- Como as partes são computadores, esse conteúdo é sempre em binário (1s e
0s). Então uma mensagem possível é
01110110001que pode representar umOLÁ, por exemplo.
- Como as partes são computadores, esse conteúdo é sempre em binário (1s e
0s). Então uma mensagem possível é
- Definem o fluxo válido das mensagens.
- Definem os erros e/ou situações de ajuste, e como proceder.
Em redes, temos vários protocolos, cada qual com um objetivo específico. Por exemplo, alguns protocolos que são usados hoje em dia em várias aplicações são:
- O SMTP (Simple Mail Transfer Protocol), que é o protocolo que permite envio e transmissão de e-mails entre computadores. É o que o Gmail, Outlook, entre outros usam quando precisam enviar um e-mail.
- O BitTorrent, que é o protocolo que permite a transmissão de torrents entre computadores. É o que aplicações como qBittorrent, µTorrent, entre outros usam.
- O DNS (Domain Name System), que é o protocolo que permite que nossos
celulares e computadores consigam traduzir um nome como
sigaa.ufs.br, que só faz sentido para humanos, para algo que possa ser entendido por máquinas.
Os protocolos são definidos em documentos de texto, conhecidos como RFCs (Request for Comments). Por exemplo, o SMTP é definido na RFC 5321, enquanto o DNS é definido na RFC 1035.
Camadas
Os protocolos não são todos iguais. Isso ocorre pois certos protocolos ficam responsáveis por apenas algumas partes da comunicação, enquanto outros ficam responsáveis por outras.
Por exemplo, considere o caso em que o protocolo SMTP seja utilizado pelo servidor do Gmail para enviar um e-mail para o servidor do Outlook.
Não faz sentido que a RFC do SMTP responda as seguintes perguntas:
- Como deve ser feita a transmissão física dos bits entre dois computadores? Será usado fio de cobre, fibra ótica ou tranmissão sem-fio (ondas de rádio). Qual o nível de voltagem que será usado para representa um bit 0 e um bit 1? Ou que deverá ser feito se acontecer alguma interferência eletromagnética na hora de transferir esses sinais elétricos. Essas são preocupações físicas, sem relação direta com troca de emails.
- Como o hardware de um dispositivo deve distinguir entre os sinais elétricos destinados para diferentes conexões num mesmo computador? Quando os sinais elétricos de uma conexão terminam e o de outra começam? Como garantir que os dados sejam direcionados para o dispositivo correto, dentro de uma rede local? Essas são preocupações de enlace, sem relação direta com troca de emails.
- Qual rota de computadores deve ser seguida para um certa conexão? Como diferenciar globalmente dois computadores? Como redes de diferentes organizações/empresas devem se conectar? Essas são preocupações a nível de redes em si, sem relação direta com troca de emails.
- Como as conexões são representadas no sistema operacional de cada dispositivo? Como associar um processo do sistema operacional a uma conexão de rede? Devemos garantir que o processo do computador de destino recebeu a última mensagem? Se sim, como? Como regular a velocidade da transmissão para evitar que a qualidade da rede seja degradada? Essa são preocupações de transporte, sem relação direta com troca de emails.
Nenhuma dessas preocupações dizem respeito a troca de emails, mas todas devem ser respondidas antes que qualquer email seja enviado. Além disso, essas preocupações não devem ser respondidas apenas para a troca de emails, mas também para outros tipos de aplicações, como transferência de arquivos, navegar pela web, DNS, BitTorrent, etc.
De fato, cada uma dessas preocupações se encaixa em uma camada.
Figura 2-2: As 5 camadas do modelo TCP/IP, da mais baixa (física) à mais alta (aplicação).
Uma camada de rede é o conjunto de preocupações e responsabilidades que podem ser resolvidas em conjunto, por um mesmo protocolo.
Elas recebem o nome de camadas pois certas responsabilidades precisam ser resolvidas anteriormente, criando uma hierarquia ou camada de responsabilidades. Um protocolo numa camada \( L \) precisa que um protocolo na camada \( L - 1 \) já tenha resolvido os problemas sob sua responsabilidade. De maneira geral, dizemos que a camada \( L - 1 \) provê serviços para a camada \( L \).
Modelos de Rede: OSI e TCP/IP
Um modelo de rede é uma forma específica de definir quantas e quais são as camadas de rede. Existem dois modelos de rede: o modelo OSI e o modelo TCP/IP.
O modelo OSI é utilizado em alguns contextos acadêmicos e a sua numeração (de 1 a 7) é a que as pessoas geralmente utilizam para se referir as camadas. Já o modelo TCP/IP é o que é de fato implementado na Internet e utilizado na prática.
Abaixo, descrevemos as 5 camadas do modelo TCP/IP, a partir da mais básica (baixo nível):
- Camada Física
- Camada que se preocupa em como será feita a transmissão física dos sinais que carregam os dados na rede. É onde são projetados os padrões dos meios de transmissão, como cabos, ondas de radio-frequência, etc.
- Principais protocolos dessa camada: IEEE 802.3 (redes cabeadas, também conhecido como Ethernet), IEEE 802.11 (redes sem fio do tipo Wi-fi), IEEE 802.15 (redes sem fio do tipo Bluetooth). Importante notar que esses protocolos cobrem ambas a camada física e de enlace, pois essas possuem uma dependência muito grande entre si.
- Camada de Enlace
- Camada que se preocupa no nível lógico imediatamente acima da transmissão física, em particular na conexão ponto-a-ponto (o enlace ou link) entre dois hosts.
- Principais protocolos dessa camada: IEEE 802.3 (redes cabeadas, também conhecido como Ethernet), IEEE 802.11 (redes sem fio do tipo Wi-fi), IEEE 802.15 (redes sem fio do tipo Bluetooth).
- Camada de Rede
- Camada que se preocupa em definir o escopo de uma rede e como será feita a comunicação entre duas redes. Define um endereço lógico para cada host chamado endereço IP (Internet Protocol). É esse endereço que é utilizado para rotear as comunicações entre os hosts.
- Principais protocolos dessa camada: IPv4, IPv6, ICMP, ICMPv6, etc.
- Camada de Transporte
- Camada que se preocupa na comunicação fim-a-fim entre dois processos do sistema operacional de cada host.
- Principais protocolos dessa camada: TCP, UDP, SSL/TLS (baseado no TCP), QUIC (baseado no UDP).
- Camada de Aplicação
- Camada que se preocupa em definir o funcionamento das aplicações de rede, que entram em contato direto com o usuário. Troca de emails, envio de arquivos, impressão e navegação web são exemplos de “aplicações” aqui, pois representam as ações que o usuário-fim quer realizar.
- Principais protocolos dessa camada: DNS, DHCP, HTTP, SMTP, FTP, WebSockets, BitTorrent.
Endereço de Rede/Endereço IP
Dentro de uma rede de computadores, é necessário que um participante dela (um host) saiba como identificar e diferenciar uma conexão que deve ser direcionada para o host A de outra que deve ser direcionada para o host B. Para resolver esse problema, foram criados os endereços de rede.
Cada host numa rede é identificado pelo seu endereço de rede. Um endereço de rede é simplesmente uma sequência de números que pode ser interpretada para identificar hosts.
No modelo TCP/IP, o endereço de rede segue o formato dos protocolos da camada de rede: IPv4 (Internet Protocol version 4) e/ou IPv6 (Internet Protocol version 6). Nesses casos, um nome alternativo para o endereço de rede é “endereço IP” ou apenas “IP”.
Vamos ver um exemplo, seguindo o formato do protocolo IPv4:
- Um host
Atem o endereço de rede10.10.3.47. Ele está se comunicando com dois outros hosts:B(cujo endereço é10.10.3.3) eC(cujo endereço é10.10.5.98). - Sempre que
Aquiser mandar uma mensagem paraB, ele manda um pacote cujo endereço de destino é10.10.3.3.Cnão é o destino dessa mensagem.
Figura 2-3: Host A usa o endereço IP de destino para direcionar pacotes para B ou C.
Note que se um mesmo host está conectado em duas ou mais redes distintas (como um roteador que roteia pacotes entre duas ou mais redes), ele terá mais de um endereço IP.
Existem dois endereços IP especiais, chamados de endereços de loopback, que
podem ser usados por um computador para se referir a ele mesmo. Um é o IPv4
127.0.0.1. O outro é o IPv6 ::1. Esses endereços são úteis na fase de
desenvolvimento, onde executamos uma aplicação na nossa própria máquina local.
Dessa forma, podemos nos comunicar com a aplicação através dos endereços de
loopback, simulando um host externo.
Serviços de Rede
Enquanto na camada de rede os hosts de origem e destino são representados por meio de endereços IP, na camada imediatamente acima, a camada de transporte, um mesmo host pode oferecer vários serviços de rede. Um serviço de rede é um programa cuja entrada é obtida a partir de requisições de outros hosts (chamados de clientes) que chegam por meio de uma rede de computadores.
Ou seja, um serviço de rede é um processo do sistema operacional que tem a capacidade de escutar por requisições que vêm de uma rede de computadores e responder a essas requisições.
Cada serviço de rede executa algum protocolo da camada de aplicação que os dois lados da comunicação, tanto servidor (o host que executa/oferece o serviço de rede) quanto os clientes (os hosts remotos que mandam requisições e solicitam o serviço de rede), precisam saber falar.
Portas
Da mesma forma que podemos ter múltiplos processos em execução no sistema operacional, podemos ter múltiplos serviços de rede em execução. Portanto, o sistema operacional precisa distinguir o tráfego de rede que vai para um serviço de rede \( A \) do tráfego que vai para outro serviço de rede \( B \). Ou seja, o sistema operacional precisa demultiplexar1 o tráfego de rede.
A maneira pela qual o SO faz essa demultiplexação é utilizando portas de rede.
Cada porta de rede é um par (Protocolo de Transporte, Número de Porta) que
identifica a qual serviço de rede um certo tráfego pertence. Nesse par:
-
Protocolo de Transporteé um dos dois protocolos básicos da camada de transporte: TCP (Transmission Control Protocol) ou UDP (User Datagram Protocol).O TCP é um protocolo orientado à conexão, o que significa que ele garante que um lado da comunicação saiba que as mensagens enviadas de fato chegaram ao destino e na ordem correta. Além disso, ele possui alguns controles para garantir a qualidade da rede. No entanto, é um protocolo que possui mais overhead (sobrecarga), isto é, custo computacional.
Já o UDP é um protocolo não-orientado à conexão, o que significa que os participantes da comunicação não tem garantia sobre se as mensagens chegaram na ordem correta ou se elas sequer chegaram. Para compensar, é um protocolo com consideravelmente menos overhead.
-
Número de Portaé um número de 16 bits (vai de 0 a 65535). Esse número serve para permitir que, em um mesmo computador, múltiplos serviços de rede de um mesmo protocolo de transporte possam estar em execução em um dado momento.
Cada serviço de rede em execução num dado host é mapeado para uma porta de rede, e a porta atua como um endpoint de comunicação. Por exemplo, num mesmo computador/host podemos ter 3 serviços de rede em execução:
- O serviço de rede do Spotify para fazer streaming de música usando a porta TCP/4070.
- O serviço de rede para enviar emails (protocolo SMTP) usando a porta TCP/25.
- O serviço de rede para transferir arquivos (protocolo FTP) usando a porta TCP/21.
Figura 2-4: O SO usa portas para direcionar o tráfego ao serviço de rede correto.
Certas portas são chamadas de portas bem-conhecidas (well-known ports), pois geralmente são usadas para os serviços de rede (protocolos) mais comuns. Essas portas usam números que vão de 0 a 1023. Por exemplo, a porta TCP/80 é sempre utilizada para o protocolo HTTP. A porta TCP/443 é sempre utilizada para o protocolo HTTPS. A porta UDP/53 é muito usada para o protocolo DNS. E por aí vai.
Hostname
Apesar dos computadores utilizarem endereços IP, é muito mais fácil para um
humano lembrar de mail.google.com do que lembrar do IP 142.250.219.37.
Portanto, todo host costuma ter um hostname, que é o nome legível do host,
além de um IP. Por exemplo, suponha que uma organização tenha os seguintes
hosts:
- Um host para o seu portal web. O hostname do host é
wwwe o IP é10.100.3.2. - Um host para o seu serviço de e-mail. O hostname do host é
maile o IP é10.100.3.3. - Um host para o seu serviço de API2. O hostname do host é
apie o IP é10.100.3.4.
Domínio
Para agrupar os hostnames de todos os hosts que pertencem a uma mesma organização ou estrutura, é usado um domínio: uma sequência de nomes (legíveis por humanos), cujas partes são separadas por pontos.
Geralmente, a parte final de um domínio é o chamado de TLD (Top-Level Domain), que é comum a várias organizações que compartilham uma mesma característica. Então, por exemplo:
- O domínio
.ufs.bré utilizado pela organização UFS. Seu TLD é.br, geralmente usado por organizações do Brasil. - O domínio
.globo.comé utilizado pela organização Globo. Seu TLD é.com, que vem de company, geralmente usado por organizações empresariais. Note que mesmo sendo uma organização brasileira, o domínio da Globo não está no TLD.br.
FQDN
Sempre que alguém quer se referir a um host específico de uma organização, evitando qualquer ambiguidade, ele utiliza o FQDN (Fully Qualified Domain Name) do host, que nada mais é do que a junção de hostname + domínio.
Figura 2-5: Um FQDN é a junção de hostname + domínio. O TLD é a parte final do domínio.
O FQDN também pode ser usado para obter o endereço IP do host. Alguns exemplos:
- O FQDN
www.google.comrefere-se ao host que oferece o serviço do site do Google. - O FQDN
g1.globo.comrefere-se ao host que oferece o serviço g1 da Globo. - O FQDN
ge.globo.comrefere-se ao host que oferece o serviço ge da Globo.
DNS
Lembre-se que os computadores não trabalham com hostnames, domínios ou FQDNs,
mas sim com endereços IP. Portanto, sempre que digitamos algo como
www.google.com, o computador precisa traduzir esse FQDN para um endereço IP.
Essa tradução (ou resolução) de nomes só é possível graças ao protocolo DNS
(Domain Name System). Sempre que digitamos www.google.com, o DNS entra em
ação e traduz esse FQDN para algum endereço IP (exemplo: 142.250.219.34).
Figura 2-6: O cliente consulta o DNS para obter o IP e então conecta-se ao servidor.