College Online
0%

IP e Enderecamento

Modulo 4 · Aula 1 ~25 min de leitura Nivel: Intermediario

Video da aula estara disponivel em breve

O protocolo IP

O IP (Internet Protocol) e o protocolo que une todas as redes da Internet. Todo pacote que viaja pela Internet carrega um cabecalho IP com os enderecos de origem e destino. IP e connectionless e best-effort — nao garante entrega, ordem ou integridade (essas garantias vêm do TCP na camada acima).

IPv4: formato e enderecos

Diagrama
Cabecalho IPv4 (20 bytes minimo):

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |    DSCP   |ECN|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|    Fragment Offset      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |       Header Checksum         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Campos importantes:
  Version:     4 (IPv4)
  TTL:         Decrementado a cada roteador. Se chega a 0, pacote e descartado.
               Evita loops infinitos.
  Protocol:    6 = TCP, 17 = UDP, 1 = ICMP
  Source/Dest: Enderecos IP de 32 bits

Enderecos IPv4

Um endereco IPv4 tem 32 bits, representado em notacao decimal com pontos: 192.168.1.100. Cada octeto (8 bits) vai de 0 a 255.

Python
import ipaddress

# Trabalhando com enderecos IPv4
ip = ipaddress.ip_address("192.168.1.100")
print(f"Endereco: {ip}")
print(f"Binario:  {int(ip):032b}")
print(f"Inteiro:  {int(ip)}")
print(f"Privado:  {ip.is_private}")
print(f"Loopback: {ip.is_loopback}")

# Subnetting com CIDR
network = ipaddress.ip_network("192.168.1.0/24")
print(f"\nRede:      {network}")
print(f"Mascara:   {network.netmask}")        # 255.255.255.0
print(f"Hosts:     {network.num_addresses - 2}")  # 254 hosts
print(f"Broadcast: {network.broadcast_address}")  # 192.168.1.255

# Verificar se IP esta na rede
print(f"\n192.168.1.100 na rede? {ip in network}")  # True

Subnetting e CIDR

CIDR (Classless Inter-Domain Routing) usa a notacao /prefixo para indicar quantos bits identificam a rede. Os bits restantes identificam o host.

Diagrama
192.168.1.0/24:
  11000000.10101000.00000001 . 00000000
  |-------- rede (24 bits) ---|-- host (8 bits) --|
  Mascara: 255.255.255.0
  Hosts possiveis: 2^8 - 2 = 254

10.0.0.0/8:
  00001010 . 00000000.00000000.00000000
  |--rede--|-------- host (24 bits) --------|
  Mascara: 255.0.0.0
  Hosts possiveis: 2^24 - 2 = 16.777.214

172.16.0.0/16:
  10101100.00010000 . 00000000.00000000
  |---- rede (16 bits) ---|----- host (16 bits) -----|
  Hosts possiveis: 2^16 - 2 = 65.534

Enderecos privados vs. publicos

Referencia
Faixas de enderecos privados (RFC 1918):
  10.0.0.0/8        (10.0.0.0 - 10.255.255.255)      ~16M hosts
  172.16.0.0/12     (172.16.0.0 - 172.31.255.255)     ~1M hosts
  192.168.0.0/16    (192.168.0.0 - 192.168.255.255)   ~65K hosts

Enderecos especiais:
  127.0.0.0/8       Loopback (localhost)
  0.0.0.0/0         Default route (toda a Internet)
  169.254.0.0/16    Link-local (APIPA, quando DHCP falha)
  224.0.0.0/4       Multicast

NAT (Network Address Translation)

NAT permite que multiplos dispositivos de uma rede privada compartilhem um unico endereco IP publico. O roteador traduz enderecos privados para o endereco publico na saida, e faz a traducao reversa na entrada.

Diagrama
Rede privada (192.168.1.0/24)        Internet
┌──────────────────────┐          ┌─────────────────┐
│ PC1: 192.168.1.10    │          │                 │
│ PC2: 192.168.1.11    │──[NAT]──│  IP publico:    │──> google.com
│ PC3: 192.168.1.12    │ Router   │  200.1.2.3      │
└──────────────────────┘          └─────────────────┘

Tabela NAT no roteador:
  192.168.1.10:5000 <-> 200.1.2.3:40001
  192.168.1.11:5001 <-> 200.1.2.3:40002
  192.168.1.12:5002 <-> 200.1.2.3:40003

NAT resolve a escassez de enderecos IPv4 (4.3 bilhoes de enderecos
nao sao suficientes para todos os dispositivos do mundo).

IPv6

IPv6 usa enderecos de 128 bits (vs 32 do IPv4), fornecendo 2^128 enderecos (praticamente inesgotaveis). Formato: oito grupos de 4 digitos hexadecimais, ex: 2001:0db8:85a3:0000:0000:8a2e:0370:7334.

i
Transicao IPv4 -> IPv6 A transicao esta em andamento ha decadas. Mecanismos como dual-stack (ambos os protocolos), tunneling (IPv6 sobre IPv4), e NAT64 (traducao entre protocolos) permitem a coexistencia.

No harness.os

Diagrama
Enderecamento IP           Enderecamento harness.os
──────────────────         ──────────────────────────
IP Address (32/128 bits)   Project UUID (128 bits!)
                           Coincidencia: UUIDs sao 128 bits, como IPv6

Subnet (rede/host)         Harness type / project
  10.0.0.0/8               Build harness: build-ai, college-online, ...
  172.16.0.0/12             Product harness: cortex-ai, way2do, ...
  192.168.0.0/16            Personal harness: marco-ai

NAT                        Slug resolution
  IP privado -> IP publico  Slug (amigavel) -> UUID (interno)
  192.168.1.10 -> 200.1.2.3  "build-ai" -> "abc-123-def-456"

Routing table              Mesh routing
  dest: 10.0.0.0/8 -> eth0  concern: "governance" -> governance-agent
  dest: 0.0.0.0/0 -> gw     concern: "*" -> general-agent (default route)

Resumo

Exercicio pratico

Projete um esquema de enderecamento para mesh nodes do harness.os.

  1. Cada harness instance precisa de um identificador unico — UUIDs sao 128 bits como IPv6. Coincidencia util?
  2. Defina "sub-redes" para cada tipo de harness (build, product, operations)
  3. Como funciona o NAT nesse contexto? (slug publico -> UUID interno)
  4. Implemente em Python: assign_address(harness_type, instance_name)

Verifique seu entendimento

Quantos hosts utilizaveis existem em uma rede /24?

  • 256
  • 254 (256 - 2 para rede e broadcast)
  • 255
  • 24