b'\n_START_ARTICLE_\nTCP/IP\n_START_PARAGRAPH_\nO TCP/IP (tamb\xc3\xa9m chamado de pilha de protocolos TCP/IP) \xc3\xa9 um conjunto de protocolos de comunica\xc3\xa7\xc3\xa3o entre computadores em rede. Seu nome vem de dois protocolos: o TCP (Transmission Control Protocol - Protocolo de Controle de Transmiss\xc3\xa3o) e o IP (Internet Protocol - Protocolo de Internet, ou ainda, protocolo de interconex\xc3\xa3o). O conjunto de protocolos pode ser visto como um modelo de camadas (Modelo OSI), onde cada camada \xc3\xa9 respons\xc3\xa1vel por um grupo de tarefas, fornecendo um conjunto de servi\xc3\xa7os bem definidos para o protocolo da camada superior. As camadas mais altas, est\xc3\xa3o logicamente mais perto do usu\xc3\xa1rio (chamada camada de aplica\xc3\xa7\xc3\xa3o) e lidam com dados mais abstratos, confiando em protocolos de camadas mais baixas para tarefas de menor n\xc3\xadvel de abstra\xc3\xa7\xc3\xa3o.\n_START_SECTION_\nHist\xc3\xb3ria TCP/IP\n_START_PARAGRAPH_\nO 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\xc3\xa7\xc3\xa3o entre um grande n\xc3\xbamero de sistemas de computadores e v\xc3\xa1rias organiza\xc3\xa7\xc3\xb5es militares dispersas. O objetivo do projeto era disponibilizar links (v\xc3\xadnculos) de comunica\xc3\xa7\xc3\xa3o com alta velocidade, utilizando redes de comuta\xc3\xa7\xc3\xa3o de pacotes. O protocolo deveria ser capaz de identificar e encontrar a melhor rota poss\xc3\xadvel entre dois sites (locais), al\xc3\xa9m de ser capaz de procurar rotas alternativas para chegar ao destino, caso qualquer uma das rotas tivesse sido destru\xc3\xadda. O objetivo principal da elabora\xc3\xa7\xc3\xa3o de TCP/IP foi na \xc3\xa9poca, encontrar um protocolo que pudesse tentar de todas as formas uma comunica\xc3\xa7\xc3\xa3o caso ocorresse uma guerra nuclear. A partir de 1972 o projeto ARPANET come\xc3\xa7ou 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. No final dos anos 1980 a Funda\xc3\xa7\xc3\xa3o Nacional de Ci\xc3\xaancias em Washington, D.C, come\xc3\xa7ou a construir o NSFNET, um backbone para um supercomputador que serviria para interconectar diferentes comunidades de pesquisa e tamb\xc3\xa9m os computadores da ARPANET. Em 1990 o NSFNET se tornou o backbone das redes para a Internet, padronizando definitivamente o TCP/IP._NEWLINE_Especifica\xc3\xa7\xc3\xa3o_NEWLINE_De 1973 a 1974, o grupo CERF de redes de pesquisas de Stanford trabalhou os detalhes da ideia do protocolo TCP/IP, resultando em sua primeira especifica\xc3\xa7\xc3\xa3o. A influ\xc3\xaancia t\xc3\xa9cnica significativa foi o trabalho da Xerox PARC, que produziu o PARC (Packet Universal protocol suite), muito mais do que existia naquela \xc3\xa9poca._NEWLINE_DARPA ent\xc3\xa3o contratado pela BBN Technologies, da Universidade de Stanford e da University College London (UCL) para desenvolver vers\xc3\xb5es operacionais do protocolo sobre diferentes plataformas de hardware. Quatro vers\xc3\xb5es foram desenvolvidas: TCP v1, v2 TCP, TCP v3 e v3 IP e TCP / IP v4. O \xc3\xbaltimo protocolo ainda est\xc3\xa1 em uso hoje._NEWLINE_Em 1975, foi realizado um teste de comunica\xc3\xa7\xc3\xa3o 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\xc3\xaas redes TCP/IP entre os sites nos EUA, Reino Unido e Noruega. V\xc3\xa1rios outros prot\xc3\xb3tipos TCP/IP foram desenvolvidos em m\xc3\xbaltiplos centros de pesquisa entre 1978 e 1983. A migra\xc3\xa7\xc3\xa3o da ARPANET para o TCP/IP foi oficialmente conclu\xc3\xaddo no dia 1\xc2\xba de janeiro de 1983, quando o flag foi programado para ativar permanentemente os novos protocolos.\n_START_SECTION_\nFuncionamento\n_START_PARAGRAPH_\nTCP-IP possui 4 camadas sendo que o in\xc3\xadcio se d\xc3\xa1 com o programa conversando na camada de aplica\xc3\xa7\xc3\xa3o. Nesta camada voc\xc3\xaa vai encontrar protocolos como o SMTP (para e-mail), FTP (para transfer\xc3\xaancia de arquivos) e HTTP (para navegar na internet) e cada tipo de programa fala para um protocolo diferente da camada de Aplica\xc3\xa7\xc3\xa3o, dependendo do prop\xc3\xb3sito do programa._NEWLINE_Depois de processar a requisi\xc3\xa7\xc3\xa3o, o protocolo na camada de Aplica\xc3\xa7\xc3\xa3o vai falar com outro protocolo na camada de Transporte, usualmente o TCP. Esta camada \xc3\xa9 respons\xc3\xa1vel por pegar o dado enviado pela camada de Aplica\xc3\xa7\xc3\xa3o, dividindo este dado em pacotes a fim de enviar ele para a camada inferior, a da Internet. Tamb\xc3\xa9m, durante o recebimento do dados, a camada de Transporte \xc3\xa9 respons\xc3\xa1vel por colocar os pacotes de dados recebidos da camada de Internet em ordem (os dados podem ser recebidos fora de ordem) e tamb\xc3\xa9m checar se o conte\xc3\xbado dos pacotes est\xc3\xa3o intactos._NEWLINE_Na camada da Internet, n\xc3\xb3s temos o IP (Internet Protocol), que pega os pacotes recebidos da camada de Transporte e adiciona uma informa\xc3\xa7\xc3\xa3o de endere\xc3\xa7o virtual. Exemplo: adiciona o endere\xc3\xa7o do computador que est\xc3\xa1 enviando dados e o endere\xc3\xa7o do computador que vai receber estes dados. Estes endere\xc3\xa7os virtuais s\xc3\xa3o chamados de endere\xc3\xa7os IP. Ent\xc3\xa3o o pacote \xc3\xa9 enviado para a camada inferior, Interface de Rede e quando dos dados chegam nesta camada, eles s\xc3\xa3o chamados de datagramas._NEWLINE_A Interface de Rede vai pegar os pacotes enviados pela camada de Internet e enviar atrav\xc3\xa9s 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 rede mais utilizado para comunica\xc3\xa7\xc3\xa3o entre computadores \xc3\xa9 a Ethernet (que \xc3\xa9 avaliada em diferentes faixas de velocidade) e pode ser cabeada (cabo de par tran\xc3\xa7ado CAT5 ou CAT6) ou WI-FI (sem fio). Ainda dentro da camada de Interface de Rede Ethernet, voc\xc3\xaa deve encontrar camadas Ethernet como a LLC (Logic Link Control), MAC (Media Access Control) e a F\xc3\xadsica que \xc3\xa9 o meio f\xc3\xadsico (cabo por exemplo). Os pacotes transmitidos atrav\xc3\xa9s da rede s\xc3\xa3o chamados de quadros.\n_START_SECTION_\nAs Camadas\n_START_PARAGRAPH_\nO que segue \xc3\xa9 uma descri\xc3\xa7\xc3\xa3o de cada camada na pilha da su\xc3\xadte.\n_START_SECTION_\nA camada de transporte\n_START_PARAGRAPH_\nOs protocolos na camada de transporte podem resolver problemas como confiabilidade (o dado alcan\xc3\xa7ou seu destino?) e integridade (os dados chegaram na ordem correta?). Na su\xc3\xadte de protocolos TCP/IP os protocolos de transporte tamb\xc3\xa9m determinam para qual aplica\xc3\xa7\xc3\xa3o um dado qualquer \xc3\xa9 destinado._NEWLINE_Os protocolos din\xc3\xa2micos de routing, que tecnicamente cabem nessa camada do TCP/IP, s\xc3\xa3o geralmente considerados parte da camada de rede. Como exemplo tem-se o OSPF (protocolo IP n\xc3\xbamero 89)._NEWLINE_O TCP, n\xc3\xbamero 6 do protocolo IP, \xc3\xa9 um mecanismo de transporte "confi\xc3\xa1vel", orientado \xc3\xa0 conex\xc3\xa3o e que fornece um stream de bytes confi\xc3\xa1vel, garantindo assim que os dados cheguem \xc3\xadntegros (n\xc3\xa3o danificados e em ordem). O TCP tenta continuamente medir o qu\xc3\xa3o carregada a rede est\xc3\xa1 e desacelera sua taxa de envio para evitar sobrecarga. Al\xc3\xa9m disso, o TCP tentar\xc3\xa1 entregar todos os dados corretamente na sequ\xc3\xaancia especificada. Essas s\xc3\xa3o as principais diferen\xc3\xa7as dele para com o UDP, e pode se tornar desvantajoso em streaming, em tempo real ou aplica\xc3\xa7\xc3\xb5es de routing com altas taxas de perda na camada internet._NEWLINE_Recentemente criou-se SCTP (Stream Control Transmission Protocol, Protocolo de Transmiss\xc3\xa3o de Controle de Stream), que tamb\xc3\xa9m consiste em um mecanismo de transporte "confi\xc3\xa1vel". Ele prov\xc3\xaa suporte a multihoming, onde o final de uma conex\xc3\xa3o pode ser representada por m\xc3\xbaltiplos endere\xc3\xa7os IP (representando m\xc3\xbaltiplas interfaces f\xc3\xadsicas), de maneira que, se algum falhar, a conex\xc3\xa3o n\xc3\xa3o \xc3\xa9 interrompida. Ele foi desenvolvido inicialmente para transportar SS7 sobre IP em redes telef\xc3\xb4nicas, mas tamb\xc3\xa9m pode ser usado para outras aplica\xc3\xa7\xc3\xb5es._NEWLINE_O UDP (User Datagram Protocol), n\xc3\xbamero 17 do protocolo IP, \xc3\xa9 um protocolo de datagrama sem conex\xc3\xa3o. Ele \xc3\xa9 um protocolo de "melhor esfor\xc3\xa7o" ou "n\xc3\xa3o confi\xc3\xa1vel". N\xc3\xa3o porque ele \xc3\xa9 particularmente n\xc3\xa3o confi\xc3\xa1vel, mas porque ele n\xc3\xa3o verifica se os pacotes alcan\xc3\xa7aram seu destino, e n\xc3\xa3o d\xc3\xa1 qualquer garantia que eles ir\xc3\xa3o chegar na ordem. Se uma aplica\xc3\xa7\xc3\xa3o requer estas caracter\xc3\xadsticas, ent\xc3\xa3o ela mesma ter\xc3\xa1 que prov\xc3\xaa-las ou usar o protocolo TCP._NEWLINE_O UDP \xc3\xa9 tipicamente usado por aplica\xc3\xa7\xc3\xb5es como as de m\xc3\xaddia de streaming (\xc3\xa1udio, v\xc3\xaddeo etc), onde a chegada na hora \xc3\xa9 mais importante do que confiabilidade, ou para aplica\xc3\xa7\xc3\xb5es de simples requisi\xc3\xa7\xc3\xa3o/resposta como pesquisas de DNS, onde o overhead de configurar uma conex\xc3\xa3o confi\xc3\xa1vel \xc3\xa9 desproporcionalmente largo._NEWLINE_O DCCP est\xc3\xa1 atualmente em desenvolvimento pelo IETF. Ele prov\xc3\xaa controle de fluxo das sem\xc3\xa2nticas do TCP, enquanto mant\xc3\xa9m o modelo de servi\xc3\xa7o de datagramas do UDP vis\xc3\xadvel para o usu\xc3\xa1rio. O DHCP \xc3\xa9 incrementado automaticamente sem interven\xc3\xa7\xc3\xa3o do usu\xc3\xa1rio._NEWLINE_Tanto o TCP quanto o UDP s\xc3\xa3o usados para transmitir um n\xc3\xbamero de aplica\xc3\xa7\xc3\xb5es de alto n\xc3\xadvel. As aplica\xc3\xa7\xc3\xb5es em qualquer endere\xc3\xa7o de rede s\xc3\xa3o distinguidas por seus endere\xc3\xa7os de porta TCP ou UDP. Por conven\xc3\xa7\xc3\xa3o, certas portas "bem conhecidas" est\xc3\xa3o associadas com aplica\xc3\xa7\xc3\xb5es espec\xc3\xadficas._NEWLINE_O pacote da camada de transporte \xc3\xa9 chamado segmento.\n_START_SECTION_\nA camada de enlace\n_START_PARAGRAPH_\nA camada de enlace n\xc3\xa3o \xc3\xa9 realmente parte do modelo TCP/IP, mas \xc3\xa9 o m\xc3\xa9todo 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\xc3\xa3o executar as fun\xc3\xa7\xc3\xb5es da camada de enlace de dados como adicionar um header de pacote para prepar\xc3\xa1-lo para transmiss\xc3\xa3o, ent\xc3\xa3o de fato transmitir o quadro atrav\xc3\xa9s da camada f\xc3\xadsica. Do outro lado, a camada de enlace ir\xc3\xa1 receber quadros de dados, retirar os headers adicionados e encaminhar os pacotes recebidos para a camada de rede. Essa camada \xc3\xa9 a primeira normatizada do modelo, \xc3\xa9 respons\xc3\xa1vel pelo endere\xc3\xa7amento, roteamento e controle de envio e recep\xc3\xa7\xc3\xa3o. Ela n\xc3\xa3o \xc3\xa9 orientada \xc3\xa0 conex\xc3\xa3o, se comunica pelos datagramas (pacotes de dados)._NEWLINE_Entretanto, a camada de enlace n\xc3\xa3o \xc3\xa9 sempre t\xc3\xa3o simples. Ela pode tamb\xc3\xa9m ser um VPN (Virtual Private Network, Rede Privada Virtual) ou t\xc3\xbanel, onde pacotes da camada de internet, ao inv\xc3\xa9s de serem enviados atrav\xc3\xa9s de uma interface f\xc3\xadsica, s\xc3\xa3o enviados usando um protocolo de tunneling e outra (ou a mesma) su\xc3\xadte de protocolos. O VPN ou t\xc3\xbanel \xc3\xa9 usualmente estabelecido al\xc3\xa9m do tempo, e tem caracter\xc3\xadsticas especiais que a transmiss\xc3\xa3o direta por interface f\xc3\xadsica n\xc3\xa3o possui (por exemplo, ele pode criptografar os dados que passam atrav\xc3\xa9s dele). Esse uso recursivo de su\xc3\xadte de protocolos pode ser confuso uma vez que a "camada" de enlace \xc3\xa9 agora uma rede inteira. Mas \xc3\xa9 um m\xc3\xa9todo elegante para implementar fun\xc3\xa7\xc3\xb5es frequentemente complexas. Embora seja necess\xc3\xa1rio muito cuidado para prevenir que um pacote j\xc3\xa1 empacotado e enviado atrav\xc3\xa9s de um t\xc3\xbanel seja mais uma vez empacotado e reenviado pelo mesmo._NEWLINE_O pacote da camada de enlace \xc3\xa9 conhecido como quadro.\n_START_SECTION_\nImplementa\xc3\xa7\xc3\xb5es\n_START_PARAGRAPH_\nHoje, a maioria dos sistemas operacionais comerciais incluem e instalam a pilha TCP/IP por padr\xc3\xa3o. Para a maioria dos usu\xc3\xa1rios, n\xc3\xa3o h\xc3\xa1 nenhuma necessidade de procurar por implementa\xc3\xa7\xc3\xb5es. O TCP/IP \xc3\xa9 inclu\xc3\xaddo em todas as vers\xc3\xb5es do Unix e Linux, assim como no Mac OS e no Microsoft Windows._NEWLINE_N\xc3\xa3o \xc3\xa9 requerido implementa\xc3\xa7\xc3\xb5es espec\xc3\xadficas de hardware ou software pelos protocolos ou o modelo de camadas, pois j\xc3\xa1 h\xc3\xa1 muitos. A maioria dos sistemas operacionais de computador em uso hoje, incluindo todos os sistemas de consumo-alvo, incluem a implementa\xc3\xa7\xc3\xa3o TCP/IP._NEWLINE_Uma minoria de implementa\xc3\xa7\xc3\xb5es aceit\xc3\xa1veis inclui os seguintes protocolos, listados do mais essencial ao menos essencial: IP, ARP, ICMP, UDP, TCP e algumas vezes IGMP. Em princ\xc3\xadpio, \xc3\xa9 poss\xc3\xadvel suportar somente um protocolo de transporte, como UDP, mas isso \xc3\xa9 raramente feito, porque isso limita o uso de toda a implementa\xc3\xa7\xc3\xa3o. O IPv6, al\xc3\xa9m da sua pr\xc3\xb3pria vers\xc3\xa3o da ARP (NDP), ICMP (ICMPv6) e IGMP (IGMPv6), tem algumas fun\xc3\xa7\xc3\xb5es requiridas adicionais, e frequentemente s\xc3\xa3o acompanhadas por uma camada de seguran\xc3\xa7a integrada IPSec. Outros protocolos podem ser facilmente adicionados depois (possivelmente sendo implementado totalmente em userspace), como a DNS para a resolu\xc3\xa7\xc3\xa3o de nomes de dom\xc3\xadnio para endere\xc3\xa7os IP, ou DHCP para configurar automaticamente interfaces de rede._NEWLINE_Normalmente, os programadores de aplicativos est\xc3\xa3o preocupados somente com a interface na camada de aplica\xc3\xa7\xc3\xa3o e muitas vezes tamb\xc3\xa9m preocupados com a camada de transporte, enquanto as camadas abaixo sao servi\xc3\xa7os prestados pelo conjunto TCP/IP no sistema operacional. A maioria das implementa\xc3\xa7\xc3\xb5es de IP s\xc3\xa3o acess\xc3\xadveis aos programadores atrav\xc3\xa9s de sockets e APIs._NEWLINE_Implementa\xc3\xa7\xc3\xb5es \xc3\xbanicas incluem Lightweight TCP/IP, um conjunto de c\xc3\xb3digos 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\xc3\xa9s de linhas seriais._NEWLINE_O microcontrolador firmware no adaptador de rede lida com quest\xc3\xb5es de link, suportado pelo driver de software no sistema operacional. Eletr\xc3\xb4nicos n\xc3\xa3o-programados analogicalmente e digitalmente s\xc3\xa3o normalmente encarregados dos componentes f\xc3\xadsicos abaixo da camada de enlace, tipicamente usando um Chipset de Aplica\xc3\xa7\xc3\xa3o-Espec\xc3\xadfica de Circuito Integrado (ASIC em ingl\xc3\xaas) para cada interface de rede ou outro chipset f\xc3\xadsico padr\xc3\xa3o. Roteadores de alto desempenho s\xc3\xa3o em grande parte baseados em eletr\xc3\xb4nicos digitais r\xc3\xa1pidos n\xc3\xa3o program\xc3\xa1veis, realizando troca de links..'