Introdução ao TCP/IP

  1. Camadas
  2. Transmissão de dados

Esse é o primeiro tutorial de uma série de tutoriais sobre TCP/IP. Ele é focado para desenvolvedores, especialmente aqueles que trabalham com desenvolvimento web. É muito comum web developers trabalharem com linguagens de back-end e front-end, tais como PHP, Javascript e Python, e não conhecerem o mínimo necessário de TCP/IP. Por estarem programando sites e sistemas online, é importante que eles conheçam pelo menos o básico dessa suíte de protocolos, e é essa noção básica que esses tutoriais dão. A maioria dos tutoriais são puramente teóricos.

Esses tutoriais foram feitos para que você entenda melhor protocolos que você usa ou já usou frequentemente, tais como FTP, SMTP e SSH. O protocolo HTTP não será abordado nessa série de tutoriais. Ele é tão importante no desenvolvimento web que ele terá sua própria série de tutoriais, porque ele precisa ser muito bem compreendido por quem trabalha com desenvolvimento web.

O TCP/IP está presente no nosso dia-a-dia sem que a gente perceba. Quando você posta uma foto no Instagram ou acessa a notícia da vitória do último domingo do seu time de futebol, a suíte de protocolos TCP/IP é muito usada. O uso do protocolo HTTP é o mais fácil de perceber. Porém, na verdade, são usados muitos outros protocolos nessas simples tarefas, como DNS, IP e TCP.

Como foi dito, o TCP/IP é uma suíte de protocolos. Isso quer dizer que ele é um conjunto de protocolos. Ele tem o nome de dois protocolos fundamentais que fazem parte dele: TCP e IP. Enquanto o TCP é usado para o transporte dos dados, o IP faz o endereçamento de cada dispositivo, dentre outras tarefas.

A principal vantagem do TCP/IP é permitir que hardwares completamente diferentes, de dispositivos igualmente diferentes (como smartphones, televisões e computadores) falem a mesma língua quando precisarem se comunicar em uma rede. Essa rede geralmente é a internet, mas pode ser também uma rede privada. Essa é a grande vantagem do TCP/IP: padronizar a comunicação. Sem ela, com a diversidade de dispositivos e hardwares que existem, a internet não existiria, por motivos técnicos e financeiros.

O modelo de comunicação que o TCP/IP usa é o cliente / servidor (client / server). Nesse modelo, o cliente e o servidor trocam mensagens entre si. As mensagens podem ser requests (requisições) ou responses (respostas): o cliente solicita alguma coisa, enviando uma request para o servidor. O servidor retorna uma resposta ao cliente, que atende ou não aquilo que ele pediu (pode ser que ele não tenha permissão para receber o que pediu ou tenha pedido alguma coisa que não existe). A título de exemplo, o cliente pode ser o navegador, e o servidor pode ser o servidor do site que o usuário quer acessar.

Camadas

Os protocolos que pertencem ao TCP/IP foram divididos em camadas. Essa arquitetura facilita o entendimento do TCP/IP como um todo, facilita a adição de novos protocolos e ajuda a manter os protocolos focados em propósitos claros, definidos pelas suas camadas. Conheça as 4 camadas que compõem o TCP/IP:

Datalink (link de dados)
Seus protocolos cuidam da conexão entre hosts ou nós da rede. Um dos protocolos dessa camada é o Ethernet.
Rede ou internet
Conecta redes independentes para que a comunicação entre as redes possa acontecer. O IP é um protocolo fundamental nessa camada. Ele cuida do endereçamento e do roteamento dos dispositivos das redes. Há um tutorial específico sobre o protocolo IP.
Transporte
Cuida da transmissão dos dados pela rede. Seus dois principais protocolos são o TCP e o UDP. O TCP garante a entrega de seus pacotes, porém o UDP não garante. O protocolo TCP é usado em situações onde é importante que a mensagem seja entregue de forma íntegra. Já o protocolo UDP é útil para aplicações onde é necessário ter velocidade e a entrega e a integridade dos pacotes não são muitos importantes.
Aplicação
É a camada que tem a maior quantidade de protocolos. Seus protocolos incluem HTTP, FTP, POP3 e SMTP. É uma camada de nível muito mais alto do que as anteriores. Seus protocolos cuidam de serviços bem específicos, como envio de e-mails e transferência de arquivos.

As camadas acima podem ser estruturadas na forma de uma pilha. Elas estão listadas partindo da camada que fica mais em baixo (link de dados) até a camada que fica na parte superior da pilha (aplicação). Essa ordem é seguida durante as comunicações feitas usando o TCP/IP.

Transmissão de dados

Cada camada do protocolo TCP/IP se comunica com a camada que está imediatamente acima ou abaixo dela na pilha, exceto a camada de aplicação, que não tem nenhuma camada acima dela. Portanto, ela se comunica com a camada que está abaixo dela na pilha e de forma direta com o software que inicia o processo da comunicação.

O processo de transmissão de dados começa pelo software que inicia a comunicação. Esse software se comunica com a camada de aplicação, que se comunica com a camada que está abaixo dela, a camada de transporte, e o processo se repete até chegar à camada mais baixa, a camada de link de dados. Durante esse processo, cada camada anexa uma informação de controle (um cabeçalho, e no caso da camada de datalink, um rodapé também) com dados específicos dela, num processo que é chamado de encapsulamento.

Os dados que trafegam pelos protocolos são chamados de PDUs (Protocol Data Units). Eles são passados de cada camada superior para camada inferior de forma integral, ou seja, incluindo a informação de controle anexada pela camada superior. A Wikipedia tem um ótimo artigo sobre encapsulamento, em inglês. Nele, há uma imagem que ilustra bem esse processo:

Encapsulamento TCP/IP

Uma vez que a informação de controle da camada datalink é anexada, ela está pronta para ser enviada. Ao chegar ao seu destino, ela faz o caminho inverso: parte da camada mais inferior e vai sendo passada para as camadas imediatamente superiores até chegar à aplicação.

Ao receber o PDU, a camada de link remove a sua informação de controle e envia o PDU sem a sua informação de controle para a camada imediatamente superior (rede). A camada de rede também remove sua informação de controle e envia o PDU para a camada imediatamente superior (transporte). Esse processo se repete até que os dados cheguem à aplicação sem nenhuma informação de controle.

Dessa forma, toda a complexidade do processo de transporte é feita pelos protocolos, e não pelo software que deseja se comunicar com um servidor. Para se comunicar com um servidor, é necessário apenas saber o seu próprio endereço IP, o endereço IP do servidor (todo dispositivo conectado a uma rede precisa ter um endereço IP) e o endereço MAC do roteador da sua rede local.

Um roteador é responsável por examinar os dados que chegam até ele e enviá-los até outro roteador ou até o destino. Os dados podem passar por vários roteadores até chegarem ao seu destino. É tarefa dos roteadores conhecer as melhores rotas disponíveis para enviar os pacotes pelo melhor caminho para chegar ao seu destino.