Resumo do Livro Hands-On Network Programming with C# and .NET Core - Parte 1
Esse artigo será um de muitos onde irei resumir o livro Hands-On Network Programming with C# and .NET Core. Serão alguns artigos onde abordarei o aprendizado adquirido por meio desse livro.
Redes
Em suas primeiras páginas, o conceito de network(rede) é mostrado como nada mais que vários dispositivos conectados e por meio dessa conexão podem trocar informações e compartilham recurso. No livro não cita, mas para incrementar o conhecimento temos algumas classificações para redes. Vale lembra que estamos nos retratando de redes de computadores. São elas:
- LAN (Local Area Network): Rede local, como em um escritório ou casa.
- WAN (Wide Area Network): Rede de longa distância, como a internet.
- Wi-Fi Networks: Redes sem fio que permitem a conexão de dispositivos sem a necessidade de cabos físicos.
Topologias
As topologias de rede referem-se à estrutura ou arranjo físico e lógico dos componentes de uma rede de comunicação, como computadores, switches, roteadores e outros dispositivos. Existem várias topologias, cada uma com suas características e aplicações específicas. Aqui estão as principais:
- Topologia Ponto a Ponto: Conexão direta entre dois dispositivos, como computadores ou servidores.
- Topologia Linear (ou Cadeia de Margaridas): Um tipo de topologia que se assemelha a uma linha ou cadeia, onde cada dispositivo está conectado a outro, formando um “elo”.
- Topologia de Ônibus: Todos os dispositivos estão conectados a um único cabo central (o “barramento”), que transporta os sinais de dados.

- Topologia Estrela: Todos os dispositivos se conectam a um ponto central, geralmente um switch ou hub. É a topologia mais comum em redes locais (LANs).

- Topologia Anel: Os dispositivos são conectados em um formato de anel fechado, onde os dados circulam em uma direção (ou em ambas, em versões mais avançadas).

- Topologia Malha: Cada dispositivo da rede se conecta diretamente a todos os outros dispositivos, formando, múltiplos caminhos de comunicação.

- Topologias Híbridas: Combinação de duas ou mais topologias diferentes em uma única rede, para atender a necessidades específicas de desempenho, escalabilidade e redundância.
Namespace System .NET
Esse namespace do .NET é onde se encontra as principais classes para trabalhar com a rede. Nesse namespace encontramos classes para:
- Resolução de nomes de domínios e acesso DNS
- As classes abstratas
WebRequest
eWebResponse
e as implementações comuns comoFtpWebRequest
eHttpWebRequest
- Resolução e definição para IP
Alguns sub-namespaces
System.Net.Http
: uma classe de utilitário usada para fornecer mensagens e interações compatíveis com padrões HTTP no .NET Core. Algumas das abstrações que fazem parte desse namespace é a interfaceIHttpClientFactory
, a classeHttpClient
,HttpRequestMessage
que representa a requisição http, etc.System.Net.NetworkInformation
: fornece dados de tráfego, informações de endereço e outros detalhes sobre o nó host na rede.System.Net.Security
: fornece comunicação em rede segura e confiável e compartilhamento e acesso de recursos.System.Net.Sockets
: expõe o acesso gerenciado do .NET Core à interface do WinSock. Além disse temos classes como aTcpListener
que nos permite criar um servidor TCP.
Os primeiros endereços de rede
Os primeiros endereços foram surgir no setor de telecomunicações. Na época do surgimento da telecomunicação, os engenheiros tiveram o desafio de criar algo que permitisse que cada dispositivo tivesse sua identificação única para ser possível a entrega de mensagens de forma que chegasse ao destino correto. Com isso, eles criaram os números telefônicos. Ao número telefônico foi adicionado o código de área que tem a responsabilidade de rotear os números para facilitar a entrega da mensagem(ligação). Porém, para um ser humano lembrar de tantos números telefônicos seria impossível e foi aí que surgiu a lista telefônica onde se encontrava o número de telefone vinculado ao nome da pessoa / endereço e isso ajudou a mapear os números telefônicos. Voltado a rede de computadores, precisávamos também que cada dispositivo conectado a uma rede obtivesse um identificador único que ficou conhecido como IP, mas da mesma forma que era difícil decorar números telefônicos, também era e é difícil decorar IPs.
Foi assim que surgiu a “lista telefônica” para computadores, chamado DNS. Graças a esse serviço, hoje conseguimos acessar sites por meio do domínio como, por exemplo, o www.youtube.com.br e o DNS fica encarregado de ver qual IP está vinculado ao domínio e fazer e retornar ele para nós. Imagina termos que sempre colocar o número do IP ao invés do domínio, que tristeza né!? Agradeça ao DNS.
Mas o que é DNS?
É uma rede distribuída e descentralizada de servidores responsáveis por traduzir os nomes de domínio para endereços IPs.
Uma informação legal é, atualmente temos 13 servidores DNS, mas não são apenas máquinas físicas e sim grupos de servidores identificados pelas letras A, B, C, D, E, F, G, H, I, J, K, L e M onde em cada região há replicas desses servidores para termos disponibilidade. Neste site é possível ver como está separado ao redor do mundo.
DNS no .NET
Dentro do .NET, conseguimos trabalhar com DNS por meio da classe DNS do namespace System.Net
. Por meio dela, conseguimos descobrir através do domínio, quais são os ips registrados para tal domínio.
using System;
using System.Net;
public class HelloWorld
{
public static void Main(string[] args)
{
var domainEntry = Dns.GetHostEntry("google.com");
Console.WriteLine(domainEntry.HostName);
foreach(var ip in domainEntry.AddressList) {
Console.WriteLine(ip);
}
}
}
O código deve retornar como resultado as seguintes informações:
google.com
172.217.214.102
172.217.214.113
172.217.214.139
172.217.214.138
172.217.214.101
172.217.214.100
Como a Google usa balanceamento de carga para suportar as requisições, cada IP desse é uma máquina que foi registro ao domínio da google.com, mas não quer dizer que tem apenas 6 servidores físicos, o que seria impossível por lidar com todo o tráfego. A Google usa a tecnologia Anycast que permite que um endereço IP seja usado por vários servidores. Fique a vontade para pesquisar por Anycast IP address.
Como o DNS funciona?
O DNS possuí alguns componentes, são eles:
- Registradores de Domínio (ex.: GoDaddy, Amazon Route 53) que vendem nomes de domínio.
- Registros DNS (ex.: A, AAAA, CNAME) que associam domínios a endereços IP.
- Arquivos de Zona, que armazenam registros DNS.
- Servidores de Nome, que respondem a consultas DNS.
- Domínios de Nível Superior (TLD), como
.com
e.org
. - Domínios de Segundo Nível (SLD), como
amazon.com
.
Agora vamos analisar com identificar alguns componentes em uma URL. A URL será essa abaixo:
https://api.blog.example.com.
Componente | Parte na URL | Explicação |
---|---|---|
Protocolo | https:// |
Especifica o protocolo de comunicação |
Subdomínio | api.blog. |
api e blog são subdomínios dentro da hierarquia do domínio. |
SLD (Segundo Nível) | example |
O nome do domínio principal registrado. |
TLD (Domínio de Nível Superior) | .com |
O domínio de nível superior (TLD). |
Root (Raiz) | . |
Indica a raiz do DNS, raramente visível na navegação comum. |
Certo, mas como tudo isso se encaixa? Borá lá!
Antes de a nossa requisição chegar nos servidores responsáveis em resolver o nosso domínio, há algumas camadas de cache que evite que façamos dezenas de solicitações desnecessárias.
Cache nos navegadores
Começamos pelo navegador que mantém um cache dos domínios que já foram resolvidos. Podemos acessar essas informações a partir desse comando: brave://net-internals/#dns
. No meu caso estou usando o navegador Brave, caso esteja usando o Chrome use o chrome://net-internals/#dns
. Para cada navegador irá variar a forma de acessar. Ao acessar você verá uma tela semelhante a essa:

Cache no Windows
O Windows também mantém o seu cache interno. Conseguimos ver os domínios já resolvidos com o seguinte comando:
ipconfig /displaydns
O resultado será todos os domínios já resolvidos. Temos a opção de limparmos esses caches com o seguinte comando:
ipconfig /flushdns
No Windows ainda temos a opção de configurar manualmente uma resolução de domínio por meio do arquivo host
que fica em C:\Windows\System32\drivers\etc\
. Baseado nessas informações, conseguimos bloquear acesso a sites colocando um IP falso como, por exemplo, 0.0.0.0
para o domínio que você deseja. Perceba que a resolução de domínio segue uma trajetória que é:
1 - Cache do Navegador → 2 - Cache do Windows → 3 - Arquivo Host → 4 - Servidor DNS configurado no Windows (Local DNS Server) → 5 - Consulta em servidores externos
Para vermos qual o servidor DNS está configurado no Windows, podemos usar o comando nslookup
no cmd que deve aparecer algo como isso.

Caso aparece um IP privado como 192.168...
, provavelmente em sua configuração de rede a atribuição de servidor DNS está automática. Caso queira utilizar o servidor de DNS da Google (8.8.8.8, 8.8.4.4) ou da Cloudflare (1.1.1.1, 1.0.0.1), altere sua configuração de rede ou veja esse artigo.
Funcionamento
Mas e se não houver cache em nenhum desses passos, o que acontece?
1 - Servidor DNS Local: Envia a solicitação para a internet.
2 - Servidor DNS Raiz: Redireciona para o servidor do TLD (.com
, .org
, etc.).
3 - Servidor TLD: Aponta para o servidor responsável pelo domínio específico.
4 - Servidor Autoritativo (SLD): Fornece o IP correto do domínio, que será retornado ao navegador.