Introdução
Compreender redes é importante para qualquer pessoa que administre um servidor. Não só é essencial para colocar seus serviços online e funcionando sem problemas, mas também lhe dá a visão para diagnosticar problemas.
Este artigo fornecerá uma visão geral de alguns conceitos comuns de redes. Discutiremos terminologia, protocolos comuns e as responsabilidades e características das diferentes camadas de rede.
Este guia é agnóstico em relação ao sistema operacional, mas deve ser muito útil ao implementar recursos e serviços que utilizam redes em seu servidor.
Glossário de Redes
Primeiro, definiremos alguns termos comuns que você encontrará ao longo deste guia e em outros guias e documentação relacionados a redes.
Esses termos serão explicados com mais detalhes nas seções apropriadas que seguem:
-
Conexão: Em redes, uma conexão se refere a informações relacionadas que são transferidas por uma rede. De maneira geral, uma conexão é estabelecida antes da transferência de dados (seguindo os procedimentos estabelecidos em um protocolo) e pode ser desfeita ao final da transferência de dados.
-
Pacote: Um pacote é a menor unidade que é intencionalmente transferida por uma rede. Ao comunicar-se através de uma rede, os pacotes são os envelopes que transportam seus dados (em pedaços) de um ponto de extremidade a outro.
Os pacotes possuem uma porção de cabeçalho que contém informações sobre o pacote, incluindo a origem e o destino, timestamps, saltos de rede, etc. A porção principal de um pacote contém os dados reais sendo transferidos. Às vezes, é chamada de corpo ou carga útil.
- Interface de Rede: Uma interface de rede pode se referir a qualquer tipo de interface de software para hardware de rede. Por exemplo, se você tem duas placas de rede em seu computador, você pode controlar e configurar cada interface de rede associada a elas individualmente.
A network interface may be associated with a physical device, or it may be a representation of a virtual interface. The “loopback” device, which is a virtual interface available in most Linux environments to connect back to the same machine, is an example of this.
-
LAN: LAN significa “rede de área local”. Refere-se a uma rede ou a uma parte de uma rede que não é acessível publicamente pela internet. Uma rede doméstica ou de escritório é um exemplo de uma LAN.
-
WAN: WAN significa “rede de área ampla”. Significa uma rede muito mais extensa do que uma LAN. Embora WAN seja o termo relevante para descrever redes grandes e dispersas em geral, geralmente se refere à internet como um todo.
Se uma interface estiver conectada à WAN, geralmente é assumido que ela é acessível pela internet.
- Protocolo: Um protocolo é um conjunto de regras e padrões que definem uma linguagem que dispositivos podem usar para se comunicar. Existem muitos protocolos amplamente utilizados em redes, e eles são frequentemente implementados em camadas diferentes.
Alguns protocolos de baixo nível são TCP, UDP, IP e ICMP. Alguns exemplos familiares de protocolos de camada de aplicação, construídos sobre esses protocolos mais baixos, são HTTP (para acessar conteúdo da web), SSH e TLS/SSL.
-
Porta: Uma porta é um endereço em uma única máquina que pode ser associado a um software específico. Não é uma interface física ou localização, mas permite que seu servidor se comunique usando mais de uma aplicação.
-
Firewall: Um firewall é um programa que decide se o tráfego que entra ou sai de um servidor deve ser permitido. Um firewall geralmente funciona criando regras para qual tipo de tráfego é aceitável em quais portas. Geralmente, os firewalls bloqueiam portas que não são utilizadas por uma aplicação específica em um servidor.
-
NAT: NAT significa tradução de endereço de rede. É uma maneira de reempacotar e enviar solicitações recebidas a um servidor de roteamento para os dispositivos ou servidores relevantes em uma LAN. Isso é geralmente implementado em LANs físicas como uma forma de rotear solicitações por meio de um endereço IP para os servidores de backend necessários.
-
VPN: VPN significa rede virtual privada. É um meio de conectar LANs separadas através da internet, mantendo a privacidade. Isso é usado para conectar sistemas remotos como se estivessem em uma rede local, muitas vezes por motivos de segurança.
Existem muitos outros termos com os quais você irá se deparar, e esta lista não é exaustiva. Explicaremos outros termos conforme necessário. Neste ponto, você deve entender alguns conceitos de alto nível que nos permitirão discutir melhor os tópicos a seguir.
Camadas de Rede
Embora a rede seja frequentemente discutida em termos de topologia de forma horizontal, entre hosts, sua implementação é feita em camadas de maneira vertical dentro de qualquer computador ou rede.
O que isso significa é que existem várias tecnologias e protocolos que são construídos um sobre o outro para que a comunicação funcione. Cada camada sucessiva, mais alta, abstrai um pouco mais os dados brutos.
Também permite que você aproveite as camadas inferiores de novas maneiras sem ter que investir tempo e energia no desenvolvimento dos protocolos e aplicativos que lidam com esses tipos de tráfego.
A linguagem que usamos para falar sobre cada um dos esquemas de camadas varia significativamente dependendo do modelo que você utiliza. Independentemente do modelo usado para discutir as camadas, o caminho dos dados é o mesmo.
Conforme os dados são enviados de uma máquina, eles começam no topo da pilha e filtram para baixo. No nível mais baixo, a transmissão real para outra máquina ocorre. Neste ponto, os dados viajam de volta através das camadas do outro computador.
Cada camada tem a capacidade de adicionar sua própria “capa” em torno dos dados que recebe da camada adjacente, o que ajudará as camadas subsequentes a decidirem o que fazer com os dados quando são transferidos.
Modelo TCP/IP
O modelo TCP/IP, mais conhecido como suite de protocolos da Internet, é um modelo de camadas amplamente adotado. Ele define as quatro camadas separadas:
-
Aplicação: Neste modelo, a camada de aplicação é responsável por criar e transmitir dados do usuário entre aplicações. As aplicações podem estar em sistemas remotos e devem parecer operar como se estivessem localmente para o usuário final. Essa comunicação é dita ocorrer entre pares.
-
Transporte: A camada de transporte é responsável pela comunicação entre processos. Esse nível de rede utiliza portas para endereçar diferentes serviços.
-
Internet: A camada de internet é usada para transportar dados de nó para nó em uma rede. Essa camada está ciente dos pontos finais das conexões, mas não se preocupa com a conexão real necessária para ir de um lugar para outro. Endereços IP são definidos nesta camada como uma maneira de alcançar sistemas remotos de forma endereçável.
-
Link: A camada de link implementa a topologia real da rede local que permite à camada de internet apresentar uma interface endereçável. Ela estabelece conexões entre nós vizinhos para enviar dados.
Como você pode ver, o modelo TCP/IP é abstrato e fluido. Isso o tornou popular para implementação e permitiu que se tornasse a maneira dominante de categorizar as camadas de rede.
Interfaces
Interfaces são pontos de comunicação de rede para o seu computador. Cada interface está associada a um dispositivo de rede físico ou virtual.
Geralmente, seu servidor terá uma interface de rede configurável para cada placa Ethernet ou wireless que você possuir.
Além disso, ele definirá uma interface de rede virtual chamada “loopback” ou interface localhost. Isso é usado como uma interface para conectar aplicativos e processos em um único computador a outros aplicativos e processos. Você pode ver isso referenciado como a interface “lo” em muitas ferramentas.
Muitas vezes, os administradores configuram uma interface para lidar com o tráfego para a internet e outra interface para uma LAN ou rede privada.
Em datacenters com rede privada ativada (incluindo DigitalOcean Droplets), seu VPS terá duas interfaces de rede. A interface “eth0” será configurada para lidar com o tráfego da internet, enquanto a interface “eth1” operará para se comunicar com uma rede privada.
Protocolos
A rede funciona empilhando vários protocolos uns sobre os outros. Dessa forma, um único dado pode ser transmitido usando vários protocolos encapsulados uns dentro dos outros.
Começaremos pelos protocolos implementados nas camadas inferiores da rede e avançaremos para os protocolos com maior abstração.
Controle de Acesso ao Meio
O Controle de Acesso ao Meio é um protocolo de comunicação utilizado para distinguir dispositivos específicos. Cada dispositivo deve receber um endereço de controle de acesso à mídia (endereço MAC) único e fixo quando é fabricado, o que o diferencia de todos os outros dispositivos na internet.
Endereçar o hardware pelo endereço MAC permite fazer referência a um dispositivo por um valor único, mesmo quando o software acima pode alterar o nome desse dispositivo específico durante a operação.
O endereçamento MAC é um dos únicos protocolos da camada de link de baixo nível com os quais você provavelmente interagirá regularmente.
IP
O protocolo IP é um dos protocolos fundamentais que permitem o funcionamento da internet. Os endereços IP são únicos em cada rede e permitem que as máquinas se comuniquem entre si em uma rede. Ele é implementado na camada de internet no modelo TCP/IP.
As redes podem ser interligadas, mas o tráfego deve ser roteado ao atravessar os limites da rede. Este protocolo assume uma rede não confiável e múltiplos caminhos para o mesmo destino, que podem ser alterados dinamicamente.
Existem várias implementações diferentes do protocolo. A implementação mais comum hoje são os endereços IPv4, que seguem o padrão 123.123.123.123
, embora os endereços IPv6, que seguem o padrão 2001:0db8:0000:0000:0000:ff00:0042:8329
, estejam crescendo em popularidade devido ao número limitado de endereços IPv4 disponíveis.
ICMP
ICMP significa Protocolo de Mensagem de Controle da Internet. É usado para enviar mensagens entre dispositivos para indicar sua disponibilidade ou condições de erro. Esses pacotes são usados em uma variedade de ferramentas de diagnóstico de rede, como ping
e traceroute
.
Normalmente, os pacotes ICMP são transmitidos quando um tipo diferente de pacote encontra um problema. Eles são usados como um mecanismo de feedback para comunicações de rede.
TCP
TCP significa protocolo de controle de transmissão. Ele é implementado na camada de transporte do modelo TCP/IP e é usado para estabelecer conexões confiáveis.
O TCP é um dos protocolos que encapsulam dados em pacotes. Em seguida, transfere esses pacotes para a extremidade remota da conexão usando os métodos disponíveis nas camadas inferiores. Na outra extremidade, ele pode verificar erros, solicitar o reenvio de determinadas partes e reagrupar as informações em uma peça lógica para enviar à camada de aplicativo.
O protocolo estabelece uma conexão antes da transferência de dados usando um sistema chamado handshake de três vias. Isso é uma maneira para as duas extremidades da comunicação reconhecerem a solicitação e concordarem com um método para garantir a confiabilidade dos dados.
Após o envio dos dados, a conexão é encerrada usando um handshake de quatro vias semelhante.
O TCP é o protocolo de escolha para muitos dos usos mais populares da internet, incluindo WWW, SSH e email.
UDP
O UDP significa protocolo de datagrama do usuário. É um protocolo companheiro popular do TCP e também é implementado na camada de transporte.
A diferença fundamental entre UDP e TCP é que o UDP oferece transferência de dados não confiável. Não verifica se os dados foram recebidos na outra extremidade da conexão. Isso pode parecer ruim para muitos propósitos, e de fato é. No entanto, também é extremamente importante para algumas funções.
Porque não é necessário esperar pela confirmação de que os dados foram recebidos e forçados a reenviar os dados, o UDP é muito mais rápido que o TCP. Ele não estabelece uma conexão com o host remoto, apenas envia dados sem confirmação.
Por ser uma transação direta, é útil para comunicações como consultas de recursos de rede. Também não mantém um estado, o que o torna excelente para transmitir dados de uma máquina para muitos clientes em tempo real. Isso o torna ideal para VOIP, jogos e outras aplicações que não podem se dar ao luxo de atrasos.
HTTP
O HTTP significa protocolo de transferência de hipertexto. É um protocolo definido na camada de aplicação que forma a base para a comunicação na web.
O HTTP define uma série de verbos que informam ao sistema remoto o que você está solicitando. Por exemplo, GET, POST e DELETE interagem com os dados solicitados de maneira diferente. Para ver um exemplo das diferentes solicitações HTTP em ação, consulte Como Definir Rotas e Métodos de Solicitação HTTP no Express.
DNS
DNS significa sistema de nome de domínio. É um protocolo de camada de aplicação usado para fornecer um mecanismo de nomeação amigável para recursos da internet. É o que vincula um nome de domínio a um endereço IP e permite que você acesse sites pelo nome em seu navegador.
SSH
SSH significa shell seguro. É um protocolo criptografado implementado na camada de aplicação que pode ser usado para se comunicar com um servidor remoto de forma segura. Muitas tecnologias adicionais são construídas em torno desse protocolo por causa de sua criptografia de ponta a ponta e ubiquidade.
Existem muitos outros protocolos que não abordamos e que são igualmente importantes. No entanto, isso deve lhe fornecer uma boa visão geral de algumas das tecnologias fundamentais que tornam a internet e as redes possíveis.
Conclusão
Neste ponto, você deve estar familiarizado com alguns termos de rede e ser capaz de entender como diferentes componentes conseguem se comunicar entre si. Isso deve ajudá-lo a entender outros artigos e a documentação do seu sistema.
Em seguida, para um exemplo de alto nível do mundo real, você pode querer ler Como Fazer Solicitações HTTP em Go.