# data[].attributes.body
Primeiro passo para padronização em camadas

Não é uma arquitetura pois não especifica os serviços e protocolos exatos de cada camada

Foram definidas sete camadas para esse modelo, onde cada uma foi criada onde havia a necessidade de um novo grau da abstração

1. Camada Física: Trata da transmissão dos bits:

Quanto tempo um bit deve durar;

Se a transmissão será nos dois sentidos;

Estabelecimento e encerramento da conexão inicial;

Trata de quantos pinos o conector deverá ter e qual a funcionalidade deles;

Emprega esquemas para codificação de um sinal digital em bits

2. Enlace: Mascara erros da camada de conexão real para que a rede não os veja

O transmissor divide os dados de entrada em quadros de dados;

O receptor confia a transmissão desses quadros através de um quadro de confirmação;

Regula o trafego de dados, informando ao transmissor quando o receptor pode receber mais dados;

Em redes de broadcast -a todos ao mesmo tempo- o enlace controla o aceso ao canal compartilhado por meio de uma subcamada

# data[].attributes.body
3. Rede: como os pacotes vão da origem ao destino passando, talvez, por redes intermediarias

Rotas baseadas em tabelas estáticas são geradas após o início de uma sessão e são raramente alteradas e podem seguir dispositivos defeituosos, gerando custo de retransmissão;

Já as tabelas mais dinâmicas verificam os dispositivos da rota e são geradas a cada pacote;

A camada controla o congestionamento de pacotes, adaptando a carga sob a rede, tratando a qualidade do serviço, o atraso e a instabilidade;

Também é responsável por conectar redes mesmo que possuam características de conexão distintas;

4. Transporte: Aceita dados da camada acima e divide eles em unidades menores e repassa-los à rede, ligando origem ao destino

Determina o tipo de serviço oferecido a cama acima, e o mais usado é o que entrega bytes na mesma ordem que foram recebidos, mas também pode ofertar um serviço que não garanta a ordem de entrega

# data[].attributes.body
5. Sessão: Permite que diferentes máquinas estabeleçam conexão:

Realiza o controle de diálogo: Quem transmite a cada momento;

Gerenciamento de tokens: Impede que duas maquinas realizem a mesma operação critica ao mesmo tempo;

Sincronização: Verifica periodicamente longas transmissões para que, em caso de falhas, continuem do ponto que parou

6. Apresentação: Sintaxe e semântica das informações transmitidas, possibilitando conexão entre computadores com diferentes representações internas de dados, usando uma codificação padrão adotada nessa camada:

Gerencia os dados abstratos da codificação padrão e permite a troca de estruturas de dados;

7. Aplicação: Camada de protocolos para usuários e aplicações: HTTP

# data[].attributes.body
Surgiu como alternativa para interconectar computadores e foi base para a primeira rede baseada na comunicação de pacotes, a ARPANET, antecessora da Internet, formando assim uma rede em escala global. Uma de suas características é manter a interconexão mesmo com parte da rede comprometida. Possui apenas 4 camadas que, apesar de possuir nomes parecidos com os do modelo OSI, possui algumas funções diferentes.

1. Camada de Enlace: É uma interface entre dispositivos e enlaces de transmissão, essa descreve o que os enlaces e a Ethernet devem fazer para realizar a interconexão com o serviço não orientado a conexão

Os quadros, formados por sequencias de caracteres(com o protocolo BSC ou PPP) ou bits(com o protocolo HDLC ou PPP), possuem cabeçalho (com informações que promovem comunicação horizontal entre as camadas de enlace da origem e destino), dados (encapsula a unidade de dados do protocolo PDU que é a unidade da combinação dos dados e cabeçalho e o que passa para a camada de rede) e o código de detecção de erros que verifica erros na camada física;

O enquadramento é a capacidade de identificação do inicio e fim do bloco pelo receptor. O uso de flags para identificar os limites dos quadros pode ser limitado pois um problema pode ser a ocorrência das próprias flags dentro de um quadro. Já a abordagem Byte stuffing abrange protocolos de caracteres e emprega um caractere especial que identifica um delimitador no quadro, outro esquema para protocolos de caractere é usando o tamanho do quadro, indicado no cabeçalho, já o bit stuffing abrange protocolos orientados a bits e também usa flags onde a cada 5 bits dentro de um quadro, um bit "o" é adicionado pelo transmissor, evitando o problema.

Endereçamento realiza a identificação da interface de comunicação que conecta o dispositivo a rede, onde cada uma deve ter um endereço, que são empregados nos quadros usados nas redes locais, que possui endereço de origem e destino, tamanho, dados e CDE. O endereço da camada de anlace é referenciado como MAC Medium Access Control. São formas de endereçamento:

Unicast: Para 1 destinatário

Broadcast: Para todos (quando não se sabe o endereço do receptor)

Multicast: para um grupo de dispositivos

# data[].attributes.body
A camada de enlace também detecta erros por meio de informações de controle que são enviadas com os dados, assim o receptor recalcula o código de detecção de erro (que possui uma função geradora comum entre receptor e emissor) e e compara com o que foi recebido (Imagem 1);

Bit de paridade: Também usado para detectar erros em transmissões de baixa velocidade, na técnica simples, coloca um bit ao final de cada caractere transmitido, assim o total será par ou ímpar, já na técnica múltipla também é adicionado um bit em cada bloco transmitido;

Técnica de verificação de redundância cíclica: os bits que representam os dados são divididos por um número previamente definido, e assim, o resto da divisão é colocado entre os dados e transmitido. Quando chega ao destino, ocorre a divisão do dado recebido pelo mesmo número, se der 0, os dados estão corretos;

# data[].attributes.body
Também -na maioria das vezes- ocorre a correção desses erros, quando um quadro é transmitido, o receptor confirma o recebimento do pacote por meio de um ACK, que funciona a partir da predefinição de um tempo para que o receptor retorne o quadro com a confirmação do recebimento para o transmissor. Esse ACK pode ser um quadro especial transmitido com os dados ou fazer parte do cabeçalho.

Na técnica de piggybacking a implementação do controle do ACK no cabeçalho é possibilitado, onde o reconhecimento é enviado juntamente com os dados. Nessa técnica pode haver uma situação onde o receptor não tenha dados para transmitir de volta, e o transmissor entenderia que ele não recebeu o quadro e enviaria novamente, para conter essa situação o receptor deve forçar o envio de um ACK mesmo que seja sem dados.

Se o quadro chegar ao destino com erros é possível usar o reconhecimento negativo que avisa o transmissor sobre o problema e envia um NAK, e o quadro é retransmitido, uma desvantagem é que o temporizador pode acabar antes do envio do NAK, e para isso foi desenvolvido a técnica de correção do destino, onde o próprio receptor corrige os erros usando de mais informações de controle enviadas pelo transmissor

# data[].attributes.body
Outra ação para correção de erros são os protocolos de repetição automática de requisição que usam o reconhecimento e a retransmissão de quadros como mecanismo. Podendo usar:

Bit Alternado, onde o transmissor aguarda o reconhecimento de cada quadro antes de enviar outro, mas possui desvantagens como a possibilidade de duplicação de quadros, originada de um ACK que teve falha no seu envio, para corrigir isso enumera-se os quadros recebidos variando entre os bits 0 e 1, assim o primeiro pacote recebido é mantido, e o mais novo, descartado. Outra desvantagem é que é necessário aguardar pela confirmação de cada quadro o que piora a comunicação em conexões distantes;

O protocolo de retransmissão integral contorna o problema do tempo de espera, pois vários quadros podem ser transmitidos, sem o reconhecimento individual do anterior permitindo maior flexibilidade para enviar e receber quadros. Nesse protocolo (Janela deslizante), na origem é colocada uma janela de transmissão que controla os quadros que podem ser transmitidos, já a janela de recepção possui tamanho fixo e cada quadro recebido é reconhecido individualmente. Quando há um erro os quadros não reconhecidos devem ser retransmitidos, representando uma desvantagem.

Já o protocolo de retransmissão seletiva os quadros podem ser recebidos fora de ordem, usando uma Janela de Recepção, que permite controlar os quadros que ainda podem ser recebidos, assim, define a capacidade máxima de quadros que a camada de enlace do destino consegue gerenciar. Assim o tamanho da janela vai variar com os quadros reconhecidos, sabendo que esses quadros podem ter sido recebidos e reconhecidos ou recebidos e não reconhecidos. Em suma, a janela pode reduzir de tamanho quando tem posições dela ocupadas, e aumentar quando esses quadros são reconhecidos.

Para solucionar alguns problemas foi adicionado ao protocolo de retransmissão seletiva o reconhecimento cumulativo, em que apenas o reconhecimento do ultimo quadro recebido corretamente é enviado. Entretanto, pode haver um problema de sobreposição na janela do receptor, que pode ocasionar em duplicações de quadros, pois, se por algum problema, o ACK não retornar, o primeiro quadro pode ser reenviado por timeout, gerando uma duplicação. Logo, a janela de recepção não deve ter capacidade maior que a metade do número de sequencia usado para enumerar os quadros.

# data[].attributes.body
Ainda na camada de enlace, ocorre o controle de fluxos, de forma que o dispositivo transmissor controle a quantidade de dados enviados para o receptor não precise descartar alguns dos dados transmitidos, o que obriga retransmissões:

Pare e Espere: Estratégia que consiste no aguardo do transmissor pela confirmação do recebimento para enviar o próximo quadro, entretanto gera subutilização do canal;

Envio de mensagens de aptidão: O receptor manda mensagens informando se está apto ou não para receber novos quadros. Os protocolos com janela deslizante podem implementar o controle de fluxo somente ajustando o tamanho da janela de transmissão, que não é fixa;

Envio do tamanho da janela de recepção: O receptor irá informar o tamanho da janela de recepção, quando essa estiver vazia e não puder receber mais quadros, é enviado ao transmissor o tamanho 0. É usado pelo modelo Internet.

# data[].attributes.body
A camada INTERNET ou REDE, trabalha para permitir que possam ser compartilhados pacotes em qualquer rede e garantir que eles irão independentemente até o destino, mesmo que a ordem dos pacotes recebidos possa ser diferente dos pacotes enviados, podendo percorrer redes distintas.

A rede de interconexão é entendida pelo conjunto de dispositivos para conectar dois nós da rede de computadores, que podem trocar mensagens unicamente através de mensagens por meio de nós intermediários, existindo diferentes caminhos possíveis para uma mensagem percorrer, mas é função da camada de rede determinar a melhor rota entre esses dois pontos.

Essa camada se diferencia do modelo OSI ao passo que usa o Protocolo IP ou o pacote ICMP (por meio dele, um roteador pode reportar a estação de origem um erro no processamento, e informa somente os erros ao nível IP, não esclarecendo a correção).

PROTOCOLO IP: ENDEREÇA E ENCAMINHA OS PACOTES!!!!

# data[].attributes.body
A camada de Transporte permite que as entidades pares dos hosts de origem e destino mantenham comunicação, usando protocolos:

TCP: Implementa o controle de fluxo e possui conexões confiáveis e sem erro no fluxo de bytes;

UDP: Protocolo sem conexões, não confiável e usado quando não há necessidade do controle de fluxo, onde a entrega imediata é mais importante do que a entrega precisa (voz e vídeo);

A camada de Aplicação foi unida às funções necessárias das camadas de sessão e apresentação, contendo assim, todos os protocolos de mais alto nível:

FTP: Usado na transferência de arquivos;

DNS: Usa nomes de fácil entendimento humano para o endereço IP;

SMTP: Usado para correio eletrônico;

HTTP: Protocolo da WEB

# data[].attributes.body
O modelo OSI surgiu antes do modelo TCP IP e antes dos protocolos terem sido desenvolvidos, o que o tornou um pouco genérico, assim, as pessoas que projetaram esse modelo não tinham muita certeza do que cada camada deveria incluir, já na arquitetura TCP/IP os protocolos surgiram primeiro, assim, se baseou nos protocolos já existentes, consequentemente, ele não se adaptava a outros protocolos e não tem tanta utilidade em redes que não usem o protocolo TCP/IP.

Mesmo com essa diferença no desenvolvimento, eles apresentam alguns pontos em comum, onde as camadas tem praticamente funcionalidades iguais, como a camada de transporte, que oferece um serviço de transporte fim a fim.

Uma das principais diferenças, além do número de camadas é que o modelo OSI se baseia em Serviços(informa o que a camada faz, ignorando como a camada funciona e como pode ser acessada), Interfaces (informa como processos que estão acima da camada podem acessa-la, de modo a especificar parâmetros e resultados esperados sem revelar o funcionamento interno) e Protocolos(de uma camada são responsabilidade única dessa camada). O modelo TCP/IP, não diferencia isso de forma clara, como exemplo, na camada de Rede, os únicos serviços são o envio de pacote IP e o recebimento dos pacotes IP, já no modelo OSI os protocolos são mais encapsulados e podem ser alterados.

Outra diferença é que a camada de Rede do modelo OSI suporta comunicação não orientada e comunicação orientada a conexão, já no TCP/IP apenas comunicação não orientada a conexões, mas a camada de transporte do modelo OSI aceita apenas comunicação orientada a conexões e o modelo TCP/IP aceita ambos.