Computer Science › Sistemas
A Internet como duas partes (sistemas finais na borda rodando aplicações, e uma malha de roteadores e enlaces no núcleo movendo os seus dados) e a comutação de pacotes, a estratégia do núcleo de picotar mensagens em pequenas unidades e encaminhar cada uma de forma independente em vez de reservar um circuito de ponta a ponta.
Dividir o trabalho impossivelmente complexo das redes em cinco camadas (aplicação, transporte, rede, enlace, física), cada uma escondendo a sua própria maquinaria atrás de um serviço fixo para a camada acima: exatamente a mesma disciplina de ocultação de informação já coberta como um princípio de projeto de software, agora aplicada ao projeto de protocolos.
Quatro tipos de atraso que um pacote acumula a cada salto (processamento, enfileiramento, transmissão, propagação), além da perda por buffers cheios e da vazão como a taxa real em que os dados se movem, com o produto largura-de-banda-atraso dando os números reais por trás de por que um único enlace lento em qualquer ponto de um caminho pode dominar o desempenho de uma conexão inteira.
Duas respostas estruturais para “quem fala com quem”: uma arquitetura cliente-servidor, com um servidor sempre ligado ao qual todos os clientes se dirigem, versus uma arquitetura peer-to-peer, em que sistemas finais conectados de forma intermitente atendem uns aos outros diretamente. É uma escolha de projeto real, com trade-offs reais de escalabilidade, e não só uma curiosidade histórica.
O ciclo de requisição e resposta do HTTP, a sua ausência deliberada de estado (e os cookies como o contorno acoplado depois) e as conexões persistentes versus não persistentes: o protocolo concreto da camada de aplicação que todo exemplo resolvido mais adiante nesta disciplina rastreia para baixo, por toda camada inferior.
Um banco de dados distribuído e hierárquico (servidores raiz, de domínio de topo e autoritativos) que traduz um nome legível por humanos no endereço IP de que toda camada inferior de fato precisa, resolvido por uma cadeia de consultas iterativas e recursivas e tornado rápido na prática quase inteiramente pelo cache.
O trabalho da camada de transporte é a entrega de processo a processo em cima da entrega de host a host da camada de rede: multiplexação/demultiplexação via números de porta, e uma escolha real entre o UDP (mínimo indispensável, sem garantias) e o TCP (confiável, ordenado, com controle de congestionamento), com aplicações reais de cada lado dessa escolha.
Construindo confiabilidade em cima de um canal não confiável a partir de princípios básicos (confirmações, números de sequência, temporizadores e retransmissão) e depois fazendo pipelining de vários pacotes em trânsito para ganhar vazão, com o Go-Back-N e o Selective Repeat como as duas estratégias reais para o que um receptor faz quando os pacotes chegam fora de ordem.
O cabeçalho real do segmento TCP (números de sequência e de confirmação, flags SYN/ACK/FIN, tamanho da janela) e o three-way handshake (SYN, SYN-ACK, ACK) que estabelece os números de sequência iniciais de uma conexão antes que um único byte de dados da aplicação se mova.
Como os princípios gerais de transferência confiável de dados se tornam o mecanismo de fato do TCP: confirmações cumulativas, retransmissão rápida com três ACKs duplicados e timeout adaptativo calculado a partir de uma estimativa contínua do tempo de ida e volta. Fórmulas reais, e não só o conceito de “retransmita se estiver atrasado”.
O controle de fluxo protege um receptor lento de um remetente rápido: o receptor anuncia quanto espaço livre de buffer tem, e a janela do remetente encolhe ou cresce para acompanhar. É uma preocupação distinta do controle de congestionamento (que protege a rede, e não o receptor), mesmo que os dois usem a palavra “janela”.
O TCP trata a própria rede como frágil e infere o congestionamento a partir da perda: o slow start faz a janela de congestionamento crescer exponencialmente até um evento de perda, e depois o aumento aditivo/diminuição multiplicativa (AIMD) sonda com delicadeza e recua com força, num dente de serra real de cwnd ao longo do tempo rastreado por várias idas e voltas, e é a razão pela qual conexões TCP rodando de forma independente convergem para compartilhar de forma justa um enlace gargalo.
O encaminhamento (o plano de dados: a decisão local, por pacote, de um roteador sobre qual enlace de saída usar, tomada em nanossegundos consultando uma tabela) é um trabalho fundamentalmente diferente do roteamento (o plano de controle: o algoritmo de toda a rede, muito mais lento, que calcula o que essa tabela deve conter). É uma distinção que todo conceito seguinte deste bloco depende de manter clara.
Um endereço de 32 bits dividido num prefixo de rede e num sufixo de host, com a notação CIDR (ex.: 128.11.3.0/24) substituindo o antigo esquema rígido baseado em classes por um prefixo de tamanho arbitrário. A aritmética de sub-redes trabalhada mostra exatamente quantos endereços de host utilizáveis um dado tamanho de prefixo deixa, e por que o espaço de endereços precisou ser racionado com tanto cuidado antes do IPv6.
Um roteador encaminha um pacote encontrando, entre todos os prefixos em sua tabela, o mais longo que corresponde ao endereço de destino, trabalhado à mão contra uma pequena tabela de encaminhamento concreta: a regra que permite que uma entrada cubra milhões de endereços enquanto uma entrada mais específica ainda tem precedência quando se aplica.
Um roteador NAT reescreve o endereço e a porta de origem privados de todo pacote que sai para o seu próprio endereço público único e uma porta nova, mantendo uma tabela de tradução para rotear as respostas de volta ao host interno certo. É uma correção pragmática e amplamente implantada para a escassez de endereços que também, honestamente, quebra o princípio fim a fim em torno do qual a Internet foi originalmente projetada.
As duas famílias de algoritmos de roteamento não são teoria dos grafos nova: o roteamento link-state roda o algoritmo de Dijkstra, já coberto por completo, sobre um grafo de topologia conhecido globalmente, enquanto o roteamento distance-vector roda o algoritmo de Bellman-Ford, também já coberto, com cada roteador conhecendo só os custos dos seus vizinhos. A fraqueza real e honesta do distance-vector é o problema da contagem ao infinito quando um enlace falha.
A Internet não é um único domínio de roteamento plano, mas milhares de sistemas autônomos administrados de forma independente. O OSPF (link-state) roda o algoritmo de roteamento já coberto dentro de um AS, enquanto o BGP (path-vector, um primo do distance-vector guiado por políticas) cola os sistemas autônomos uns aos outros na escala real da Internet, onde as decisões de roteamento dizem respeito tanto a acordos comerciais quanto a caminhos mínimos.
Um salto abaixo da camada de rede, a camada de enlace move um quadro por um único enlace físico. O enquadramento marca onde um quadro termina e o próximo começa, e um checksum (na prática, uma verificação de redundância cíclica) permite que o receptor detecte, embora nem sempre corrija, erros de bit introduzidos por meios físicos reais e ruidosos.
Quando muitos hosts compartilham um único meio físico, algo precisa decidir quem transmite quando. O CSMA/CD (detecção de portadora, detecção de colisão, recuo aleatório exponencial) é a resposta da Ethernet clássica, e a capacidade de um switch de isolar cada enlace no seu próprio domínio de colisão é a razão real de a Ethernet comutada moderna mal precisar dele hoje.
Endereços IP roteiam um pacote através das redes, mas um quadro de camada de enlace precisa do endereço MAC do destino para este único salto: o ARP resolve um no outro transmitindo uma consulta em broadcast e armazenando a resposta em cache, e esse cache é, mecanicamente, exatamente a tabela hash já coberta: endereço IP como chave, endereço MAC como valor, com um timeout real em vez de uma política de remoção.
O sem fio quebra uma suposição silenciosa da Ethernet cabeada (a de que todo nó consegue ouvir toda colisão), então o CSMA/CA (prevenção de colisão, e não detecção) e o problema do terminal oculto substituem o CSMA/CD. A mobilidade acrescenta a questão adicional de como um host em movimento mantém as suas conexões vivas enquanto passa de um ponto de acesso para outro.
Uma única requisição `GET`, digitada em um navegador, percorrida para baixo através de cada camada que esta disciplina cobriu e de volta para cima: resolução DNS, o handshake de três vias do TCP, a requisição/resposta do HTTP, o encaminhamento IP salto a salto guiado pelas tabelas pré-computadas do roteamento, o ARP resolvendo o salto final, e o enquadramento/detecção de erros no fio, nomeando, a cada passo, exatamente qual conceito o explica, e encerrando com um limite de escopo honesto frente a `distributed-systems-i`.
Part of the Computer Science curriculum.
A Internet como duas partes (sistemas finais na borda rodando aplicações, e uma malha de roteadores e enlaces no núcleo movendo os seus dados) e a comutação de pacotes, a estratégia do núcleo de picotar mensagens em pequenas unidades e encaminhar cada uma de forma independente em vez de reservar um circuito de ponta a ponta.
Dividir o trabalho impossivelmente complexo das redes em cinco camadas (aplicação, transporte, rede, enlace, física), cada uma escondendo a sua própria maquinaria atrás de um serviço fixo para a camada acima: exatamente a mesma disciplina de ocultação de informação já coberta como um princípio de projeto de software, agora aplicada ao projeto de protocolos.
Quatro tipos de atraso que um pacote acumula a cada salto (processamento, enfileiramento, transmissão, propagação), além da perda por buffers cheios e da vazão como a taxa real em que os dados se movem, com o produto largura-de-banda-atraso dando os números reais por trás de por que um único enlace lento em qualquer ponto de um caminho pode dominar o desempenho de uma conexão inteira.
Duas respostas estruturais para “quem fala com quem”: uma arquitetura cliente-servidor, com um servidor sempre ligado ao qual todos os clientes se dirigem, versus uma arquitetura peer-to-peer, em que sistemas finais conectados de forma intermitente atendem uns aos outros diretamente. É uma escolha de projeto real, com trade-offs reais de escalabilidade, e não só uma curiosidade histórica.
O ciclo de requisição e resposta do HTTP, a sua ausência deliberada de estado (e os cookies como o contorno acoplado depois) e as conexões persistentes versus não persistentes: o protocolo concreto da camada de aplicação que todo exemplo resolvido mais adiante nesta disciplina rastreia para baixo, por toda camada inferior.
Um banco de dados distribuído e hierárquico (servidores raiz, de domínio de topo e autoritativos) que traduz um nome legível por humanos no endereço IP de que toda camada inferior de fato precisa, resolvido por uma cadeia de consultas iterativas e recursivas e tornado rápido na prática quase inteiramente pelo cache.
O trabalho da camada de transporte é a entrega de processo a processo em cima da entrega de host a host da camada de rede: multiplexação/demultiplexação via números de porta, e uma escolha real entre o UDP (mínimo indispensável, sem garantias) e o TCP (confiável, ordenado, com controle de congestionamento), com aplicações reais de cada lado dessa escolha.
Construindo confiabilidade em cima de um canal não confiável a partir de princípios básicos (confirmações, números de sequência, temporizadores e retransmissão) e depois fazendo pipelining de vários pacotes em trânsito para ganhar vazão, com o Go-Back-N e o Selective Repeat como as duas estratégias reais para o que um receptor faz quando os pacotes chegam fora de ordem.
O cabeçalho real do segmento TCP (números de sequência e de confirmação, flags SYN/ACK/FIN, tamanho da janela) e o three-way handshake (SYN, SYN-ACK, ACK) que estabelece os números de sequência iniciais de uma conexão antes que um único byte de dados da aplicação se mova.
Como os princípios gerais de transferência confiável de dados se tornam o mecanismo de fato do TCP: confirmações cumulativas, retransmissão rápida com três ACKs duplicados e timeout adaptativo calculado a partir de uma estimativa contínua do tempo de ida e volta. Fórmulas reais, e não só o conceito de “retransmita se estiver atrasado”.
O controle de fluxo protege um receptor lento de um remetente rápido: o receptor anuncia quanto espaço livre de buffer tem, e a janela do remetente encolhe ou cresce para acompanhar. É uma preocupação distinta do controle de congestionamento (que protege a rede, e não o receptor), mesmo que os dois usem a palavra “janela”.
O TCP trata a própria rede como frágil e infere o congestionamento a partir da perda: o slow start faz a janela de congestionamento crescer exponencialmente até um evento de perda, e depois o aumento aditivo/diminuição multiplicativa (AIMD) sonda com delicadeza e recua com força, num dente de serra real de cwnd ao longo do tempo rastreado por várias idas e voltas, e é a razão pela qual conexões TCP rodando de forma independente convergem para compartilhar de forma justa um enlace gargalo.
O encaminhamento (o plano de dados: a decisão local, por pacote, de um roteador sobre qual enlace de saída usar, tomada em nanossegundos consultando uma tabela) é um trabalho fundamentalmente diferente do roteamento (o plano de controle: o algoritmo de toda a rede, muito mais lento, que calcula o que essa tabela deve conter). É uma distinção que todo conceito seguinte deste bloco depende de manter clara.
Um endereço de 32 bits dividido num prefixo de rede e num sufixo de host, com a notação CIDR (ex.: 128.11.3.0/24) substituindo o antigo esquema rígido baseado em classes por um prefixo de tamanho arbitrário. A aritmética de sub-redes trabalhada mostra exatamente quantos endereços de host utilizáveis um dado tamanho de prefixo deixa, e por que o espaço de endereços precisou ser racionado com tanto cuidado antes do IPv6.
Um roteador encaminha um pacote encontrando, entre todos os prefixos em sua tabela, o mais longo que corresponde ao endereço de destino, trabalhado à mão contra uma pequena tabela de encaminhamento concreta: a regra que permite que uma entrada cubra milhões de endereços enquanto uma entrada mais específica ainda tem precedência quando se aplica.
Um roteador NAT reescreve o endereço e a porta de origem privados de todo pacote que sai para o seu próprio endereço público único e uma porta nova, mantendo uma tabela de tradução para rotear as respostas de volta ao host interno certo. É uma correção pragmática e amplamente implantada para a escassez de endereços que também, honestamente, quebra o princípio fim a fim em torno do qual a Internet foi originalmente projetada.
As duas famílias de algoritmos de roteamento não são teoria dos grafos nova: o roteamento link-state roda o algoritmo de Dijkstra, já coberto por completo, sobre um grafo de topologia conhecido globalmente, enquanto o roteamento distance-vector roda o algoritmo de Bellman-Ford, também já coberto, com cada roteador conhecendo só os custos dos seus vizinhos. A fraqueza real e honesta do distance-vector é o problema da contagem ao infinito quando um enlace falha.
A Internet não é um único domínio de roteamento plano, mas milhares de sistemas autônomos administrados de forma independente. O OSPF (link-state) roda o algoritmo de roteamento já coberto dentro de um AS, enquanto o BGP (path-vector, um primo do distance-vector guiado por políticas) cola os sistemas autônomos uns aos outros na escala real da Internet, onde as decisões de roteamento dizem respeito tanto a acordos comerciais quanto a caminhos mínimos.
Um salto abaixo da camada de rede, a camada de enlace move um quadro por um único enlace físico. O enquadramento marca onde um quadro termina e o próximo começa, e um checksum (na prática, uma verificação de redundância cíclica) permite que o receptor detecte, embora nem sempre corrija, erros de bit introduzidos por meios físicos reais e ruidosos.
Quando muitos hosts compartilham um único meio físico, algo precisa decidir quem transmite quando. O CSMA/CD (detecção de portadora, detecção de colisão, recuo aleatório exponencial) é a resposta da Ethernet clássica, e a capacidade de um switch de isolar cada enlace no seu próprio domínio de colisão é a razão real de a Ethernet comutada moderna mal precisar dele hoje.
Endereços IP roteiam um pacote através das redes, mas um quadro de camada de enlace precisa do endereço MAC do destino para este único salto: o ARP resolve um no outro transmitindo uma consulta em broadcast e armazenando a resposta em cache, e esse cache é, mecanicamente, exatamente a tabela hash já coberta: endereço IP como chave, endereço MAC como valor, com um timeout real em vez de uma política de remoção.
O sem fio quebra uma suposição silenciosa da Ethernet cabeada (a de que todo nó consegue ouvir toda colisão), então o CSMA/CA (prevenção de colisão, e não detecção) e o problema do terminal oculto substituem o CSMA/CD. A mobilidade acrescenta a questão adicional de como um host em movimento mantém as suas conexões vivas enquanto passa de um ponto de acesso para outro.
Uma única requisição `GET`, digitada em um navegador, percorrida para baixo através de cada camada que esta disciplina cobriu e de volta para cima: resolução DNS, o handshake de três vias do TCP, a requisição/resposta do HTTP, o encaminhamento IP salto a salto guiado pelas tabelas pré-computadas do roteamento, o ARP resolvendo o salto final, e o enquadramento/detecção de erros no fio, nomeando, a cada passo, exatamente qual conceito o explica, e encerrando com um limite de escopo honesto frente a `distributed-systems-i`.