Programação de Jogos em Rede Alberto Simões [email protected] ii Conteúdo 1 2 Internet e Protocolos 1.1 Disposi vos de Rede . . . . . . . . . . . . 1.1.1 Meios de Comunicação . . . . . . . 1.1.2 Pontos de Rede . . . . . . . . . . . 1.2 Escala Geográfica de uma Rede . . . . . . . 1.3 TCP/IP . . . . . . . . . . . . . . . . . . . . 1.3.1 Camadas do TCP/IP . . . . . . . . . 1.3.2 Protocolos Aplicacionais . . . . . . . 1.3.3 Endereçamento e Serviços de Nomes Exercícios . . . . . . . . . . . . . . . . . . . . . Sockets 2.1 Introdução aos Sockets em C . . . . . . . . . 1 1 1 4 6 7 7 12 14 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv Capítulo 1 Internet e Protocolos Uma rede de computadores é uma rede de telecomunicações que permite aos computadores trocarem dados Wikipedia (2014a). Nas redes de computadores, os disposi vos entregam dados entre eles usando ligações de rede. Estas ligações, entre nodos, são estabelecidas usando cabos ou usando técnicas de transmissão sem fios. A rede de computadores mais conhecida é a Internet. Habitualmente aos disposi vos que originam, roteiam ou terminam uma ligação de dados chamam-se genericamente nodos. Estes incluem computadores pessoais, servidores, telefones ou disposi vos de rede, como swiches ou routers. Dois nodos dizem estar interligados em rede quando um disposi vo é capaz de trocar informação com outro disposi vo usando, ou não, uma ligação directa entre eles. As redes de computador diferem na sua forma sica, os protocolos usados para organizar o tráfego de rede, o tamanho da rede e a sua topologia. As próximas secções introduzem: • Disposi vos de Rede: uma introdução ao hardware usado na construção de uma rede, • Escala Geográfica: breve descrição da classificação de redes de computador de acordo com a sua escala; • TCP/IP: uma introdução à pilha de protocolos usada na Internet e endereçamento, • Protocolos Aplicacionais: alguma discussão sobre protocolos e troca de mensagens na camada aplicacional. 1.1 Dispositivos de Rede Esta secção apresenta de forma breve os disposi vos de rede usados nos dias que correm. Em primeiro lugar serão apresentados os meios de comunicação (os picos cabos que ligam fisicamente os disposi vos), e em segundo lugar o po de hardware presente nos nodos de uma rede de computadores. 1.1.1 Meios de Comunicação Os meios de comunicação podem ser divididos em duas grandes categorias: em primeiro lugar os cabos, tecnologia mais an ga mas também mais fiável, e em segundo lugar a comunicação sem fios. 1 1.1.1.1 Cablagem O meio de comunicação mais an go e mais fiável é o uso de cabos. Se inicialmente estes permi am taxas de transmissão rela vamente baixas, com o advento das fibras óp cas as taxas de transferência não param de aumentar. Cabo de pares entrançados Figura 1.1: Cabo de pares entrançados. O cabo de pares entrançados é o meio mais usado nas telecomunicações. Este cabo consiste em cabos de cobre que são entrançados em pares. Os cabos de telefone tradicionais consistem em dois fios de cobre entrançados. Os cabos das redes Ethernet (especificação definida pela IEEE, 802.3) consistem em quatro pares de fios de cobre, que podem ser u lizados quer para a transmissão de voz como de dados. A razão para o uso de dois cabos entrançados é o facto de ajudarem a diminuir a indução electromagnéca. A velocidade de transmissão varia entre 2 milhões de bits por segundo até 10 mil milhões de bits por segundo. Existem várias variantes de cabos de pares entrançados, com ou sem blindagem, com um número diferente de pares, etc., de acordo com o cenário de uso. Cabo coaxial Figura 1.2: Cabo coaxial. Os cabos coaxiais são bastante usados nos sistemas de televisão por cabo. Embora actualmente já não se usem para as redes de computadores, exis a um tecnologia de nome 10BASE2 que usava os cabos coaxiais. 2 Estes cabos consistem num fio de cobre ou alumínio coberto por uma camada isoladora ( picamente um material flexível com uma constante dieléctrica) que, por sua vez, se encontra coberta por uma camada condutora. As velocidades de transmissão variam entre os 200 milhões de bits por segundo até mais de 500 milhões de bits por segundo. ITU-T G.hn Não se trata de um po de cabo sico, mas uma tecnologia para o uso de cabos da rede eléctrica para criar redes locais. Esta tecnologia permite transferências até 1 Gigabit por segundo, embora varie bastante de acordo com a distância, equipamento eléctrico em funcionamento e qualidade dos cabos usados. Fibra Óp ca Figura 1.3: Cabo de fibra óp ca. Um cabo de fibra óp ca é uma fibra de vidro. Em vez de transmi r impulsos electromagné cos, ele transmite impulsos de luz, que representam dados. Algumas das vantagens do uso de fibra óp ca em relação ao uso de fios metálicos é a taxa reduzidíssima de perdas de transmissão, e a total imunidade à interferência eléctrica. Uma fibra óp ca pode transportar, simultaneamente, vários comprimentos de onda de luz, o que aumenta dras camente as taxas de transmissão, e permite taxas de transferência de triliões de bits por segundo. Além disso, as fibras óp cas podem ser usadas para grandes distâncias, podendo, mesmo assim, transmi r dados a grandes velocidades. O seu uso começou nas ligações intercon nentais e, actualmente, começam também a ser u lizados pelas empresas de serviços de Internet. 1.1.1.2 Ligações sem Fios As ligações sem fios (wireless) já existem há alguns anos, embora o seu uso massivo seja recente, nomeadamente no uso domés co. Micro-ondas terrestres A transmissão terrestre de micro-ondas usa transmissores e receptores terrestres semelhantes às antenas parabólicas. As micro-ondas terrestres correspondem a valores gigahertz baixos, limitando o alcance destas comunicações à linha de visão. Habitualmente as estações de repe ção encontram-se espaçadas de 48 quilómetros. Satélites de comunicações Os satélites comunicam através de micro-ondas rádio, que não são deflec das pela atmosfera terrestre. Os satélites usualmente são geoestacionários, a 35400 quilómetros sobre o equador. Estes sistemas são capazes de receber e emi r voz, dados e sinais de televisão. 3 Rádio e tecnologias de espectro largo As redes sem fios locais usam tecnologia rádio de alta frequência. A especificação da IEEE, 802.11, define um conjunto de standards, conhecido por Wifi. GSM, GPRS e outros Os telemóveis e os computadores usam diferentes tecnologias de comunicação rádio. Estes sistemas dividem a região coberta por várias áreas geográficas, e em cada um existe um transmissor ou antena de transmissão para transmi r as ligações de uma área para a próxima. Comunicação Óp ca Embora pouco usada, esta tecnologia usa luz (visível ou invisível) para a comunicação. Na maior parte dos casos, é usada propagação “em linha de vista,” o que limita o posicionamento sico dos disposi vos. 1.1.2 Pontos de Rede Existem diferentes disposi vos que permitem a construção de uma rede de computadores, para além das interfaces de rede das duas máquinas que desejam comunicar e do meio de comunicação usado. 1.1.2.1 Interfaces de Rede Os controladores de interface de rede (NIC: Network Interface Controller) é uma parte do hardware de um computador que permite aceder ao meio de comunicação, e que tem a possibilidade de processar informação de baixo nível da rede. Por exemplo, o NIC poderá ter um conector para permi r a ligação de um cabo, ou uma antena para a transmissão de dados via Wifi, bem como os circuitos integrados associados para o processamento do sinal e da informação de rede. O NIC recolhe toda a informação da rede endereçada a determinado endereço de rede. Nas Ethernet, cada interface em um único endereço MAC (Media Access Control), habitualmente armazenado na memória permanente do controlador. Para evitar conflitos de endereço entre os disposi vos, o IEEE mantem e administra estes endereços, tornando-os únicos. Estes endereços correspondem a uma sequência de seis valores hexadecimais (e.g. 01-23-45-67-89-ab). 1.1.2.2 Repe dores e Hubs Um repe dor é um disposi vo eléctrico que recebe um sinal de rede, remove todo o ruído desnecessário, e regenera-o, retransmi ndo-o com maior potência de sinal, ou para o outro lado de uma possível obstrução, de modo a que o sinal possa cobrir maiores distâncias sem que se degrade. Estes disposi vos são usados em algumas configurações de Ethernet em que alguns cabos percorrem mais de 100 metros. No caso da fibra óp ca, os repe dores podem estar a dezenas ou mesmo centenas de quilómetros de distância. Um repe dor com várias portas é conhecido por hub. Os repe dores necessitam de um pequeno espaço de tempo para regenerar o sinal, o que pode causar algum atraso de propagação, afectando a performance da rede. Isto leva a que várias arquitecturas limitem o número de repe dores que podem ser usados em série. Embora os hubs sejam obsoletos, dada a existência dos switches modernos, os repe dores con nuam a ser usados para ligações de longa distância, por exemplo, nas ligações transatlân cas. 4 1.1.2.3 Bridges Uma bridge liga e filtra o tráfego entre dois segmentos de rede ao nível da camada de dados (ver camadas do protocolo TCP/IP na secção 1.3), tornando-o uma única rede, permi ndo segmentar uma grande rede com congestão de dados, numa agregação de redes mais pequenas e mais eficientes. As bridges existem em 3 pos: • Bridges Locais: ligam directamente duas redes locais; • Bridges Remotas: são usadas para criar uma rede alargada com base em várias redes locais. Este po de bridges, em que a ligação é mais lenta do que a das redes de des no, têm sido subs tuídas por routers. • Bridges Wireless: Semelhantes às anteriores, mas com suporte à tecnologia wireless. 1.1.2.4 Switches Um switch é um disposi vo que encaminha e filtra datagramas ao nível da camada de dados do TCP/IP baseando-se nos endereços MAC presentes nos pacotes transmi dos. Estes disposi vos diferem dos hubs porque um switch só encaminha os pacotes para as portas sicas envolvidas na comunicação em causa, e não para todas as portas existentes. Podem ser vistos como bridges com várias portas. Examinando o endereço fonte dos pacotes recebidos aprende como associar as suas portas sicas com os endereços MAC, sabendo assim, no futuro, que porta usar para comunicar com esse disposi vo. Quando recebe um endereço de des no desconhecido, o pacote será encaminhado para todas as portas, com excepção da porta por onde o pacote foi recebido. Note-se que muitas vezes o termo é usado para referir outro po de disposi vos, como sejam os routers ou as bridges. 1.1.2.5 Routers Um router pico de uma casa ou de um pequeno escritório, apresenta a linha do telefone (ADSL: Asymmetric Digital SubscriberLine) e um conjunto de ligações de rede Ethernet. Um router é um disposi vo que encaminha pacotes entre redes processando a informação de roteamento presente no pacote, funcionando assim ao nível do transporte do TCP/IP. A informação de roteamento é habitualmente processada conjuntamente com uma tabela de roteamento. Um router usa a informação da sua tabela de roteamento para determinar para onde enviar os pacotes. 1.1.2.6 Modems Os modem (MOdulator-DEModulator) são usados para ligar nodos de rede via cabos que não foram desenhados originalmente para o tráfego digital, ou via wireless. Para fazer isto, a par r dos dados digitais são moduladas frequências analógicas que são transmi das. Ao receber os dados, os modem efectuam a operação inversa, convertendo frequências analógicas em dados digitais. Os modem são muito usados para linhas telefónicas, usando a tecnologia DSL. 5 1.1.2.7 Firewalls Uma firewall é um disposi vo de rede para controlar a segurança de uma rede, bem como as suas regras de acesso. As firewall são picamente configuradas para rejeitar o acesso de pedidos a par r de fontes não reconhecidas, permi ndo o acesso das conhecidas. A sua função torna-se cada vez mais importante dado o constante aumento de ciber-ataques. 1.2 Escala Geográfica de uma Rede As redes de computadores são habitualmente classificadas de acordo com a sua escala geográfica. Área Pessoal Uma rede pessoal (PAN: Personal Area Network) é uma rede usada entre diferentes disposi vos à volta de uma única pessoa. Por exemplo, uma PAN pode ser composta pelo computador pessoal, impressoras, fax, smartphones, scanners ou mesmo consolas de jogo ou máquinas fotográficas. Estas redes podem incluir disposi vos wireless ou ligados por cabo. A área geográfica de uma destas redes anda à volta dos 10 metros. Tipicamente, as ligações por cabo são feitas via USB ou FireWire, enquanto que as ligações wireless usam tecnologias como o Bluetooth ou a comunicação por infravermelhos. Rede Local Uma rede local (LAN: Local Area Network) liga computadores e outros disposi vos numa área geográfica limitada, tal como uma casa, escola, escritório ou mesmo num edi cio. Algumas das caracterís cas que permitem dis nguir uma rede local de uma rede mais alargada (wide area network) incluem taxas de transferência superiores, alcance geográfico limitado, e a não necessidade em alugar ligações para garan r conec vidade. Rede Caseira Uma rede caseira (HAN: Home Area Network) é uma LAN residencial usada para a comunicação entre disposi vos digitais distribuídos pela casa: um pequeno número de computadores pessoais e de acessórios, como sejam impressoras ou smartphones. Uma das suas caracterís cas principais é a par lha de um acesso à Internet, habitualmente usando um serviço de banda larga (DSL), através de TV Cabo, ou mais recentemente, usando DSL em fibra óp ca. Rede de Armazenamento Uma rede de armazenamento (SAN: Storage Area Network) é uma rede dedicada que providencia acesso a disposi vos de armazenamento de dados. Estas redes são essencialmente usadas para a construção de disposi vos de armazenamento, como por exemplo um vector de discos (disk array), de modo a que estes pareçam um único aos sistemas opera vos que os usam. Rede de Campus Rede de Campus (Campus Area Network) é o nome dado a um conjunto de redes locais dentro de uma área geográfica limitada. O equipamento de rede e os meios de comunicação são quase totalmente propriedade do dono do Campus. São picos de uma grande empresa, uma universidade ou de escritórios governamentais. Por exemplo, a rede do Campus de uma Universidade terá, quase seguramente, uma ligação entre vários edi cios, exis ndo em cada edi cio uma LAN diferente. 6 Rede de Backbone Chama-se de backbone ao núcleo de uma rede que faz a ligação entre várias LANs que se situam afastadas. Por exemplo, uma grande empresa poderá implementar um backbone para ligar departamentos que estão ligados à volta do mundo. Outro exemplo, será o backbone da FCCN (Fundação para a Computação Cien fica Nacional) que permite a ligação entre as várias universidades Portuguesas. Habitualmente a capacidade de um backbone é superior à capacidade de cada uma das redes individuais ligadas por ele. Ao desenhar um backbone, deverá ter-se em conta a performance e a possível congestão da rede. Rede Metropolitana Rede Metropolitana (MAN: Metropolitan Area Network) é uma grande rede que habitualmente abrange toda uma cidade. Rede de Grande Área Uma Wide Area Network (WAN) é uma rede que cobre uma área geográfica grande, como uma cidade, um país, ou mesmo que se alargue a distâncias intercon nentais. Uma WAN usa um canal de comunicações que combina vários pos de meios de comunicação, como sejam linhas telefónicas, cabos e ondas wireless. Rede Privada Virtual Uma rede privada virtual (VPN: Virtual Private Network) é uma rede ou ligação estabelecida entre vários nodos, e que usa outras redes para s sua ligação. Nestas situações, é dito que a ligação de dados da rede virtual são enviados por túneis criados numa outra rede. Este po de rede permite que uma empresa tenha os seus funcionários a trabalhar a par r de casa, usando uma ligação comum oferecida por um ISP. Sobre essa ligação, é criada uma rede privada que conecta o disposi vo do funcionário com a LAN da empresa, permi ndo-o aceder a recursos que não estejam publicamente disponíveis. 1.3 TCP/IP O TCP/IP (Transmission Control Protocol/Internet Protocol) é um conjunto de protocolos de comunicação que são actualmente usados para a comunicação entre computadores. O seu nome centra-se nos protocolos TCP e IP por serem os mais relevantes. De realçar que, embora actualmente o pacote de protocolos TCP/IP esteja bastante difundido e, pra camente, inolvidável, a verdade é que muitas empresas desenvolveram as suas próprias pilhas de protocolos, como o SNA (IBM Systems Network Architecture), o OSI (Open Systems Interconnec on), o NetBios da Microso ou o XNS (Xerox Network Systems). 1.3.1 Camadas do TCP/IP Este conjunto de protocolos está organizado por níveis de abstracção Wikipedia (2014b), sendo que os níveis inferiores lidam com aspectos específicos, enquanto os níveis superiores são mais abstractos, e habitualmente, aqueles que se usam directamente nas aplicações. 7 • Nível de Ligação é responsável pela ligação ponto a ponto, num segmento de rede único, numa rede local. • Nível de Rede é responsável pela ligação entre redes independentes, tornando assim possível a comunicação entre diferentes redes locais. • Nível de Transporte trata da ligação entre dois par cipantes. • Nível de Aplicação contém todos os protocolos específicos para comunicação de dados ao nível da aplicação, como sejam o HTTP (HyperText Tranfer Protocol) ou o FTP (File Transfer Protocol). Figura 1.4: Exemplo do uso dos diferentes níveis da pilha TCP/IP durante a comunicação entre dois par cipantes. 1.3.1.1 Nível de Ligação O nível de ligação funciona em colaboração com os potenciais drivers, exactamente acima ao nível sico de hardware, e torna todas as camadas independentes de hardware. Este nível é usado para movimentar pacotes entre o nível de rede de dois intervenientes na mesma linha. Este processo implementa funções como a adição de um cabeçalho a um pacote para o transmi r através de um meio sico. 8 O modelo TCP/IP inclui especificações de como traduzir os métodos de endereçamento usado no Internet Protocol (os conhecidos Endereços IP) para os métodos de endereçamento sico, como sejam os endereços MAC (Media Access Control). Este também é o nível onde alguns pacotes podem ser seleccionados para serem enviados através de uma rede virtual privada ou qualquer outro túnel de rede. 1.3.1.2 Nível de Rede O nível de rede é também conhecido por InterNet por ser o nível responsável pelo envio de pacotes através de (potencialmente) múl plas redes. Este processo obriga ao envio de pacotes entre uma rede de origem, e uma rede de des no. Este processo é conhecido por roteamento, ou rou ng. O Internet Protocol é responsável por realizar duas tarefa: • Endereçamento e Iden ficação: usa um sistema de endereçamento hierárquico de Endereços de Internet (IP); • Roteamento de Pacotes: a tarefa básica no envio de pacotes de dados (também conhecidos por dtagrams) de uma origem até a um des no, através de um conjunto de redes intermédias. Este nível é agnós co às estruturas de dados usadas pela aplicação ao nível de transporte, e também não dis ngue entre a operação dos vários protocolos do nível de transporte. O IP pode transportar dados para uma variedade de diferentes protocolos de níveis superiores. Cada um destes protocolos são idenficados por um número único de protocolo. Por exemplo, o ICMP (Internet Control Message Protocol, responsável por transmi r informações de diagnós co) e o IGMP (Internet Group Management Protocol, responsável por gerir dados mul cast) são os protocolos 1 e 2, respec vamente. O nível de rede apenas providencia uma forma de transmi r pacotes, de forma não confiável, entre parcipantes localizados em redes diferentes, enviando os pacotes produzidos ao nível de transporte para o próximo router intermediário, para que seja posteriormente reenviado para o seu des no. 1.3.1.3 Nível de Transporte O nível de transporte é responsável por estabelecer um canal simples que uma aplicação usa na sua tarefa específica de troca de dados. Estabelece uma conec vidade ponto-a-ponto, o que significa que lida com os detalhes da transmissão de dados que são independentes da estrutura dos dados do u lizador. As suas responsabilidade incluem a transferência de mensagens independente do po de rede específica, juntamente com o controlo de erros, segmentação, controlo de fluxo, gestão de congestão, e endereçamento ao nível da aplicação (números de portas). As conexões ao nível de transporte podem ser classificadas como orientadas à conexão, implementadas em TCP (Transmission Control Protocol), ou sem referência à conexão, implementadas em UDP (User Datagram Protocol). Com a finalidade de providenciar canais de transmissão específicos para determinados processos a serem executados em determinado sistema opera vo, este nível define o conceito de porta: um número que é alocado a cada aplicação. Para alguns pos de serviço, estes números de portas foram definidas de forma standard, de modo a que um computador cliente possa saber a que porta se dirigir para determinado 9 serviço (por exemplo, para aceder a um servidor Web, em que a porta por omissão é a 80, ou para aceder a um servidor de e-mail, em que a porta por omissão é a 25) sem ter de consultar um directório de serviços. Uma vez que o Internet Protocol não oferece garan as de entrega dos pacotes (apenas faz o possível), o nível de transporte é a primeira camada da pilha TCP/IP que oferece garan a de entrega¹. O TCP é um protocolo orientado à ligação que tem em atenção um conjunto de questões referentes à garan a de entrega: • • • • • os dados são entregues por ordem; os dados não têm erros (ou erros mínimos); os dados duplicados são descartados; pacotes perdidos são reenviados; existe gestão de congestão de tráfico. O UDP é um protocolo não orientado à ligação e, tal como o Internet Protocol, não tem garan as de entrega, com mecanismo habitualmente designado por best effort, faz o melhor que puder. A garan a de qualidade é ob da apenas pelo uso de detecção de erros usando um algoritmo simples de checksum. Daí que este protocolo seja habitualmente usado para aplicações de streaming, seja de audio, vídeo ou voz sobre IP, em que é mais importante a entrega atempada dos dados do que a sua qualidade. Também é usado em aplicações de consulta rápida, como a consulta de um servidor de nomes (DNS), em que o custo de criar uma conexão fiável é demasiado grande. 1.3.1.4 Nível de Aplicação O nível de aplicação contém protocolos de alto-nível usados pela maior parte das aplicações para comunicação. Exemplos de protocolos da camada de aplicação são o FTP (File Transfer Protocol), o SMTP (Simple Mail Transfer Protocol) ou o HTTP (HyperText Transfer Protocol). Os protocolos do nível aplicacional tratam a camada de transporte, e quaisquer outras abaixo dessa, como caixas negras, mantendo apenas alguma informação importante da ligação na camada de transporte, como seja o endereço IP a números de portas. Estes mesmos protocolos são comummente associados com aplicações cliente/servidor, e os pos de serviço mais usuais têm portas específicas alocadas pela IANA (Internet Assigned Numbers Authority). A tabela 1.1 apresenta um pequeno conjunto de portas associadas a determinados protocolos. Tabela 1.1: Alguns dos protocolos mais comuns na Internet. Protocolo Descrição Porta Transporte FTP SSH SMTP DNS HTTP POP3 File Transfer Protocol Secure Shell Simple Mail Transfer Protocol Domain Name System HyperText Transfer Protocol Post Office Protocol (Version 3) 20/21 22 25 53 80 110 TCP TCP TCP UDP TCP TCP ¹Note-se que o Internet Protocol pode funcionar sobre um protocolo de ligação que ofereça garan as de entrega, como seja o High-Level Data Link Control (HDLC). 10 Protocolo Descrição Porta Transporte IMAP HTTPS FTPS QUAKE Internet Message Access Protocol HyperText Transfer Protocol Secure File Transfer Protocol Secure Quake Game Server 143 443 990 26000 TCP TCP TCP UDP Por sua vez, os clientes tendem a usar portas efémeras, ou seja, portas atribuídas de forma aleatória de entre um intervalo de portas reservadas especialmente para esse fim. Assim, quando um cliente C acede a um servidor S , efectua uma ligação com o endereço de S e a porta associada ao serviço. Por exemplo, se S é um servidor web, então C irá ligar-se a S na porta 80. Para que o servidor possa transmi r dados para o cliente, este úl mo precisará de escolher uma porta local para onde o servidor enviar a resposta. Habitualmente as portas abertas nos clientes são escolhidas de forma aleatória de entre um conjunto reservado. As camadas abaixo do nível de aplicação não se preocupam com os detalhes específicos destes protocolos. Aparelhos como os routers ou switches não olham (habitualmente) para dentro do tráfego encapsulado, para ver que po de protocolo ele representa. No entanto, alguns destes aparelhos, como as firewall, tentam determinar o conteúdo dos pacotes. Os dados codificados de acordo com o protocolo da camada de aplicação são posteriormente encapsulados num ou mais pacotes do nível de transporte (habitualmente TCP ou UDP), que por sua vez são encapsulados em protocolos de baixo nível para efectuar a transferência de dados real. Figura 1.5: Quadro UDP e sua cons tuição com pacotes de camadas superiores. A figura 1.5 mostra uma mensagem, da camada aplicacional que é encapsulada num segmento da camada de transporte, que por sua vez é encapsulado num pacote da camada de rede que é, finalmente, colocado num quadro ou frame da camada ao nível da ligação. O uso de terminologia diferente para cada camada no sen do de diminuir a ambiguidade. 11 1.3.2 Protocolos Aplicacionais Os protocolos da camada aplicacional definem a sintaxe das mensagens que serão trocadas, bem como a sua semân ca: o que cada interveniente da comunicação deve realizar ao receber ou enviar determinada mensagem. Ao definir uma sintaxe deve-se ter em conta o quão compacta a sintaxe é (quantos bytes são necessários), a sua robustez (a possibilidade de lidar com dados corrompidos ou em falta), e a sua eficiência (o envio apenas de dados realmente relevantes). Outro factor importante tem que ver com a possibilidade do protocolo saber lidar com a recepção de mensagens por uma ordem não esperada, ou se, por outro lado, precisa obrigatoriamente de receber as mensagens por determinada ordem. Esta decisão irá ditar a escolha entre o protocolo TCP ou o protocolo UDP para a camada de transporte. Quando os dados transmi dos ao longo do tempo são minimamente redundantes, é possível que não seja importante a transmissão fiável. Nesta situação os dados transmi dos mais tarde irão subs tuir dados previamente recebidos. Logo, se alguma mensagem é perdida, os dados serão actualizados assim que chegar a próxima mensagem. Num jogo, em que a cada momento são transmi dos os dados sobre a posição e caracterís cas de cada jogador, é possível que o facto de se perder uma ou mais mensagens não afecte a jogabilidade. O jogador poderá reparar apenas num pequeno salto das personagens (glitch). 1.3.2.1 Experimentar o HTTP A transferência de dados é sempre realizada em termos de bits. No entanto, há protocolos que usam grupos de 8 bits que representam caracteres concretos da tabela ASCII, e outros que usam algum po de código baseado nesses bits. Um dos vários protocolos que usam caracteres ASCII, é o HTTP (HyperText Transfer Protocol). Isso permite que se possa usar uma ferramenta de nome telnet para comunicar com um servidor HTTP, desde que se saiba a sintaxe do protocolo em causa. A ferramenta telnet foi criada para ser usada como um protocolo de login remoto, permi ndo ao u lizador aceder a uma máquina remotamente, u lizando o seu sistema opera vo. No entanto, dado que a telnet envia caracteres puros através da rede, é de nenhuma segurança, tendo sido subs tuída por outros protocolos mais seguros, como Secure Shell. Embora já não se use com esta finalidade, tem sido bastante ú l para estudar protocolos textuais. Experimente-se a simulação de um pedido HTTP usando a telnet. Em primeiro lugar, num terminal, invoca-se o comando telnet indicando como parâmetro o endereço da máquina e a porta a que nos queremos ligar. Como queremos que seja o servidor HTTP a responder teremos de indicar a porta 80: 1 Havendo ligação à Internet, o comando irá fazer a conexão ao servidor, e apresentar as seguintes linhas: 1 2 3 $ telnet www.est.ipca.pt 80 Trying 193.137.231.231... Connected to www.est.ipca.pt. Escape character is '^]'. 12 Em seguida temos de iniciar a conversa com o servidor, usando a sintaxe conhecida pelo protocolo HTTP (versão 1.1). Começamos por usar o comando GET para indicar que queremos obter uma página. Depois colocamos o caminho para a página que queremos. Para obter a página raiz do servidor usamos o caminho vazio: /. Finalmente, adicionamos HTTP/1.1 que indica que a ligação deve ser feita usando a versão 1.1 do protocolo HTTP. Note-se que esta sintaxe é específica deste protocolo. Na linha seguinte escrevemos qual o endereço do qual queremos obter a página em causa (isto porque um servidor HTTP pode responder a mais que um domínio). Finalmente, introduzimos uma linha em branco, a indicar que terminamos o nosso pedido. 1 2 A resposta do servidor HTTP é composta por um cabeçalho que é separado da página web propriamente dita com uma linha em branco: 1 2 3 4 5 6 7 8 GET / HTTP/1.1 Host: www.est.ipca.pt HTTP/1.1 200 OK Date: Fri, 05 Sep 2014 16:57:19 GMT Server: Apache X-Powered-By: PHP/4.3.9 Expires: Thu, 19 Nov 1981 08:52:00 GMT Pragma: no-cache Content-Length: 14851 Content-Type: text/html 9 10 11 12 13 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> [...] Dos vários campos do cabeçalho é relevante salientar a primeira linha, em que é colocado um código de erro ou de sucesso. Neste caso, 200 é o código de sucesso, da página ser encontrada. No caso de não ser encontrada deverá surgir um código de erro, habitualmente o 404. No entanto existem muitos mais códigos de erro e sucesso do HTTP, cuja discussão foge ao âmbito desta introdução. 1.3.2.2 Experimentar o SMTP O protocolo SMTP (Simple Mail Tranfer Protocol) é igualmente textual, e torna rela vamente simples o envio de um e-mail através da telnet. No caso do SMTP, é preciso ter acesso a um servidor que tenha um serviço SMTP a correr, e aceder à porta 25. 1 2 3 4 5 Depois de ter sido feita a conexão ao servidor recebemos um código STMP 220. A primeira coisa que temos de indicar é qual o nosso domínio (de onde estamos a enviar o e-mail), usando o comando HELO. 1 2 $ telnet mail.server.com 25 Trying 127.0.0.1... Connected to mail. Escape character is '^]'. 220 mail.server.com ESMTP Postfix HELO di.uminho.pt 250 mail.server.com 13 O resultado será o código SMTP 250. De seguida iden fica-se a origem do e-mail com o comando MAIL FROM:, seguido de um espaço e do e-mail de origem. 1 2 O próximo passo é iden ficar o endereço, ou endereços de des no, com o comando RCPT TO:. 1 2 2 2 SUBJECT: Viagem a Paris FROM: [email protected] 3 4 5 6 DATA 354 End data with <CR><LF>.<CR><LF> O servidor então indica o código 354, e diz que podemos escrever a mensagem, terminando com um ponto numa linha. Note-se que, embora já tenhamos indicado o e-mail de origem e de des no, é necessário preencher os cabeçalhos do e-mail a ser entregue. Existem vários campos que podem ser u lizados, mas os mais usados são o assunto e a origem do e-mail. Depois, digita-se uma linha em branco, e escreve-se a mensagem, que pode ter qualquer conteúdo, com várias linhas. Para terminar, introduz-se um ponto: 1 RCPT TO: [email protected] 250 2.1.5 Ok Finalmente, usamos o comando DATA para indicar que queremos começar a escrever a mensagem do e-mail. 1 MAIL FROM: [email protected] 250 2.1.0 Ok Qualquer dia vamos a Paris!! . 250 2.0.0 Ok: queued as D8D9926608F Terminamos com a mensagem a dizer que o e-mail foi colocado em fila de espera no servidor. 1.3.3 Endereçamento e Serviços de Nomes Cada nodo de uma rede é iden ficado por (pelo menos) um endereço numérico, habitualmente designado por endereço IP (IP address). Existem dois pos de endereços actualmente em funcionamento, denominados IPv4 e IPv6. Cada um deles permite iden ficar nodos na rede, sendo que o primeiro é composto por 4 bytes (32 bits), e o segundo por 16 bytes (128 bits). Um exemplo pico de um endereço IPv4 será 173.194.41.194², em que cada valor (entre pontos) corresponde a um byte (valor entre 0 e 255). Por sua vez, um endereço IPv6 é designado por oito grupos de quatro dígitos hexadecimais. Assim, um exemplo de um endereço será 2001:4860:4860:0:0:0:0:8888³. Dado o tamanho destes endereços existem métodos para os abreviar. No caso do endereço acima, poderia ser referido apenas como 2001:4860:4860::8888. ²Este endereço é um dos vários endereços usados pelo Google. ³Este endereço corresponde a um serviço de nomes do Google. 14 A razão da existência de duas versões prende-se com o facto de os endereços IPv4 estarem a escassear. Na verdade, existem 232 endereços possíveis em IPv4 (na verdade menos, já que existe uma gama de endereços reservados) enquanto que o IPv6 suporta até 2128 endereços. Dada a dificuldade em memorizar endereços IP (sejam IPv4 ou IPv6), foi criado um serviço de nomes, que associa a cada IP um conjunto de endereços na forma que habitualmente os usamos nos servidores web: google.com ou ipv6.google.com. Para que este po de endereços possa ser usado existe uma base de dados distribuída, que associa a cada um destes nomes um endereço IPv4 e/ou IPv6. Esta base de dados é conhecida por DNS (Domain Name System). Isto leva a que, qualquer operação usando um endereço textual, demore algum tempo até que seja iniciada, para que esta base de dados seja consultada, e ob do o endereço IP. É possível experimentar a resolução de nomes usando o comando nslookup (quer em Windows ou UNIX). Os nomes da base de dados DNS estão estruturados de forma hierárquica. Cada nível desta hierarquia é representado por cada um dos nomes do endereço web, da direita para a esquerda, separados por um ponto. Um domínio como www.est.ipca.pt representa uma entrada no domínio de topo (TLD: Top Level Domain) pt, seguindo-se a entrada referente ao Ins tuto Politécnico do Cávado e do Ave (ipca), a entrada referente à Escola Superior de Tecnologia (est) e, finalmente, www que deveria⁴ representar a entrada referente à máquina responsável por servir páginas web. Os domínios de topo (TLD) são geridos pela Internet Corpora on for Assigned Names and Numbers (ICANN). Cada TLD pode representar um país, como .pt para Portugal ou .tv para Tuvalu, ou outro po genérico, como os .com que surgiram com o objec vo de diferenciar ins tuições comerciais, ou o .net para organizações, ou mais recentemente o .xxx para páginas com conteúdo para adultos. Diz-se que o DNS é uma base de dados distribuída e hierárquica dada a forma incremental com que é feita a resolução de nomes. Ao solicitar um nome como www.est.ipca.pt será necessário perguntar à autoridade do TLD .pt quem é o responsável pelo domínio ipca.pt. Depois de obter essa informação, é perguntado a esse responsável quem é o responsável pelo domínio em est.ipca.pt, e assim sucessivamente. A figura 1.6 demonstra esquema camente este processo. Esta estrutura permite, por exemplo, que o IPCA possa criar novos sub-domínios sem necessidade de informar uma base de dados centralizada. Felizmente que grande parte dos ISP e outras ins tuições como universidades ou empresas (ou mesmo os routers caseiros) têm servidores de DNS que fazem cache dos endereços consultados. Juntamente com cada entrada na base de dados DNS original existe um valor, denominado de me to live (TTL) que indica qual a validade da cache. Representa o tempo que cada um destes servidores pode manter uma entrada na base de dados sem voltar a confirmar se a associação entre o nome e o endereço ainda é válida. A figura 1.7 apresenta um exemplo para a resolução de um domínio usando vários servidores de DNS. ⁴O prefixo www foi criado nos tempos iniciais da Internet, em que cada máquina era responsável apenas por um serviço (dado o seu fraco poder computacional). Assim, a máquina que era responsável por servir páginas por HTTP era habitualmente designada por www (World Wide Web), a responsável por servir ficheiros por FTP, designada por ftp, a responsável pelo envio de e-mail designada por smtp ou mail. Este hábito manteve-se até aos dias actuais, pelo que grande parte dos u lizadores da Internet con nuam a usar o prefixo mesmo sem ser necessário (experimentando http://google.com). Do mesmo modo, existem alguns administradores de sistemas que con nuam a obrigar ao uso do prefixo (por exemplo, http://portaldasfinancas.gov.pt/ vs http://www.portaldasfinancas.gov.pt/ — em Agosto de 2014). 15 Figura 1.6: Exemplo de resolução de um nome, usando a hierarquia de servidores DNS. Figura 1.7: Exemplo de resolução de um nome, usando a cache de dois servidores DNS. 16 Exercícios 1. Use o comando telnet para obter a página em http://www.jn.pt/economia. Analise o código HTTP ob do, e compare-o com o comportamento de visitar esta página num browser. 2. Use o comando nslookup e obtenha endereços IP para vários endereços web, como sejam ipca.pt, uminho.pt ou google.com. 3. Usando a biblioteca System.Net do C#, escreva um pequeno programa que simule o comando nslookup. Deve ser possível indicar um ou mais domínios na linha de comando. Para cada um deles deverá ser impresso os vários endereços IP para esse domínio e, caso existam, outros aliases. Para isso use a função Dns.GetHostEntry. 17 18 Capítulo 2 Sockets Neste capítulo serão discu dos vários aspectos rela vos ao uso de sockets. Em primeiro lugar serão usados de forma genérica, e mais tarde numa primeira experiência relacionada com gráficos. 2.1 Introdução aos Sockets em C O termo socket corresponde à ligação de determinado cliente a uma porta específica de um servidor. bah bah Makofske, Donahoo, and Calvert (2004) bah bah 19 20 Referências Makofske, David B., Michael J. Donahoo, and Kenneth L. Calvert. 2004. TCP/IP Sockets in C#. Morgan Kaufmann Prac cal Guides. San Francisco, CA: Morgan Kaufmann, Elsevier. Wikipedia. 2014a. “Computer Network — Wikipedia, the Free Encyclopedia.” http://en. wikipedia.org/w/index.php?title=Computer_network&oldid=621429724. ———. 2014b. “Internet Protocol Suite — Wikipedia, the Free Encyclopedia.” http://en. wikipedia.org/w/index.php?title=Internet_protocol_suite&oldid=621232018. 21