4.4 Lição 1
Certificação: |
Linux Essentials |
---|---|
Versão: |
1.6 |
Tópico: |
4 O sistema operacional Linux |
Objetivo: |
4.4 Seu computador na rede |
Lição: |
1 de 1 |
Introdução
No mundo de hoje, qualquer tipo de dispositivo de computação troca informações por meio de redes. No cerne do conceito das redes de computadores estão as conexões físicas entre um dispositivo e seus pares. Essas conexões são chamadas links e constituem a conexão mais básica entre dois dispositivos diferentes. Os links podem ser estabelecidos através de vários meios, como cabos de cobre, fibras óticas, ondas de rádio ou lasers.
Cada link está conectado a uma interface de um dispositivo. Cada dispositivo pode ter múltiplas interfaces e, portanto, estar conectado a diversos links. Através desses links, os computadores podem formar uma rede: uma pequena comunidade de dispositivos capazes de se conectar diretamente. Há inúmeros exemplos dessas redes no mundo. Para poder se comunicar além do alcance de uma camada de link, os dispositivos usam roteadores. Pense nas redes da camada de link como ilhas conectadas entre si por roteadores — assim como pontes que as informações precisam atravessar para chegar a um dispositivo que faz parte de uma ilha remota.
Esse modelo leva a diversas camadas de rede diferentes:
- Camada de link
-
Responsável pela comunicação entre dispositivos conectados diretamente.
- Camada de rede
-
Gerencia o roteamento para fora das redes individuais e o endereçamento único de dispositivos além de uma única camada de link.
- Camada de aplicativo
-
Permite que programas individuais se conectem uns aos outros.
Quando foram inventadas, as redes de computadores usavam os mesmos métodos de comunicação que os telefones, ou seja, eram comutadas por circuitos. Isso significa que um link dedicado e direto tinha de ser formado entre dois nós para que eles pudessem se comunicar. Esse método funcionava bem, mas exigia todo o espaço em um determinado link para que apenas dois hosts se comunicassem.
Depois de algum tempo, as redes de computadores passaram a usar a comutação de pacotes. Nesse método, os dados são agrupados com um cabeçalho contendo informações sobre a origem e o destino das informações. As informações do conteúdo estão contidas nessa estrutura e são enviadas pelo link para o destinatário indicado no cabeçalho. Isso permite que diversos dispositivos compartilhem um único link e se comuniquem quase simultaneamente.
Comunicação na camada de link
A função de qualquer pacote é transportar informações da origem até o destino através de um link que conecta os dois dispositivos. Esses dispositivos precisam de uma maneira de se identificar. Esse é o objetivo de um endereço de camada de link. Em uma rede Ethernet, os endereços de Controle de Acesso de Mídia (Media Access Control ou MAC) são usados para identificar dispositivos individuais. Um endereço MAC consiste em 48 bits. Eles não são necessariamente únicos globalmente e não podem ser usados para endereçar pontos externos ao link atual. Portanto, esses endereços não podem ser usados para rotear pacotes para outros links. O destinatário de um pacote verifica se o endereço de destino corresponde à sua própria camada de link e, se for o caso, processa o pacote. Caso contrário, o pacote será descartado. A exceção a essa regra são pacotes de broadcast (um pacote enviado a todos em uma determinada rede local), que sempre são aceitos.
O comando ip link show
exibe uma lista de todas as interfaces de rede disponíveis e seus endereços da camada de link, além de outras informações sobre o tamanho máximo do pacote:
$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff
A saída acima mostra que o dispositivo tem duas interfaces, lo
e ens33
. lo
é o dispositivo de loopback e tem o endereço MAC 00:00:00:00:00:00
, ao passo que ens33
é uma interface Ethernet com o endereço MAC 00:0c:29:33:3b:25
.
Rede IPv4
Para visitar sites como o Google ou o Twitter, verificar emails ou permitir que empresas se conectem entre si, os pacotes precisam ser capazes de passar de uma camada de link para outra. Freqüentemente, essas redes são conectadas indiretamente, com diversas camadas de link intermediárias que os pacotes devem atravessar para alcançar seu destino real.
Os endereços de camada de link de uma interface de rede não podem ser usados fora da rede específica em que está a camada de link. Como esse endereço não tem significado para os dispositivos de camada de link de outras redes, é necessária uma forma de endereços globalmente exclusivos para implementar o roteamento. Esse esquema de endereçamento, juntamente com o conceito geral de roteamento, é implementado pelo Protocolo de Internet (Internet Protocol ou IP).
Note
|
Um protocolo é um conjunto de procedimentos que permite que todas as partes que seguem o protocolo sejam compatíveis entre si. Um protocolo pode ser visto como a definição de um padrão. Em computação, o Internet Protocol é um padrão aceito por todos para que diferentes dispositivos produzidos por diferentes fabricantes possam se comunicar. |
Endereços IPv4
Os endereços IP, como os endereços MAC, são uma maneira de indicar de onde vem um pacote de dados e para onde ele está indo. IPv4 era o protocolo original. Os endereços IPv4 têm 32 bits de largura, fornecendo um número máximo teórico de 4.294.967.296 endereços. No entanto, o número desses endereços que são utilizáveis pelos dispositivos é muito menor, pois alguns intervalos são reservados para casos de uso especiais, como endereços de broadcast (usados para alcançar todos os participantes de uma rede específica), endereços multicast (semelhantes aos endereços de broadcast, mas o dispositivo deve sintonizá-lo, como um rádio) ou endereços reservados para uso privado.
Em seu formato legível para humanos, os endereços IPv4 são representados como quatro grupos de dígitos separados por um ponto. Cada grupo pode variar de 0
a 255
. Por exemplo, veja o seguinte endereço IP:
192.168.0.1
Tecnicamente, cada um desses grupos de dígitos representa oito bits individuais. Assim, esse endereço também pode ser escrito desta maneira:
11000000.10101000.00000000.00000001
Na prática, usamos uma notação decimal como a mostrada acima. No entanto, a representação bit a bit ainda é importante para entender as sub-redes.
Sub-redes IPv4
Para oferecer suporte ao roteamento, os endereços IP podem ser divididos em duas partes: uma parte da rede e uma do host. A parte da rede identifica a rede na qual o dispositivo está e é usada para rotear pacotes para essa rede. A parte do host é usada para identificar especificamente um determinado dispositivo em uma rede e para entregar o pacote ao seu destinatário específico, uma vez atingida a sua camada de link.
Os endereços IP podem ser divididos em partes de sub-rede e host em qualquer ponto. A chamada máscara de sub-rede define onde essa divisão acontece. Vamos reconsiderar a representação binária do endereço IP do exemplo anterior:
11000000.10101000.00000000.00000001
Para esse endereço IP, a máscara de sub-rede define cada bit que pertence à parte da rede como 1
e cada bit que pertence à parte do host como 0
:
11111111.11111111.11111111.00000000
Na prática, a máscara de rede é escrita na notação decimal:
255.255.255.0
Isso significa que essa rede varia de 192.168.0.0
a 192.168.0.255
. Note que os três primeiros números, que possuem todos os bits definidos na máscara de rede, permanecem inalterados nos endereços IP.
Por fim, existe uma notação alternativa para a máscara de sub-rede, chamada Classless Inter-Domain Routing (CIDR). Essa notação indica somente quantos bits estão definidos na máscara de sub-rede e adiciona esse número ao endereço IP. No exemplo, 24 dos 32 bits são definidos como 1
na máscara de sub-rede. Isso pode ser expresso na notação CIDR como 192.168.0.1/24
Endereços IPv4 privados
Como mencionado anteriormente, determinadas seções do endereço IPv4 são reservadas para casos de uso especiais. Um desses casos de uso são atribuições de endereços privados. As seguintes sub-redes estão reservadas para endereçamento privado:
-
10.0.0.0/8
-
172.16.0.0/12
-
192.168.0.0/16
Os endereços dessas sub-redes podem ser usados por qualquer pessoa. No entanto, essas sub-redes não podem ser roteadas na internet pública, pois são potencialmente usadas por várias redes ao mesmo tempo.
Hoje, a maioria das redes usa esses endereços internos. Eles permitem a comunicação interna sem a necessidade de qualquer atribuição de endereço externo. A maioria das conexões à Internet atualmente vem apenas com um único endereço IPv4 externo. Ao encaminhar pacotes para a Internet, os roteadores mapeiam todos os endereços internos para esse único endereço IP externo. Esse processo se chama Network Address Translation (NAT). O caso especial do NAT, em que um roteador mapeia endereços internos para um único endereço IP externo, às vezes é chamado de masquerading. Ele permite que qualquer dispositivo na rede interna estabeleça novas conexões com qualquer endereço IP global na internet.
Note
|
Com o masquerading, os dispositivos internos não podem ser referenciados na Internet, pois não possuem um endereço válido globalmente. No entanto, esse não é um recurso de segurança. Mesmo ao usar masquerading, um firewall permanece necessário. |
Configuração do endereço IPv4
Existem duas maneiras principais de configurar endereços IPv4 em um computador: atribuir os endereços manualmente ou usar o protocolo de configuração dinâmica de host (Dynamic Host Configuration Protocol ou DHCP) para configuração automática.
Ao usar o DHCP, um servidor central controla quais endereços são entregues a quais dispositivos. O servidor também pode fornecer aos dispositivos outras informações sobre a rede, como os endereços IP dos servidores DNS, o endereço IP do roteador padrão ou, no caso de configurações mais complicadas, iniciar um sistema operacional a partir da rede. O DHCP está ativado por padrão em muitos sistemas; portanto, você provavelmente já terá um endereço IP quando estiver conectado a uma rede.
Também é possível adicionar endereços IP manualmente a uma interface usando o comando ip addr add
. Aqui, adicionamos o endereço 192.168.0.5
à interface ens33
. A rede usa a máscara de rede 255.255.255.0
, que equivale a /24
em notação CIDR:
$ sudo ip addr add 192.168.0.5/255.255.255.0 dev ens33
Agora, podemos verificar se o endereço foi adicionado, usando o comando ip addr show
:
$ ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 25: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff inet 192.168.0.5/24 192.168.0.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::010c:29ff:fe33:3b25/64 scope link noprefixroute valid_lft forever preferred_lft forever
A saída acima mostra a interface lo
e a interface ens33
com seu endereço atribuído com o comando acima.
Para verificar se um dispositivo está acessível, usamos o comando ping
. Ele envia um tipo especial de mensagem chamado echo request (solicitação de eco), na qual o remetente solicita uma resposta ao destinatário. Se a conexão entre os dois dispositivos puder ser estabelecida com sucesso, o destinatário retornará uma resposta de eco, confirmando a conexão:
$ ping -c 3 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=2.16 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=1.85 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=3.41 ms --- 192.168.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 5ms rtt min/avg/max/mdev = 1.849/2.473/3.410/0.674 ms
O parâmetro -c 3
faz com que o ping
pare de ser executado após o envio de três solicitações de eco. Caso contrário, o ping
continua a rodar para sempre e precisa ser interrompido pressionando Ctrl+C.
Roteamento IPv4
O roteamento é o processo no qual um pacote passa da rede de origem para a rede de destino. Cada dispositivo mantém uma tabela de roteamento contendo informações sobre qual rede IP pode ser acessada diretamente através do vínculo do dispositivo com a camada de link e qual rede IP pode ser alcançada com a transmissão de pacotes para um roteador. Por fim, uma rota padrão define um roteador que recebe todos os pacotes que não correspondem a nenhuma outra rota.
Ao estabelecer uma conexão, o dispositivo procura o endereço IP do destino em sua tabela de roteamento. Se uma entrada corresponder ao endereço, o pacote será enviado à camada de link respectiva ou repassado ao roteador indicado na tabela de roteamento.
Os próprios roteadores também mantêm tabelas de roteamento. Ao receber um pacote, um roteador procura o endereço de destino em sua própria tabela e envia o pacote para o roteador seguinte. Isso é repetido até que o pacote chegue ao roteador na rede de destino. Cada roteador envolvido nessa jornada é chamado de hop. O último roteador encontra um link conectado direto para o endereço de destino em sua tabela de roteamento e envia os pacotes para a interface do destino.
A maioria das redes domésticas conta com apenas uma saída, o roteador enviado pelo provedor de internet (ISP). Nesse caso, o dispositivo apenas encaminha todos os pacotes que não são para a rede interna diretamente para o roteador doméstico, que o envia então ao roteador do provedor para encaminhamento adicional. Esse é um exemplo de rota padrão.
O comando ip route show
lista a tabela atual de roteamento IPv4:
$ ip route show 127.0.0.0/8 via 127.0.0.1 dev lo0 192.168.0.0/24 dev ens33 scope link
Para adicionar uma rota padrão, basta ter o endereço interno do roteador que será o gateway padrão. Se, por exemplo, o roteador tiver o endereço 192.168.0.1
, o seguinte comando o configurará como uma rota padrão:
$ sudo ip route add default via 192.168.0.1
Para confirmar, execute ip route show
novamente:
$ ip route show default via 192.168.0.1 dev ens33 127.0.0.0/8 via 127.0.0.1 dev lo0 192.168.0.0/24 dev ens33 scope link
Rede IPv6
O IPv6 foi projetado para colmatar as deficiências do IPv4, principalmente a falta de endereços conforme mais e mais dispositivos iam sendo postos online. No entanto, o IPv6 também inclui outros recursos, como novos protocolos para a configuração automática de redes. Em vez de 32 bits por endereço, o IPv6 usa 128. Isso permite aproximadamente 2128 endereços. No entanto, como o IPv4, o número de endereços utilizáveis globalmente exclusivos é muito menor porque algumas seções da alocação são reservadas para outros usos. Esse grande número de endereços significa que existem endereços públicos mais do que suficientes para todos os dispositivos atualmente conectados à Internet, mais muitos outros, reduzindo assim a necessidade de masquerading e os problemas gerados por ele, como o atraso na tradução e a impossibilidade de conectar-se diretamente a dispositivos mascarados.
Endereços IPv6
Quando escritos, os endereços usam 8 grupos de 4 dígitos hexadecimais, separados por dois pontos:
2001:0db8:0000:abcd:0000:0000:0000:7334
Note
|
Os dígitos hexadecimais vão de |
Para facilitar, os zeros à esquerda de cada grupo podem ser removidos quando escritos, mas cada grupo deve conter pelo menos um dígito:
2001:db8:0:abcd:0:0:0:7334
Quando diversos grupos contendo apenas zeros aparecem diretamente um após o outro, podem ser substituídos por '::':
2001:db8:0:abcd::7334
Todavia, isso só pode ser feito uma vez em cada endereço.
Prefixo IPv6
Os primeiros 64 bits de um endereço IPv6 são conhecidos como o prefixo de roteamento. O prefixo é usado pelos roteadores para determinar a qual rede um dispositivo pertence e, portanto, em qual caminho os dados precisam ser enviados. A sub-rede sempre acontece dentro do prefixo. Os provedores de internet geralmente distribuem prefixos /48 ou /58 aos seus clientes, deixando 16 ou 8 bits para sua sub-rede interna.
Existem três tipos principais de prefixos no IPv6:
- Endereço Global Unicast
-
Nele, o prefixo é atribuído a partir dos blocos reservados aos endereços globais. Esses endereços são válidos em toda a internet.
- Endereço Local Unicast
-
Pode não ser roteado na internet. No entanto, pode ser roteado internamente dentro de uma organização. Esses endereços são usados dentro de uma rede para garantir que os dispositivos tenham um endereço mesmo quando não houver conexão com a Internet. Equivalem aos intervalos de endereços privados do IPv4. Os primeiros 8 bits são sempre
fc
oufd
, seguidos por 40 bits gerados aleatoriamente. - Endereço Link-Local
-
São válidos somente em um link específico. Toda interface de rede compatível com IPv6 possui um desses endereços, começando com
fe80
. Esses endereços são usados internamente pelo IPv6 para solicitar endereços adicionais usando a configuração automática e para encontrar outros computadores na rede usando o protocolo Neighbor Discovery.
Identificador da interface IPv6
Enquanto o prefixo determina em qual rede um dispositivo reside, o identificador de interface é usado para enumerar os dispositivos em uma rede. Os últimos 64 bits de um endereço IPv6 formam o identificador da interface, assim como os últimos bits de um endereço IPv4.
Quando um endereço IPv6 é atribuído manualmente, o identificador da interface é definido como parte do endereço. Ao usar a configuração automática de endereço, o identificador de interface é escolhido aleatoriamente ou derivado do endereço da camada de link do dispositivo. Isso faz com que uma variação do endereço da camada de link apareça no endereço IPv6.
Configuração do endereço IPv6
Como o IPv4, o endereço IPv6 pode ser atribuído manualmente ou automaticamente. No entanto, o IPv6 possui dois tipos diferentes de configuração automatizada: DHCPv6 e Stateless Address Autoconfiguration (SLAAC).
O SLAAC é o mais fácil dos dois métodos automatizados, sendo incorporado no padrão IPv6. As mensagens usam o novo Neighbor Discovery Protocol, que permite que os dispositivos se encontrem e solicitem informações a respeito de uma rede. Essas informações são enviadas pelos roteadores e podem conter prefixos IPv6 que os dispositivos podem usar combinando-os com um identificador de interface de sua escolha, desde que o endereço resultante ainda não esteja em uso. Os dispositivos não fornecem feedback ao roteador sobre os endereços criados.
O DHCPv6, por outro lado, é o DHCP atualizado para funcionar com as alterações do IPv6. Ele permite um controle mais preciso das informações entregues aos clientes, como permitir que o mesmo endereço seja sempre entregue ao mesmo cliente e enviar mais opções para o cliente do que o SLAAC. Com o DHCPv6, os clientes precisam obter o consentimento explícito de um servidor DHCP para usar um endereço.
O método para atribuir manualmente um endereço IPv6 a uma interface é o mesmo do IPv4:
$ sudo ip addr add 2001:db8:0:abcd:0:0:0:7334/64 dev ens33
Para confirmar se a atribuição funcionou, usamos o mesmo comando, ip addr show
:
$ ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 25: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:33:3b:25 brd ff:ff:ff:ff:ff:ff inet 192.168.0.5/24 192.168.0.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::010c:29ff:fe33:3b25/64 scope link noprefixroute valid_lft forever preferred_lft forever inet6 2001:db8:0:abcd::7334/64 scope global valid_lft forever preferred_lft forever
Aqui também vemos o endereço link-local fe80::010c:29ff:fe33:3b25/64
.
Como no caso do IPv4, o comando ping
também pode ser usado para confirmar a acessibilidade dos dispositivos através do IPv6:
$ ping 2001:db8:0:abcd::1 PING 2001:db8:0:abcd::1(2001:db8:0:abcd::1) 56 data bytes 64 bytes from 2001:db8:0:abcd::1: icmp_seq=1 ttl=64 time=0.030 ms 64 bytes from 2001:db8:0:abcd::1: icmp_seq=2 ttl=64 time=0.040 ms 64 bytes from 2001:db8:0:abcd::1: icmp_seq=3 ttl=64 time=0.072 ms --- 2001:db8:0:abcd::1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 43ms rtt min/avg/max/mdev = 0.030/0.047/0.072/0.018 ms
Note
|
Em certos sistemas Linux, o |
Para confirmar o endereço link-local, use ping
novamente. Mas como todas as interfaces usam o prefixo fe80::/64
, a interface correta deve ser especificada junto com o endereço:
$ ping6 -c 1 fe80::010c:29ff:fe33:3b25%ens33 PING fe80::010c:29ff:fe33:3b25(fe80::010c:29ff:fe33:3b25) 56 data bytes 64 bytes from fe80::010c:29ff:fe33:3b25%ens33: icmp_seq=1 ttl=64 time=0.049 ms --- fe80::010c:29ff:fe33:3b25 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.049/0.049/0.049/0.000 ms
DNS
Os endereços IP são difíceis de memorizar e não são lá muito atraentes quando estamos tentando comercializar um serviço ou produto. É aqui que o Domain Name System (sistema de nomes de domínio) entra em ação. Em sua forma mais simples, o DNS é uma lista telefônica que mapeia nomes de domínio memoráveis e amigáveis, como exemplo.com
, para endereços IP. Quando, por exemplo, um usuário navega até um site, ele insere o nome do host DNS como parte da URL. O navegador web envia o nome de DNS para o resolvedor DNS configurado. Esse resolvedor de DNS, por sua vez, descobrirá o endereço relacionado àquele domínio. O resolvedor responde com essa informação e o navegador tenta acessar o servidor web nesse endereço IP.
Os resolvedores usados pelo Linux para procurar dados DNS estão no arquivo de configuração /etc/resolv.conf
:
$ cat /etc/resolv.conf search lpi nameserver 192.168.0.1
Quando o resolvedor realiza uma pesquisa de nome, ele primeiro verifica o arquivo /etc/hosts
para ver se encontra um endereço para o nome solicitado. Se for o caso, ele retorna esse endereço e não entra em contato com o DNS. Isso permite que os administradores de rede forneçam a resolução de nomes sem a necessidade de configurar um servidor DNS completo. Cada linha desse arquivo contém um endereço IP seguido por um ou mais nomes:
127.0.0.1 localhost.localdomain localhost ::1 localhost.localdomain localhost 192.168.0.10 server 2001:db8:0:abcd::f server
Para realizar uma pesquisa no DNS, use o comando host
:
$ host learning.lpi.org learning.lpi.org has address 208.94.166.198
O comando dig
oferece informações mais detalhadas:
$ dig learning.lpi.org ; <<>> DiG 9.14.3 <<>> learning.lpi.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21525 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 2ac55879b1adef30a93013705d3306d2128571347df8eadf (bad) ;; QUESTION SECTION: ;learning.lpi.org. IN A ;; ANSWER SECTION: learning.lpi.org. 550 IN A 208.94.166.198 ;; Query time: 3 msec ;; SERVER: 192.168.0.1#53(192.168.0.1) ;; WHEN: Sat Jul 20 14:20:21 EST 2019 ;; MSG SIZE rcvd: 89
Aqui também vemos o nome dos tipos de registro DNS, neste caso A
para IPv4.
Sockets
Um socket é um terminal de comunicação para dois programas conversando entre si. Se o socket estiver conectado por uma rede, os programas poderão ser executados em dispositivos diferentes, como um navegador web no laptop de um usuário e um servidor web no data center de uma empresa.
Existem três tipos principais de sockets:
- Sockets Unix
-
Conecta os processos em execução no mesmo dispositivo.
- Sockets UDP (User Datagram Protocol)
-
Conectam aplicativos usando um protocolo rápido, mas pouco resistente.
- Sockets TCP (Transmission Control Protocol)
-
Mais confiáveis que os sockets UDP; por exemplo, eles confirmam a recepção de dados.
Os sockets Unix só podem conectar aplicativos em execução no mesmo dispositivo. Já os sockets TCP e UDP podem se conectar através de uma rede. O TCP permite um fluxo de dados que sempre chegam na ordem exata em que foram enviados. O UDP meio que se guia sozinho; o pacote é enviado, mas a forma de entrega na outra extremidade não é garantida. No entanto, o UDP não tem a mesma sobrecarga do TCP, sendo assim perfeito para aplicações de baixa latência, como videogames online.
O TCP e o UDP usam portas para endereçar vários sockets no mesmo endereço IP. Embora a porta de origem de uma conexão geralmente seja aleatória, as portas de destino são padronizadas para um serviço específico. O HTTP, por exemplo, geralmente é hospedado na porta 80; o HTTPS é executado na porta 443. O SSH, um protocolo para fazer login com segurança em um sistema Linux remoto, escuta na porta 22.
O comando ss
permite que um administrador investigue todos os sockets em um computador Linux. Ele mostra tudo, desde o endereço de origem até o endereço de destino e o tipo. Um de seus melhores recursos é o uso de filtros que permitem monitorar os sockets em qualquer estado de conexão que se queira. O ss
pode ser executado com um conjunto de opções, além de uma expressão de filtro para limitar as informações mostradas.
Quando executado sem nenhuma opção, o comando exibe uma lista de todos os sockets estabelecidos. A opção -p
inclui informações sobre o processo que está usando cada socket. A opção –s
mostra um resumo dos sockets. Há muitas outras opções disponíveis para esta ferramenta, mas algumas das principais são -4
e -6
para restringir o protocolo IP a IPv4 ou IPv6 respectivamente; -t
e -u
permitem que o administrador selecione sockets TCP ou UDP e -l
exibe apenas o socket que está atento às novas conexões.
O comando a seguir, por exemplo, lista todos os sockets TCP atualmente em uso:
$ ss -t State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.0.5:49412 192.168.0.1:https ESTAB 0 0 192.168.0.5:37616 192.168.0.1:https ESTAB 0 0 192.168.0.5:40114 192.168.0.1:https ESTAB 0 0 192.168.0.5:54948 192.168.0.1:imap ...
Exercícios Guiados
-
Um engenheiro de rede precisa atribuir dois endereços IP à interface
ens33
de um host, um endereço IPv4 (192.168.10.10/24
) e um endereço IPv6 (2001:0:0:abcd:0:8a2e:0370:7334/64
). Quais comandos ele deve usar para fazer isso? -
Quais endereços da lista abaixo são privados?
192.168.10.1
120.56.78.35
172.16.57.47
10.100.49.162
200.120.42.6
-
Qual item você adicionaria ao arquivo de hosts para atribuir
192.168.0.15
aexample.com
? -
Que efeito teria o comando a seguir?
sudo ip -6 route add default via 2001:db8:0:abcd::1
Exercícios Exploratórios
-
Cite o tipo de registro de DNS usado para atender às seguintes solicitações:
-
Dados textuais
-
Pesquisa reversa de endereço IP
-
Um domínio que não tem endereço próprio e precisa de outro domínio para obter essas informações
-
Servidor de email
-
-
O Linux tem um recurso chamado bridging, o que ele faz e qual sua utilidade?
-
Qual opção precisa ser fornecida ao comando
ss
para visualizar todos os sockets UDP estabelecidos? -
Qual comando exibe um resumo de todos os sockets em execução em um dispositivo Linux?
-
A saída a seguir foi gerada pelo comando do exercício anterior. Quantos sockets TCP e UDP estão ativos?
Total: 978 (kernel 0) TCP: 4 (estab 0, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 1 0 1 UDP 7 5 2 TCP 4 3 1 INET 12 8 4 FRAG 0 0 0
Resumo
Este tópico trata do uso de redes em seu computador Linux. Primeiro, aprendemos sobre os vários níveis de rede:
-
A camada de link, que conecta os dispositivos diretamente.
-
A camada de rede, que faz o roteamento entre as redes e um espaço de endereço global.
-
A camada de aplicativo, na qual os aplicativos se conectam.
Vimos como o IPv4 e o IPv6 são usados para endereçar computadores individuais e como o TCP e o UDP enumeram os sockets usados pelos aplicativos para se conectar. Também aprendemos como o DNS é usado para resolver nomes para endereços IP.
Comandos usados nos exercícios:
dig
-
Consulta informações de DNS e fornece dados detalhados sobre as consultas e respostas de DNS.
host
-
Consulta informações de DNS e fornece uma saída condensada.
ip
-
Configura o uso da rede no Linux, incluindo interfaces de rede, endereços e roteamento.
ping
-
Testa a conectividade com um dispositivo remoto.
ss
-
Mostra informações sobre sockets.
Respostas aos Exercícios Guiados
-
Um engenheiro de rede precisa atribuir dois endereços IP à interface
ens33
de um host, um endereço IPv4 (192.168.10.10/24
) e um endereço IPv6 (2001:0:0:abcd:0:8a2e:0370:7334/64
). Quais comandos ele deve usar para fazer isso?sudo ip addr add 192.168.10.10/24 dev ens33 sudo ip addr add 2001:0:0:abcd:0:8a2e:0370:7334/64 dev ens33
-
Quais endereços da lista abaixo são privados?
192.168.10.1
X
120.56.78.35
172.16.57.47
X
10.100.49.162
X
200.120.42.6
-
Qual item você adicionaria ao arquivo de hosts para atribuir
192.168.0.15
aexample.com
?192.168.0.15 example.com
-
Que efeito teria o comando a seguir?
sudo ip -6 route add default via 2001:db8:0:abcd::1
Ele adicionaria à tabela uma rota padrão que envia todo o tráfego IPv6 ao roteador com o endereço interno
2001:db8:0:abcd::1
.
Respostas aos Exercícios Exploratórios
-
Cite o tipo de registro de DNS usado para atender às seguintes solicitações:
-
Dados textuais
TXT
-
Pesquisa reversa de endereço IP
PTR
-
Um domínio que não tem endereço próprio e precisa de outro domínio para obter essas informações
CNAME
-
Servidor de email
MX
-
-
O Linux tem um recurso chamado bridging, o que ele faz e qual sua utilidade?
Um bridge conecta múltiplas interfaces de rede. Todas as interfaces conectadas a um bridge podem se comunicar como se estivessem conectadas à mesma camada de link: Todos os dispositivos usam endereços IP da mesma sub-rede e não requerem um roteador para se conectar entre si.
-
Qual opção precisa ser fornecida ao comando
ss
para visualizar todos os sockets UDP estabelecidos?A opção
-u
mostra todos os sockets UDP estabelecidos. -
Qual comando exibe um resumo de todos os sockets em execução em um dispositivo Linux?
O comando
ss -s
mostra um resumo de todos os sockets -
A saída a seguir foi gerada pelo comando do exercício anterior. Quantos sockets TCP e UDP estão ativos?
Total: 978 (kernel 0) TCP: 4 (estab 0, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0 Transport Total IP IPv6 * 0 - - RAW 1 0 1 UDP 7 5 2 TCP 4 3 1 INET 12 8 4 FRAG 0 0 0
11 sockets TCP e UDP estão ativos.