Programação de Jogos em Rede

Propaganda
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
Download