Você está na página 1de 2

Extrado de artigos publicados por Brian Beej Hall

O que um Socket?
Voc j deve ter ouvido falar sobre Sockets e talvez esteja imaginando do que se trata exatamente. Bem, resumindo: atravs de Sockets nos comunicamos com outros programas usando discritores de arquivos Unix padro. O que? Tudo bem. Voc deve ter ouvido algum guru em Unix dizer,"Tudo no Unix umarquivo!". O que esta pessoa esta querendo dizer, na verdade, o fato de que quando sistemas Unix realizam qualquer tipo de E/S(Entrada/Sada), eles o fazem lendo ou escrevendo atravs de um descritor de arquivo.Um descritor de arquivo simplesmente um inteiro associado a um arquivo aberto.Mas(e aqui est o detalhe), este arquivo pode ser uma conexo de rede,um FIFO, um pipe, um terminal, um arquivo no disco, ou qualquer outra coisa.Tudo no Unix(Linux) um arquivo!.Assim quando voc quiser se comunicar com outro programa na internet voc vai usar um descritor de arquivo.Apartir dai, voc realiza chamadas de socket send() e recv(). "Mas,pera!", voc deve estar pensando. "Se um descritor de arquivo, porque no usar as chamadas read() e write() para se comunicar atravs de um Socket?"a resposta ,"Voc pode!"a resposta completa ,"Voc pode, mas send() e recv() oferecem melhor controle sobre a transmisso de dados". "T bom, e da?"Que tal isto: existem vrios tipos de Sockets.Tem o DARPA(Sockets de Internet), Sockets Unix, CCITT X.25 e provavelmente outros dependendo da sua verso Unix. Este artigo abordar somente o primeiro: Sockets de Internet.

Dois Tipos de Sockets


O que isto? Existem dois tipos de Sockets de Internet? Sim. Bem,na verdade no.Tem mais, mas no quero assust-lo. Irei abordar apenas dois tipos.O primeiro o "Stream Sockets", o outro "Datagram Sockets", que apartir de agora sero chamados de "SOCK_STREAM" e "SOCK_DGRAM", respectivamente. Os "Datagram Sockets" tambm so conhecidos como sockets sem conexo, embora voc possa usar a chamada connect(). Os "Stream Sockets" so fluxos de comunicao confiveis. Se voc enviar 2 itens na ordem "1,2", eles iro chegar chegar na ordem "1,2" no outro extremo do link.Eles tambm so livres de erros.Qualquer erro que voc encontrar apenas iluso da sua mente :-). O que realmente utiliza um "Stream Socket"? Voc j deve ter ouvido falar no programa Telnet.Pois bem, todos os caracters que voc digita precisam chegar na mesma ordem em que voc os digitou logo este aplicativo consegue isto atravs de "Stream Sockets".Alm disso os browsers, que utilizam o protocolo HTTP, usam "Stream Sockets" para receber pginas. Como os "Stream Sockets" conseguem este alto grau de qualidade de transmisso de dados? Eles utilizam um protocolo chamado "Protocolo de Controle de Transmisso", mais conhecido como "TCP". TCP assegura que os dados chegaro sequencialmente e livres de erros. Voc deve ter ouvido falar que TCP a melhor metade do TCP/IP, onde IP significa Protocolo de Internet. IP cuida basicamente do roteamento e no responsvel pelaintegridade dos dados. Legal. E os "Datagram Sockets"? Porque so conhecidos como sem conexo? Porque no so confiveis? Bem, alguns fatos: Se voc enviar um datagrama, ele pode chegar. Ele pode chegar fora de ordem. Se chegar , os dados contidos no pacote estaro livres de erros. "Datagram Sockets" tambm usam o IP para roteamento, mas eles no utilizam TCP, e sim o "UDP". Porque so sem conexo? Bem , basicamente devido ao fato de voc no precisar manter uma conexo aberta como os "Stream Sockets". Voc constri um pacote, anexa um cabealho IP com informaes de destino, e envia. No precisa haver conexo. Ele so mais utilizados para

transferncias pacote por pacote de informaes. Alguns aplicativos que utilizam UDP: tftp, bootp,etc. "Chega!", voc diz. "Como estes programas funcionam se um pacote pode se perder na rota?"Bem, meu caro amigo, cada um tem se prprio protocolo acima do UDP. Por exemplo, o protocolo tftp diz que para cada pacote que enviado, o receptor tem que enviar um pacote de volta que diz, "Eu recebi!"(um pacote "ACK") Se o emissor do pacote original no receber uma resposta, digamos, em cinco segundos , ele ir retransmitir o pacote at que receba um "ACK". Este procedimento muito importante quando voc for implementar aplicaes que utilizam "SOCK_DGRAM".

Alguma Teoria de Rede


J que mencionei algumas camadas de protocolos, hora de falar como as redes realmente funcionam, e mostrar alguns exemplos de como pacotes SOCK_DGRAM so construdos. Voc pode pular esta parte se no estiver interessado. hora de aprender sobre Encapsulamento de Dados. Isto muito importante. Basicamente, isto: um pacote criado, o pacote empacotado("encapsulado") em um cabealho pelo primeiro protocolo (digamos, o protocolo TFTP), ento tudo (cabealho TFTP includo) empacotado novamente pelo prximo protocolo (por exemplo, UDP), novamente pelo prximo (IP) , e ento finalmente pelo ltimo protocolo no hardware(camada fsica) , por exemplo Ethernet. Quando outro computador receber o pacote, o hardware retira o cabealho Ethernet, o kernel retira os cabealhos IP e UDP, e o programa TFTP retira o cabealho TFTP, e finalmente se tem os dados. Agora finalmente posso falar sobre o temvel Modelo de Camadas de Rede. Este modelo descreve um sistema de funcionalidade de rede que tem muitas vantagens sobre outros modelos. Por exemplo, voc pode escrever programas de sockets que no se importam como os dados so fisicamente transmitidos (serial, thin ETHERNET,AUI, seja l o que for) porque programas nos nveis mais baixos tomam conta disto pra voc. O hardware de rede e a topologia so transparentes para o programador. Bem sem mais enrolao, irei apresentar o modelo completo:

Camada Camada Camada Camada

de de de de

Aplicao (Application Layer) Transporte (TCP,UDP) Internet (IP) Acesso de Rede (Ethernet, ATM)

Nesse momento voc provavelmente deve estar imaginando como estas camadas correspondem ao encapsulamento dos dados. Veja quanto trabalho para construir um simples pacote? E voc ainda tem que digitar os cabealhos do pacote usando "cat"!. Brincadeirinha. Tudo que voc tem que fazer para utilizar "Sockets Streams" enviar (send()) os dados. Com relao aos "Sockets Datagram" empacotar os pacotes num mtodo de sua escolha e enviar(sendto()) os dados. O kernel constri a Camada de Transporte e a Camada de Internet pra voc e o hardware cuida das camadas mais baixas. Bem aqui termina nossa breve introduo em teoria de redes. AH, esqueci de mencionar alguma coisa sobre roteamento: nada! Isso mesmo , no irei falar sobre isso. O roteador retira o cabealho IP, consulta a tabela de roteamento , etc,etc.

Você também pode gostar