Liber 000 - Astrum Argentum

Liber 000 - Astrum Argentum Liber 000 - Astrum Argentum

astrumargentum.org
from astrumargentum.org More from this publisher
01.01.2013 Views

Mas o que vem a ser o esquema cliente/servidor ? Um simples gráfico pode ser visualizado abaixo mostrando a arquitetura cliente/servidor Servidor Meio de Comunicação Cliente (Stevens – Unix Networking Programming) Um cliente normalmente se comunica com um servidor específico, exemplo um navegador Web, se comunica com o servidor Web. Um cliente de FTP,s e comunica com um servidor de FTP e assim sucessivamente. Estes programas utilizam na maior parte dos casos o protocolo TCP/IP faz a comunicação entre os dois e a partir deste entendimento, transmite a informação. Antes de nos aprofundarmos neste nosso novo tópico de nossa tutorial de sockets vamos dar uma pincelada na camada de transporte básica do protocolo : a TCP e a UDP. O Protocolo TCP (Transfer Control Protocol): O Protocolo TCP é o protocolo mais robusto e confiável no que diz respeito a conectividade. O TCP promove conexões entre o cliente e o servidor, trocando dados pela conexão e pode terminar a conexão. O TCP promove a chamada confiança (reliability), ou seja quando um pacote é enviado para o destino, o emissário deste pacote requer uma confirmação (o termo correto é acknowledgement) que o pacote chegou lá. Caso esta confirmação não seja recebida, o TCP automaticamente retransmite os dados e espera por um período X de tempo a confirmação. Este tempo está submetio a um algorítmo de tempo (Round Trip Time) que determina dinamicamente o tempo que o cliente e o servidor devem esperar. Todos os dados do TCP são sequenciais, ou seja cada vez que um dado é enviado é associado a um número sequencial. Se uma aplicação escreve num socket TCP 2048 bytes, o mesmo é enviado em dois segmentos, o primeiro contendo dados com os números sequenciais de 1-1024 e o segundo segmento de 1025-2048. (Para quem não sabe um segmento é a unidade de dados que o TCP passa para o IP). O TCP ainda implementa o chamado controle de fluxo, que indica quantos bytes vão ser 34

transmitidos e aceitos pelo destino. Este controle implementa a chamada janela, (window) que indica quanto existe de buffer de recebimento para os dados do emissor para o receptor. A janela muda de tamanho conforme a necessidade e o tempo da transmissão, caso este espaço atinja 0, o buffer está cheio e a aplicação emissora deve esperar até que o próximo dado possa ser lido. Cabe lembrar que as conexões baseadas em TCP são full-duplex, ou seja podem receber e enviar dados simultaneamente. Por isso o TCP é conhecido como orientado a conexão. Protocolo UDP (User Datagram Protocol) O UDP é um simples protocolo de transmissão que encapsula datagramas em pacotes para o destinatário. Ao contrário do TCP, ele não garante que realmente o pacote vai ser entregue, ou seja o protocolo envia dados e não se preocupa em receber um acknowledgement do destinatário. Em resumo o pacote é enviado mas, nunca sabemos se ele realmente atingiu o destino. O UDP é cahamado por isso de protocolo não orientado a conexão. Fases da Conexão TCP : Como nosso objeto de estudo iremos estudar a conexão TCP para melhor entendermos as funções connect, accept e close. Estas funções serão apresentadas em exemplos de nosso tutorial, e assim demonstraremos o funcionamento de uma aplicação cliente/servidor. A Comunicação de Três Vias (Three Way Handshake) Vamos ilustrar passo a passo como uma conexão é feita : a) Um servidor fica no chamado modo de escuta passivo, aguardando uma conexão. Normalmente as funções que implementam isto são a socket, bind e a listen; b) O cliente faz uma conexão, utilizando a função connect, executando a conexão ativa. O cliente envia um segmento SYN (SYNCRONIZE), que avisa o servidor que uma conexão vai ser iniciada e que uma sequência de dados será enviada. Num segmento SYN, dados nãiosão enviados e sim o cabeçalho IP, o cabeçalho e possíveis opções TCP (RFC 793 – Postel 1981); c) O servidor envia um acknowledgement para o cliente juntamente com um segmento SYN próprio, com a sequência de dados do servidor. O servidor envia seu SYN + ACK próprios para o SYN do cliente num único segmento; d) O Cliente por sua vez manda um ACK para o SYN do servidor. A conexão em três vias é muito simples basicamente a sequência seria SYN (Cliente), SYN/ACK (Servidor) e ACK (Cliente). A grosso modo, é assim que a coisa funciona, mas podemos falar de mais alguns pontos 35

transmitidos e aceitos pelo destino. Este controle implementa a chamada<br />

janela, (window) que indica quanto existe de buffer de recebimento para<br />

os dados do emissor para o receptor. A janela muda de tamanho<br />

conforme a necessidade e o tempo da transmissão, caso este espaço<br />

atinja 0, o buffer está cheio e a aplicação emissora deve esperar até que o<br />

próximo dado possa ser lido. Cabe lembrar que as conexões baseadas em<br />

TCP são full-duplex, ou seja podem receber e enviar dados<br />

simultaneamente. Por isso o TCP é conhecido como orientado a conexão.<br />

Protocolo UDP (User Datagram Protocol)<br />

O UDP é um simples protocolo de transmissão que encapsula datagramas<br />

em pacotes para o destinatário. Ao contrário do TCP, ele não garante que<br />

realmente o pacote vai ser entregue, ou seja o protocolo envia dados e<br />

não se preocupa em receber um acknowledgement do destinatário. Em<br />

resumo o pacote é enviado mas, nunca sabemos se ele realmente atingiu<br />

o destino. O UDP é cahamado por isso de protocolo não orientado a<br />

conexão.<br />

Fases da Conexão TCP :<br />

Como nosso objeto de estudo iremos estudar a conexão TCP para melhor<br />

entendermos as funções connect, accept e close. Estas funções serão<br />

apresentadas em exemplos de nosso tutorial, e assim demonstraremos o<br />

funcionamento de uma aplicação cliente/servidor.<br />

A Comunicação de Três Vias (Three Way Handshake)<br />

Vamos ilustrar passo a passo como uma conexão é feita :<br />

a) Um servidor fica no chamado modo de escuta passivo, aguardando<br />

uma conexão. Normalmente as funções que implementam isto são a<br />

socket, bind e a listen;<br />

b) O cliente faz uma conexão, utilizando a função connect, executando a<br />

conexão ativa. O cliente envia um segmento SYN (SYNCRONIZE), que avisa<br />

o servidor que uma conexão vai ser iniciada e que uma sequência de<br />

dados será enviada. Num segmento SYN, dados nãiosão enviados e sim o<br />

cabeçalho IP, o cabeçalho e possíveis opções TCP (RFC 793 – Postel 1981);<br />

c) O servidor envia um acknowledgement para o cliente juntamente com<br />

um segmento SYN próprio, com a sequência de dados do servidor. O<br />

servidor envia seu SYN + ACK próprios para o SYN do cliente num único<br />

segmento;<br />

d) O Cliente por sua vez manda um ACK para o SYN do servidor.<br />

A conexão em três vias é muito simples basicamente a sequência seria<br />

SYN (Cliente), SYN/ACK (Servidor) e ACK (Cliente). A grosso modo, é<br />

assim que a coisa funciona, mas podemos falar de mais alguns pontos<br />

35

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!