# TCP/IP

O TCP/IP (também chamado de pilha de protocolos TCP/IP) é um conjunto de protocolos de comunicação entre computadores que estão ligados em rede. Seu nome vem de dois protocolos: o TCP (Transmission Control Protocol - Protocolo de Controle de Transmissão) e o IP (Internet Protocol - Protocolo de Internet, ou ainda, protocolo de interconexão). Este conjunto de protocolos pode ser visto como um modelo de camadas (Modelo OSI), onde cada camada é responsável por um grupo de tarefas, fornecendo um conjunto de serviços bem definidos para o protocolo da camada superior. As camadas mais altas, estão logicamente mais perto do utilizador, na camada de aplicação, e lidam com dados mais abstratos, confiando em protocolos de camadas mais baixas para tarefas de menor nível de abstração.

## História

O TCP/IP foi desenvolvido em 1969 pelo U.S. Department of Defense Advanced Research Projects Agency, como um recurso para um projeto experimental chamado de ARPANET (Advanced Research Project Agency Network) para preencher a necessidade de comunicação entre um grande número de sistemas de computadores e várias organizações militares dispersas. O objetivo do projeto era disponibilizar links (vínculos) de comunicação com alta velocidade, utilizando redes de comutação de pacotes. O protocolo deveria ser capaz de identificar e encontrar a melhor rota possível entre dois sites (locais), além de ser capaz de procurar rotas alternativas para chegar ao destino, caso qualquer uma das rotas tivesse sido destruída. O objetivo principal da elaboração de TCP/IP foi na época, encontrar um protocolo que pudesse tentar de todas as formas uma comunicação caso ocorresse uma guerra nuclear. A partir de 1972 o projeto ARPANET começou a crescer em uma comunidade internacional e hoje se transformou no que conhecemos como Internet. Em 1983 ficou definido que todos os computadores conectados ao ARPANET passariam a utilizar o TCP/IP, pois na época o rádio e a comunicação por satélite fora introduzida, e o modelo seguido pela ARPANET até então dificultava a integração dela com essas tecnologias emergentes. No final dos anos 1980 a Fundação Nacional de Ciências em Washington, D.C., começou a construir o NSFNET, um backbone para um supercomputador que serviria para interconectar diferentes comunidades de pesquisa e também os computadores da ARPANET. Em 1990 o NSFNET se tornou o backbone das redes para a Internet, padronizando definitivamente o TCP/IP.
Especificação
De 1973 a 1974 o grupo International Network Working Group (INWG), liderado por Cerf, trabalhou os detalhes da ideia do protocolo TCP/IP, resultando em sua primeira especificação.
A influência técnica significativa foi o trabalho da Xerox PARC, que produziu o PARC (Packet Universal protocol suite), muito mais do que existia naquela época.
DARPA então contratado pela BBN Technologies, da Universidade de Stanford e da University College London (UCL) para desenvolver versões operacionais do protocolo sobre diferentes plataformas de hardware. Quatro versões foram desenvolvidas: TCP v1, v2 TCP, TCP v3 e v3 IP e TCP / IP v4. O último protocolo ainda está em uso hoje.
Em 1975, foi realizado um teste de comunicação entre as duas redes TCP/IP entre Stanford e UCL (as duas universidades citadas anteriormente). Em novembro de 1977, foi realizado um teste entre três redes TCP/IP entre os sites nos EUA, Reino Unido e Noruega. Vários outros protótipos TCP/IP foram desenvolvidos em múltiplos centros de pesquisa entre 1978 e 1983. A migração da ARPANET para o TCP/IP foi oficialmente concluído no dia 1º de janeiro de 1983, quando o flag foi programado para ativar permanentemente os novos protocolos.
Em 2020, esgotou-se os endereçamentos disponíveis do TCP/IPv4. Para resolver este problema, a versão mais recente do protocolo, o TCP/ IPv6, veio para ampliar a gama endereçamentos, através do envio de endereços de protocolo por 128 bits, superior aos 32 bits do IPv4.

## Benefícios

O TCP/IP sempre foi considerado um modelo bastante pesado quando comparado com modelo UDP/IP, uma vez que o TCP/IP tem muito de seu foco voltado para a confiabilidade ao invés de só velocidade, diferente do UDP/IP, que é mais leve e veloz, mas não garante que a informação chegará ao respectivo destino.
Com o desenvolvimento das interfaces gráficas, com a evolução dos processadores e com o esforço dos desenvolvedores de sistemas operacionais em oferecer o TCP/IP para as suas plataformas com performance igual ou às vezes superior aos outros protocolos, o TCP/IP se tornou um protocolo indispensável.
O TCP/IP oferece alguns benefícios, dentre eles:
* Padronização: um padrão, um protocolo roteável que é o mais completo e aceito protocolo disponível atualmente. Todos os sistemas operacionais modernos oferecem suporte para o TCP/IP e a maioria das grandes redes se baseia em TCP/IP para a maior parte de seu tráfego;
* Interconectividade: uma tecnologia para conectar sistemas não similares. Muitos utilitários padrões de conectividade estão disponíveis para acessar e transferir dados entre esses sistemas não similares, incluindo FTP (File Transfer Protocol) e Telnet (Terminal Emulation Protocol);
* Roteamento: permite e habilita as tecnologias mais antigas e as novas a se conectarem à Internet. Trabalha com protocolos de linha como P2P (Point to Point Protocol) permitindo conexão remota a partir de linha discada ou dedicada. Trabalha como os mecanismos IPCs e interfaces mais utilizados pelos sistemas operacionais, como sockets do Windows e NetBIOS;
* Protocolo robusto: escalável, multiplataforma, com estrutura para ser utilizada em sistemas operacionais cliente/servidor, permitindo a utilização de aplicações desse porte entre dois pontos distantes;
* Internet: é através da suíte de protocolos TCP/IP que obtemos acesso a Internet. As redes locais distribuem servidores de acesso a Internet (proxy servers) e os hosts locais se conectam a estes servidores para obter o acesso a Internet. Este acesso só pode ser conseguido se os computadores estiverem configurados para utilizar TCP/IP.

## Protocolos para Internet

Os protocolos para Internet formam o grupo de protocolos de comunicação que implementam a pilha de protocolos sobre a qual a internet e a maioria das redes comerciais funcionam. Eles são algumas vezes chamados de "protocolos TCP/IP", já que os dois protocolos: o protocolo TCP - Transmission Control Protocol (Protocolo de Controle de Transmissão); e o IP - Internet Protocol (Protocolo de Internet) foram os primeiros a serem definidos.
O modelo OSI descreve um grupo fixo de sete camadas que pode ser comparado, a grosso modo, com o modelo TCP/IP. Essa comparação pode causar confusão ou trazer detalhes mais internos para o TCP/IP.
O modelo inicial do TCP/IP é baseado em 4 níveis: Host/rede; Inter-rede; Transporte; e Aplicação. Surgiu, então, um modelo híbrido, com 5 camadas, que retira o excesso do modelo OSI e melhora o modelo TCP/IP: Física; Enlace; Rede; Transporte; e Aplicação.
Resumidamente, o modelo é o que podemos chamar de uma "solução prática para problemas de transmissão de dados". Textualmente isto pode parecer muito genérico, pois na realidade para melhor compreensão de um protocolo TCP/IP deveremos usar exemplos práticos. Este modelo é ocasionalmente conhecido como modelo DoD, devido à influência fundamental da ARPANET em 1970 (operado pela DARPA, uma agência do Departamento de Defesa dos Estados Unidos).

### Funcionamento

TCP-IP possui 4 camadas sendo que o início se dá com o programa conversando na camada de aplicação. Nesta camada você vai encontrar protocolos como o SMTP (para e-mail), FTP (para transferência de arquivos) e HTTP (para navegar na internet) e cada tipo de programa fala para um protocolo diferente da camada de Aplicação, dependendo do propósito do programa.
Depois de processar a requisição, o protocolo na camada de Aplicação vai falar com outro protocolo na camada de Transporte, usualmente o TCP. Esta camada é responsável por pegar o dado enviado pela camada de Aplicação, dividindo este dado em pacotes a fim de enviá-lo para a camada inferior, a da Internet. Também, durante o recebimento do dados, a camada de Transporte é responsável por colocar os pacotes de dados recebidos da camada de Internet em ordem (os dados podem ser recebidos fora de ordem) e também checar se o conteúdo dos pacotes estão intactos.
Na camada da Internet, nós temos o IP (Internet Protocol), que pega os pacotes recebidos da camada de Transporte e adiciona uma informação de endereço virtual. Exemplo: adiciona o endereço do computador que está enviando dados e o endereço do computador que vai receber estes dados. Estes endereços virtuais são chamados de endereços IP. Então o pacote é enviado para a camada inferior, Interface de Rede e quando dos dados chegam nesta camada, eles são chamados de datagramas.
A Interface de Rede vai pegar os pacotes enviados pela camada de Internet e enviar através da rede (ou receber da rede, se o computador estiver recebendo dados). O que vai ter dentro desta camada vai depender do tipo de rede que o computador estiver inserido.
Hoje em dia, o tipo de arquitetura mais utilizada para comunicação entre computadores em redes locais é a Ethernet (que é avaliada em diferentes faixas de velocidade) e pode ser cabeada (cabo de par trançado CAT5 ou CAT6) ou WI-FI (sem fio). Ainda dentro da camada de Interface de Rede Ethernet, você deve encontrar camadas Ethernet como a LLC (Logic Link Control), MAC (Media Access Control) e a Física que é o meio físico (cabo por exemplo).
Os pacotes transmitidos através da rede são chamados de quadros.

## Camadas da pilha dos protocolos internet

O modelo ou arquitetura TCP/IP de encapsulamento busca fornecer abstração aos protocolos e serviços para diferentes camadas de uma pilha de estruturas de dados (ou simplesmente pilha).
No caso do modelo inicial do TCP/IP, a pilha possuía quatro camadas:
| Camada | Exemplo |
| 4 - Aplicação (5ª, 6ª e 7ª camada OSI) | HTTP, HTTPS, FTP, DNS Essa parte contém todos os protocolos para um serviço específico de comunicação de dados em um nível de processo-a-processo (por exemplo: como um web browser deve se comunicar com um servidor da web). |
| 3 - Transporte (4ª camada OSI) | TCP, UDP, SCTP Essa parte controla a comunicação host-a-host. [protocolos como OSPF, que é executado sobre IP, podem também ser considerados parte da camada de rede] |
| 2 - Internet (3ª camada OSI) | Para TCP/IP o protocolo é IP, MPLS Essa parte é responsável pelas conexões entre as redes locais, estabelecendo assim a interconexão. [protocolos requeridos como ICMP e IGMP é executado sobre IP, mas podem ainda ser considerados parte da camada de rede; ARP não roda sobre IP] |
| 1 - Enlace (Interface com Rede) (1ª e 2ª camada OSI) | Essa é a parte responsável por enviar o datagrama recebido pela camada de "Internet" em forma de um quadro através da rede. Tecnologias usadas para as conexões: Ethernet rede com fio e Wi-Fi rede sem fio. No modelo OSI, essa camada também é física, porém, é dividido em duas partes: física e enlace de dados. A física é a parte do hardware (por exemplo os cabos das redes com fio) e a enlace de dados é a parte lógica do hardware: endereço MAC de origem e destino; controle de enlace lógico; controle de acesso ao meio. |
As camadas mais próximas do topo estão logicamente mais perto do usuário, enquanto aquelas mais abaixo estão logicamente mais perto da transmissão física do dado. Cada camada tem um protocolo de camada acima e um protocolo de camada abaixo (exceto as camadas da ponta, obviamente) que podem usar serviços de camadas anteriores ou fornecer um serviço, respectivamente.
Enxergar as camadas como fornecedores ou consumidores de serviço é um método de abstração para isolar protocolos de camadas acima dos pequenos detalhes de transmitir bits através, digamos, de ethernet, e a detecção de colisão enquanto as camadas abaixo evitam ter de conhecer os detalhes de todas as aplicações e seus protocolos.
Essa abstração também permite que camadas de cima forneçam serviços que as camadas de baixo não podem fornecer. Por exemplo, o IP é projetado para não ser confiável e é um protocolo best effort delivery. Isso significa que toda a camada de transporte deve indicar se irá ou não fornecer confiabilidade e em qual nível.
O TCP (Transmission Control Protocol - Protocolo de Controle de Transmissão), é um protocolo orientado a conexões confiável que permite a entrega sem erros de um fluxo de bytes.
O UDP fornece integridade de dados (via um checksum) mas não fornece entrega garantida; já o TCP fornece tanto integridade dos dados quanto garantia de entrega (retransmitindo até que o destinatário receba o pacote).

### Comparação com o modelo OSI

Existe a discussão de como mapear o modelo TCP/IP convencionalmente de 4 camadas dentro do modelo OSI que possui o padrão de 7 camadas. Como os modelos TCP/IP e OSI não combinam exatamente, não existe uma única resposta para esta questão.
Além do mais, o modelo OSI não é realmente rico o suficiente nas camadas mais baixas para capturar a verdadeira divisão de camadas; é necessário uma camada extra (a camada internet) entre as camadas de transporte e de rede. Protocolos específicos para um tipo de rede que rodam em cima de estrutura de hardware básica precisam estar na camada de rede. Exemplos desse tipo de protocolo são ARP e o Spanning Tree Protocol (usado para manter pontes de rede redundantes em "espera" enquanto elas são necessárias). Entretanto, eles são protocolos locais e operam debaixo da funcionalidade internet. Reconhecidamente, colocar ambos os grupos (sem mencionar protocolos que são logicamente parte da camada internet, mas rodam em cima de um protocolo internet, como ICMP) na mesma camada pode ser um tanto confuso, mas o modelo OSI não é complexo o suficiente para apresentar algo melhor.
Geralmente, as três camadas mais acima do modelo OSI (aplicação, apresentação e sessão) são consideradas como uma única camada (aplicação) no modelo TCP/IP. Isso porque o TCP/IP tem uma camada de sessão relativamente leve, consistindo de abrir e fechar conexões sobre TCP e RTP e fornecer diferentes números de portas para diferentes aplicações sobre TCP e UDP. Se necessário, essas funções podem ser aumentadas por aplicações individuais (ou bibliotecas usadas por essas aplicações). Similarmente, IP é projetado em volta da ideia de tratar a rede abaixo dele como uma caixa preta de forma que ela possa ser considerada como uma única camada para os propósitos de discussão sobre TCP/IP.
O modelo TCP/IP está dividido em quatro camadas:
* Camada de aplicação (FTP, SMTP, TELNET, HTTP, HTTPS, etc.);
* Camada de transporte (TCP, UDP, etc.);
* Camada de rede (IP);
* Camada física (Ethernet, etc.).
Semelhanças:
* Ambos têm camadas;
* Ambos têm camadas de aplicação, embora incluam serviços muito diferentes;
* Ambos têm camadas de transporte e de rede comparáveis;
* A tecnologia de comutação de pacotes (e não comutação de circuitos) é presumida por ambos;
* Os profissionais da rede precisam conhecer ambos.
Diferenças:
* TCP/IP combina os aspectos das camadas de apresentação e de sessão dentro da sua camada de aplicação;
* TCP/IP combina as camadas física e de enlace do OSI em uma camada;
* TCP/IP parece ser mais simples por ter menos camadas;
* Os protocolos do TCP/IP são os padrões em torno dos quais a Internet se desenvolveu, portanto o modelo TCP/IP ganha credibilidade apenas por causa dos seus protocolos. Em contraste, nenhuma rede foi criada em torno de protocolos específicos relacionados ao OSI, embora todos usem o modelo OSI para guiar seu raciocínio.

## As camadas

O que se segue é uma descrição sobre cada camada da arquitetura de rede TCP/IP.

### A camada de aplicação

A camada de aplicação é uma das camadas de abstração de rede que a maioria dos programas para rede de computadores usam para se comunicarem com outros programas através de uma rede. Processos que rodam nessa camada são específicos da aplicação; o dado é passado do programa de rede, no formato usado internamente por essa aplicação, e é codificado dentro do padrão de um protocolo.
Alguns programas específicos são levados em conta nessa camada. Eles proveem serviços que suportam diretamente aplicações do usuário. Esses programas e seus correspondentes protocolos incluem o HTTP (navegação na World Wide Web), FTP (transporte de arquivos), SMTP (envio de email), SSH (login remoto seguro), DNS (pesquisas nome <-> IP) e muitos outros.
Uma vez que o dado de uma aplicação foi codificado dentro de um padrão de um protocolo da camada de aplicação ele será passado para a próxima camada da pilha IP.
Na camada de transporte, aplicações irão em sua maioria fazer uso de TCP ou UDP, e aplicações servidoras são frequentemente associadas com um número de porta. Portas para aplicações servidores são oficialmente alocadas pela IANA (Internet Assigned Numbers Authority) mas desenvolvedores de novos protocolos hoje em dia (2006) frequentemente escolhem os números de portas por convicção própria. Uma vez que é raro ter mais que alguns poucos programas servidores no mesmo sistema, problemas com conflito de portas são raros. Aplicações também geralmente permitem que o usuário especifique números de portas arbitrários através de parâmetros em tempo de execução.
Aplicações cliente conectando para fora geralmente usam um número de porta aleatório determinado pelo sistema operacional. O pacote relacionado à camada de aplicação é chamado Mensagem. Nessa camada ficam localizadas as interfaces socket e NetBIOS.
A sockets oferece uma interface de programação de aplicativos (API) que é padronizada para os diversos sistemas operacionais e que permite a comunicação de protocolos de transporte com diferentes convenções de endereçamento como TCP/IP e o IPX/SPX.
A NetBIOS proporciona uma interface de programação de aplicativo (API) para os protocolos que suportam a convenção de nomes NetBIOS para endereçamento como o próprio TCP/IP, IPX/SPX e ainda o NetBEUI.
Existem diversos protocolos nesta camada. Como exemplo de alguns deles podemos citar:
* SMTP (Simple Mail Transport Protocol) é utilizado para a comunicação entre serviços de correio eletrônico na Internet;
* POP (Post Office Protocol) é utilizado para recuperação de mensagens de correio eletrônico via Internet;
* IMAP (Internet Mail Access Protocol) - também é utilizado para recuperação de mensagens de correio eletrônico via Internet, mas de forma mais avançada que o POP3;
* HTTP (Hypertext Transport Protocol) – utilizado para a publicação de sites WEB na Internet;
* FTP (File Transfer Protocol) – utilizado para transferência de arquivos entre um cliente e um servidor na Internet

### A camada de transporte

Os protocolos na camada de transporte podem resolver problemas como confiabilidade (o dado alcançou seu destino?) e integridade (os dados chegaram na ordem correta?). Na suíte de protocolos TCP/IP os protocolos de transporte também determinam para qual aplicação um dado qualquer é destinado.
Os protocolos dinâmicos de routing, que tecnicamente cabem nessa camada do TCP/IP, são geralmente considerados parte da camada de rede. Como exemplo tem-se o OSPF (protocolo IP número 89).
O TCP, número 6 do protocolo IP, é um mecanismo de transporte "confiável", orientado à conexão e que fornece um stream de bytes confiável, garantindo assim que os dados cheguem íntegros (não danificados e em ordem). O TCP tenta continuamente medir o quão carregada a rede está e desacelera sua taxa de envio para evitar sobrecarga. Além disso, o TCP tentará entregar todos os dados corretamente na sequência especificada. Essas são as principais diferenças dele para com o UDP, e pode se tornar desvantajoso em streaming, em tempo real ou aplicações de routing com altas taxas de perda na camada internet.
Recentemente criou-se SCTP (Stream Control Transmission Protocol, Protocolo de Transmissão de Controle de Stream), que também consiste em um mecanismo de transporte "confiável". Ele provê suporte a multihoming, onde o final de uma conexão pode ser representada por múltiplos endereços IP (representando múltiplas interfaces físicas), de maneira que, se algum falhar, a conexão não é interrompida. Ele foi desenvolvido inicialmente para transportar SS7 sobre IP em redes telefônicas, mas também pode ser usado para outras aplicações.
O UDP (User Datagram Protocol), número 17 do protocolo IP, é um protocolo de datagrama sem conexão. Ele é um protocolo de "melhor esforço" ou "não confiável". Não porque ele é particularmente não confiável, mas porque ele não verifica se os pacotes alcançaram seu destino, e não dá qualquer garantia que eles irão chegar na ordem. Se uma aplicação requer estas características, então ela mesma terá que provê-las ou usar o protocolo TCP.
O UDP é tipicamente usado por aplicações como as de mídia de streaming (áudio, vídeo etc), onde a chegada na hora é mais importante do que confiabilidade, ou para aplicações de simples requisição/resposta como pesquisas de DNS, onde o overhead de configurar uma conexão confiável é desproporcionalmente largo.
O DCCP está atualmente (2006) em desenvolvimento pelo IETF. Ele provê controle de fluxo das semânticas do TCP, enquanto mantém o modelo de serviço de datagramas do UDP visível para o usuário. O DHCP é incrementado automaticamente sem intervenção do usuário.
Tanto o TCP quanto o UDP são usados para transmitir um número de aplicações de alto nível. As aplicações em qualquer endereço de rede são distinguidas por seus endereços de porta TCP ou UDP. Por convenção, certas portas "bem conhecidas" estão associadas com aplicações específicas.
O pacote da camada de transporte é chamado segmento.

### A camada de rede

Como definido anteriormente, a camada de rede resolve o problema de obter pacotes através de uma rede simples. Exemplos de protocolos são o X.25 e o Host/IMP da ARPANET.
Com o advento da internet novas funcionalidades foram adicionadas nesta camada, especialmente para a obtenção de dados da rede de origem e da rede de destino. Isso geralmente envolve rotear o pacote através de redes distintas que se relacionam através da internet.
Na suíte de protocolos para a internet, o IP executa a tarefa básica de levar pacotes de dados da origem para o destino. O protocolo IP pode transmitir dados para diferentes protocolos de níveis mais altos, esses protocolos são identificados por um único número de protocolo IP.
Alguns dos protocolos transmitidos por IP, como o ICMP (usado para transmitir informação de diagnóstico sobre a transmissão IP) e o IGMP (usado para gerenciar dados multicast) são colocados acima do IP mas executam funções da camada internet. Isso ilustra uma incompatibilidade entre os modelos da internet e OSI. Todos os protocolos de routing, como o BGP, o OSPF e o RIP são também parte da camada de internet, muito embora eles possam ser vistos como pertencentes a camadas mais altas na pilha.
O PDU (Protocol Data Unit) descreve um bloco de dados que é transmitido entre duas instâncias da mesma camada. O PDU da camada de rede é geralmente conhecido como "pacote". Lembrando que todas as camadas tem seu PDU que variam o nome em:
* Dados (Aplicação);
* Segmento (Transporte);
* Pacote (Rede);
* Quadros (Enlace); e
* Bits (Física e LLC que é sub-camada de enlace).

### A camada de enlace

A camada de enlace não é realmente parte do modelo TCP/IP, mas é o método usado para passar quadros da camada de rede de um dispositivo para a camada de rede de outro. Esse processo pode ser controlado tanto em software (device driver) para a placa de rede quanto em firmware ou chipsets especializados. Esses irão executar as funções da camada de enlace de dados como adicionar um header de pacote para prepará-lo para transmissão, então de fato transmitir o quadro através da camada física. Do outro lado, a camada de enlace irá receber quadros de dados, retirar os headers adicionados e encaminhar os pacotes recebidos para a camada de rede. Essa camada é a primeira normatizada do modelo, é responsável pelo endereçamento, roteamento e controle de envio e recepção. Ela não é orientada à conexão, se comunica pelos datagramas (pacotes de dados).
Entretanto, a camada de enlace não é sempre tão simples. Ela pode também ser um VPN (Virtual Private Network, Rede Privada Virtual) ou túnel, onde pacotes da camada de internet, ao invés de serem enviados através de uma interface física, são enviados usando um protocolo de tunneling e outra (ou a mesma) suíte de protocolos. O VPN ou túnel é usualmente estabelecido além do tempo, e tem características especiais que a transmissão direta por interface física não possui (por exemplo, ele pode criptografar os dados que passam através dele). Esse uso recursivo de suíte de protocolos pode ser confuso uma vez que a "camada" de enlace é agora uma rede inteira. Mas é um método elegante para implementar funções frequentemente complexas. Embora seja necessário muito cuidado para prevenir que um pacote já empacotado e enviado através de um túnel seja mais uma vez empacotado e reenviado pelo mesmo.
O pacote da camada de enlace é conhecido como quadro.

### A camada física

A camada de interface de rede ou física é a primeira camada. Também chamada camada de abstração de hardware, tem como função principal a interface do modelo TCP/IP com os diversos tipos de redes (X.25, ATM, FDDI, Ethernet, Token Ring, Frame Relay, sistema de conexão ponto-a-ponto SLIP,etc.) e transmitir os datagramas pelo meio físico, sinais físicos, tem a função de encontrar o caminho mais curto e confiável. Como há uma grande variedade de tecnologias de rede, que utilizam diferentes velocidades, protocolos, meios transmissão, etc. , esta camada não é normatizada pelo modelo, o que provê uma das grandes virtudes do modelo TCP/IP: a possibilidade de interconexão e inter-operação de redes heterogêneas.
Esta camada lida com os meios de comunicação, corresponde ao nível de hardware, ou meio físico, que trata dos sinais eletrônicos, conector, pinagem, níveis de tensão, dimensões físicas, características mecânicas e elétricas etc. Os protocolos da camada física enviam e recebem dados em forma de pacotes, que contém um endereço de origem, os dados propriamente ditos e um endereço de destino. Os datagramas já foram construídos pela camada de redes.
É responsável pelo endereçamento e tradução de nomes e endereços lógicos em endereços físicos. Ela determina a rota que os dados seguirão do computador de origem até o de destino. Tal rota dependerá das condições da rede, prioridade do serviço e outros fatores.
Também gerencia o tráfego e taxas de velocidade nos canais de comunicação. Outra função que pode ter é o agrupamento de pequenos pacotes em um único para transmissão pela rede (ou a subdivisão de pacotes grandes). No destino os dados são recompostos no seu formato original.
Características
* Ela estabelece e encerra as conexões.
* Notificação e correção de falhas.
* Podem ser guiados, através de cabos.
* Podem ser não guiados, sem fio: rádio, micro-ondas.
* Pode usar o sinal analógico ou digital.
* Permite a transmissão de mais de um sinal em um mesmo meio físico.
* Esta camada não define protocolos, mas diz como usar os protocolos já existentes.
* Mapeia os endereços lógicos em físicos, ou seja, transforma os endereços lógicos em físicos.
* Os bits são codificados por Manchester Encoding ou Differencial Manchester Encoding.
* Pode ser considerada uma das mais importantes, pois permitem que os dados cheguem ao destino da forma mais eficiente possível. O protocolo IP situa-se nessa camada.
Três funções importantes:
* Determinação do caminho: rota seguida por pacotes da origem ao destino. Algoritmos de roteamento.
* Comutação: mover pacotes dentro do roteador da entrada à saída apropriada.
* Estabelecimento da chamada: algumas arquiteturas de rede requerem determinar o caminho antes de enviar os dados.
Mais características:
* Tradução de endereços.
* Conversão de endereços IP em endereços físicos.
* Encapsulamento.
* Transporte de datagramas IP em quadros da rede física.
* Multi-tecnologia.
* Suporte a diversas tecnologias de redes.
* Ethernet - Frame Relay - Token Ring - ATM.
* FDDI - Linhas Seriais - X.25.
* Nível de interface de rede.
* Aceita datagramas IP para transmissão sobre uma rede específica.
* Encapsulamento de datagramas IP em quadros da rede.
* Geralmente implementado através de device drivers.
* Permite a implantação de TCP/IP sobre qualquer hardware de rede ou subsistema de comunicação.
* Converte os pacotes em frames compatíveis com o tipo de rede que está sendo utilizada.
Alguns protocolos utilizados nesta camada são:
* Protocolos com estrutura de rede própria: X.25, Frame-Relay e ATM.
* Protocolos de Enlace OSI: PPP, Ethernet, Token-Ring, FDDI, HDLC, Slip, etc..
* Protocolos de nível físico: V.24, X.21.
* Protocolos de barramento de alta velocidade: SCSI, HIPPI.
* Protocolo de mapeamento de Endereços: ARP.

## Implementações

Hoje, a maioria dos sistemas operacionais comerciais incluem e instalam a pilha TCP/IP por padrão. Para a maioria dos usuários, não há nenhuma necessidade de procurar por implementações. O TCP/IP é incluído em todas as versões do Unix e Linux, assim como no Mac OS e no Microsoft Windows.
Não é requerido implementações específicas de hardware ou software pelos protocolos ou o modelo de camadas, pois já há muitos. A maioria dos sistemas operacionais de computador em uso hoje, incluindo todos os sistemas de consumo-alvo, incluem a implementação TCP/IP.
Uma minoria de implementações aceitáveis inclui os seguintes protocolos, listados do mais essencial ao menos essencial: IP, ARP, ICMP, UDP, TCP e algumas vezes IGMP. Em princípio, é possível suportar somente um protocolo de transporte, como UDP, mas isso é raramente feito, porque isso limita o uso de toda a implementação. O IPv6, além da sua própria versão da ARP (NDP), ICMP (ICMPv6) e IGMP (IGMPv6), tem algumas funções requiridas adicionais, e frequentemente são acompanhadas por uma camada de segurança integrada IPSec. Outros protocolos podem ser facilmente adicionados depois (possivelmente sendo implementado totalmente em userspace), como a DNS para a resolução de nomes de domínio para endereços IP, ou DHCP para configurar automaticamente interfaces de rede.
Normalmente, os programadores de aplicativos estão preocupados somente com a interface na camada de aplicação e muitas vezes também preocupados com a camada de transporte, enquanto as camadas abaixo são serviços prestados pelo conjunto TCP/IP no sistema operacional. A maioria das implementações de IP são acessíveis aos programadores através de sockets e APIs.
Implementações únicas incluem Lightweight TCP/IP, um conjunto de códigos abertos projetado para sistemas embarcados, e KA9Q NOS, a pilha e um conjunto de protocolos associados para sistemas de radio amador e computadores pessoais conectados através de linhas seriais.
O microcontrolador firmware no adaptador de rede lida com questões de link, suportado pelo driver de software no sistema operacional. Eletrônicos não-programados analogicamente e digitalmente são normalmente encarregados dos componentes físicos abaixo da camada de enlace, tipicamente usando um Chipset de Aplicação-Específica de Circuito Integrado (ASIC em inglês) para cada interface de rede ou outro chipset físico padrão. Roteadores de alto desempenho são em grande parte baseados em eletrônicos digitais rápidos não programáveis, realizando troca de links.