MODELO OSI
O modelo OSI ( Open Systems Interconnection ) está dividido em 7 camadas.
arquitetura padrão para a comunicação entre dois dispositivos dentro de uma rede
MODELO OSI – PROTOCOLOS
MODELO OSI versus TCP/IP (atual)
Modelo Cliente/Servidor ● em geral, uma aplicação que inicia uma
comunicação par-a-par é chamada cliente.
● um servidor é um programa que espera
por requisições de um cliente.
Comunicação entre aplicação cliente e aplicação servidor
● Cliente e servidor usam comunicação entre processos (IPC -
inter-process communication) para conversar entre si.
● Há vários mecanismos de IPC - um deles é o sockets
● Sockets - API padrão para TCP/IP IPC
SOCKETS
Socket é um mecanismo de comunicação bidirecional mais usado para implementar um modelo cliente/servidor, e permite a troca de mensagens em Tempo Real entre os processos de uma máquina/aplicação servidor e os processos de uma máquina/aplicação cliente.
Socket é a "interface" que permite a comunicação entre o processo do servidor e o processo cliente através de um rede.
Exemplos: CHAT, Jogos Mutiplayer; Reservas online
A aplicação servidor que serve de "chat" irá receber ligações dos clientes (numa determinada porta) e posteriormente, se um cliente enviar uma mensagem, o servidor envia essa mensagem para todos os outros clientes.
O processo de comunicação:
- o servidor é colocado numa determinada porta e aguarda por ligações a essa porta.
- O cliente deve saber previamente qual o nome ou IP do servidor e a respetiva porta onde o servidor foi colocado à espera de ligações.
- Então o cliente solicita uma ligação ao servidor/porta conforme demonstra a figura seguinte.
o servidor aceita a ligação gerando um socket numa porta vaga do lado do servidor, criando assim um canal de comunicação entre o cliente e o servidor.
O servidor fica em loop, aguardando novas ligações e “gerando” sockets para atender as solicitações de clientes.
---------------------------------------------------------------------
TIPOS DE SOCKETS de REDE
A representação de um socket de rede dá-se pela informação ip:porta
Por exemplo: 127.0.0.1
:
4477
(IPv4).
Na comunicação de computadores há 2 coisas que devemos saber:
endereço IP (que identifica univocamente uma máquina) e a porta (que identifica a aplicação)
Sabendo que TCP/IP é a base da comunicação na internet, considerando o modelo de rede OSI:
os Sockets atuam entre a camada de Aplicação e a camada de Transporte.
Os Sockets são utilizados na camada de Transporte por protocolos como o TCP e UDP
TCP ( Transmission Control Protocol) UDP (User Datagram Protocol )
Dois principais tipos de sockets:
- SOCKET_STREAM ( TCP)
- SOCK_DGRAM (UDP).
Stream Sockets (SOCK_STREAM): Esse tipo usa o protocolo TCP que é mais fiável, pois há garantia de entrega e ordem, é orientado à conexão etc;
Datagram Sockets (SOCK_DGRAM): Esse tipo usa o protocolo UDP, portanto, não é orientado à conexão, não garante entrega completa dos dados e exige um controle mais especial do desenvolvedor.
DIFERENÇA entre TCP vs UDP
- Os sockets TCP garantem fiabilidade na comunicação (garantia da entrega de pacotes entre o emissor e o receptor),
- os sockets UDP não dão garantia na entrega de pacotes a nível da camada de transporte).
há mais velocidade e menos controle, associamos o protocolo IP ao UDP (tráfego de voz e vídeo são bons exemplos onde o UDP teria boa aplicabilidade, ademais, perdendo um ou outro pacote, não interfere totalmente no todo, permanecendo inteligível).
PORTAS
Existem milhares de portas (estas são codificadas em 16 bits, há por conseguinte, 65536 possibilidades)
Existem diferentes tipos de números de portas
- Portas Bem-conhecidas, de 0 a 1023. Atribuídas e controladas pelo ICANN
- Portas Registradas, de 1024 a 49151. Não atribuídas nem controladas pelo ICANN, mas podem ser registradas para evitar duplicação
- Portas Dinâmicas, Privadas ou Efêmeras, de 49152 a 65535. Não atribuídas nem controladas. Em tese, os sistemas clientes deveriam apenas usar portas desta faixa, mas na prática essa recomendação não é seguida.
estgp cisco
Verificar portas TCP / IP abertas no Windows
SINTAXE
netstat [-a] [-b] [-e] [-n] [-o] [-p <Protocol>] [-r] [-s] [<interval>]
-a Exibe todas as conexões TCP ativas e as portas TCP e UDP nas quais o computador está escutando
-n Exibe conexões TCP ativas, no entanto, os endereços e os números de porta são expressos numericamente e nenhuma tentativa é feita para determinar nomes
-o Exibe conexões TCP ativas e inclui a ID do processo (PID) para cada conexão. Você pode encontrar o aplicativo com base no PID na guia Processos no Windows gestor de Tarefas. Esse parâmetro pode ser combinado com -a, -n e -p
São visualizadas
Portas TCP e portas
UDP
Criação de Sockets TCP
RESUMO
Sockets são uma interface de programação que permite a comunicação bidirecional e em tempo real entre processos em diferentes dispositivos através de uma rede.
Os sockets funcionam em um modelo cliente-servidor, onde um processo atua como o servidor, aguardando por conexões, e outros processos agem como clientes, solicitando a conexão ao servidor.
Tipos de sockets :
Sockets TCP (Transmission Control Protocol): Fornecem uma comunicação confiável e orientada à conexão. A transmissão é estabelecida antes que os dados sejam trocados, garantindo que a informação seja recebida na ordem correta e sem perdas.
Sockets UDP (User Datagram Protocol): Oferecem uma comunicação mais simples e menos confiável, sem a garantia de entrega ou ordem dos pacotes.
Em PHP, pode-se criar uma comunicação via sockets utilizando as funções socket_create()
, socket_bind()
, socket_listen()
, socket_accept()
, socket_read()
, e socket_write()
EXEMPLO de uma comunicação entre SOCKET SERVIDOR e um SOCKET CLIENTE
Vamos compreender as funções em PHP utilizadas
FUNÇÕES EM PHP (Socket Servidor)
1. Criar socket
SINTAXE: socket_create(int $domain
, int $type
, int $protocol
): Socket|false´
domain
AF_INET | Protocolos baseados na Internet IPv4. TCP e UDP são protocolos comuns desta família de protocolos. |
AF_INET6 | Protocolos baseados na Internet IPv6. TCP e UDP são protocolos comuns desta família de protocolos. |
AF_UNIX | Família de protocolos de comunicação local. Alta eficiência e baixa sobrecarga tornam uma ótima forma de IPC (Interprocess Communication). |
typeSOCK_STREAM | Fornece fluxos de bytes sequenciados, confiáveis, full-duplex e baseados em conexão. Um mecanismo de transmissão de dados fora de banda pode ser suportado. O protocolo TCP é baseado nesse tipo de socket. |
SOCK_DGRAM | Suporta datagramas (mensagens não confiáveis e sem conexão de comprimento máximo fixo). protocolo UDP é baseado nesse tipo de socket. |
protocol
Caso o protocolo desejado seja TCP, ou UDP as constantes correspondentes SOL_TCP
, SOL_UDP
também podem ser utilizadas.
Exemplo:
$socket_servidor = socket_create (AF_INET , SOCK_STREAM, SOL_TCP);
2.Associar ao socket
socket_bind ( Socket $socket
, string $address
, int $port
= 0 ): bool
Exemplo:
socket_bind ($socket_servidor , ’127.0.0.1’, 50000 );
3. Esperar por clientes (nºclientes)
socket_listen(Socket $socket
, int $backlog
= 0): bool
Exemplo:
socket_listen ($socket_servidor, 1 );
4. Aceitar clientes
Exemplo:
$client_socket = socket_accept ($socket_servidor);
5. Enviar / Receber informação via socket
Enviar/Escrever
socket_write(Socket $socket
, string $data
, ?int $length
= null
): int|false
Exemplo:
$msg="Mensagem enviada via Socket!\n"
socket_write ($client_socket, $msg , strlen($msg) );
Função strlen(string) - determina o tamanho da string
Leitura/Receber
socket_read(Socket $socket
, int $length
, int $mode
= PHP_BINARY_READ
): string|false
length
O número máximo de bytes lidos é especificado pelo length
parâmetro.
mode (opcional) PHP_NORMAL_READ
- a leitura pára em \n
ou \r
.
Exemplo: $msgrecebida= socket_read ($client_socket, 1024, PHP_NORMAL_READ);
$msgrecebida= socket_read ($socket_servidor, 1024, PHP_NORMAL_READ);
6. Destruir o socket
socket_close(Socket $socket
): void
Exemplo: socket_close ($socket _servidor); socket_close ($client_socket );
6. Inicia a conexão a um socket (CLIENTE)
socket_connect(Socket $socket
, string $address
, ?int $port
= null
): bool
Exemplo: socket_connect($socket, '127.0.0.1', 50000 );
RESUMO
O socket servidor é iniciado e ficará à espera de pedidos dos clientes numa porta específica
Depois o cliente estabelece a ligação (usando o IP do servidor e a porta) e, se tudo correr bem, o cliente e servidor passam a trocar informações entre eles.
No final da troca de mensagens, o cliente e o servidor fecham a comunicação.
-----------------------------------------------------------------------------------------------------------------------
OUTRAS INFORMAÇÕES SOBRE SOCKETS
Sockets em Java http://www4.pucsp.br/~jarakaki/lp4/ProgramacaoSockets.pdf
Sockets versus WebSockets
Sockets é um termo mais genérico
WebSockets são utilizados quando se pretende uma comunicação bidirecional em Tempo Real entre um servidor Web e um cliente(Browser).
Como funciona um websocket ver Vídeo
https://www.youtube.com/watch?v=T4unNrKogSA
Aplicações em que são utilizados Websockets
Chat Apps
Multi-players Games
Real Time Data Analytis
Social Media (facebook, CNN )
WebSockets que utilizam a biblioteca Socket.io que permite criar projetos fantásticos, com comunicações em tempo real.
--------------------------------------------------------------------------------
INICIAÇÃO À PROGRAMAÇÃO de SOCKETS
Vamos começar por:
-- correr o programa em php "Server1.php" em linha de comandos e fazer uma ligação com o servidor usando o telnet (protocolo utilizado para conexão remota)
- correr o programa em php "Server1.php" em linha de comandos e fazer uma ligação com o servidor utilizando o Putty (software utilizado para aceder remotamente, utiliza o protocolo telnet ou SSH)
NOTA
-->Na Escola devido ao condicionamento da rede temos necessidade de criar Virtual Machine windows 8 para utilizarmos os SOCKETS.
-->Nos PC's dos alunos
- vamos ativar Telnet no Windows
- Elaborar código no VSCode e Corrigir o erro: extensão php - ficheiro php.ini (extension=sockets) (ver mais abaixo)
- instalar o Putty (www.putty.org)
1. DEVE ATIVAR O TELNET no seu computador
2. ESCREVER CÓDIGO DO SERVIDOR "server1.php"
INTERPRETAR O CÓDIGO em PHP
Depois de escrever o código, vai ter que utilizar o php.exe (pasta c:xampp\php) para interpretar o código php.
Abrir uma janela em linha comandos
entrar na pasta xampp\php (cd c:\xampp\php)
Deve digitar php -f e o caminho do ficheiro em php ( php -f path do ficheiro )
para copiar o path e colar
CORRIGIR ERRO PHP (Uncaugth Error) - Extensões do PHP
Para corrigir este erro, tem que alterar uma instrução do ficheiro php.ini
Editar Ficheiro php.ini (c:\xampp\php)
Localizar instrução ;extension =sockets e retirar o ponto e vírgula ; , ou seja,
onde estava ;extension =sockets fica apenas extension =sockets
Salvar
Interpretar novamente o código server1.php
SERVIDOR ----------------------- ----------------- CLIENTE:
O SERVIDOR informa que estabeleceu ligação e fica à espera de conexões de clientes
vamos estabelecer uma conexão através do Telnet
Noutra janela em linha de comando, o cliente vai ligar ao servidor através do telnet
telnet ip porta ou seja telnet 127.0.0.1 12345
Quando o cliente faz a ligação com o servidor, este envia as 2 frases que foram programadas para o cliente; e a ligação é terminada
ABRIR 2 JANELAS DE LINHA DE COMANDOS
No XAMPP
Numa janela em linha de comandos: interpretar código PHP
Ir para a pasta cd c:\xampp\php
digitar: php -f c:\xampp\htdocs\pasta\nomeficheiro.php
Segunda Janela em linha de comandos: estabelecer conexão com os servidor através do telnet
escrever telnet 127.0.0.1 nºporta
telnet 127.0.0.1 12345
(ENTER)
----------------------------------------------------------
WAMPSERVER
Em linha de comandos, digitar o comando para correr o código em php "server1.php"
Interpretador do php: c:\wamp\bin\php\php7.3.12 (ver qual a sua versão do PHP)
escrever: cd c:\wamp\bin\php\php7.3.12 (Enter)
php -f path/ficheiro_php
php -f c:\wamp\www\SOCKETS\server1.php
conexão é estabelecida e é enviada a msg de Bem-vindo ao PHP server sockets V1 e Adeus ... e sai
----------------------------------------------
3. CONEXÃO UTILIZANDO O PUTTY
1º INSTALAÇÃO DO PUTTY
2º SERVIDOR: Primeira janela na linha de comandos--> correr código php 3º CLIENTE: Abrir o Putty --> escrever o ip do servidor (127.0.0.1) porta (12345)
-->selecionar o protocolo telnet -- > fazer ligação
COMUNICAÇÃO entre SOCKET SERVIDOR E SOCKET CLIENTE
código socket servidor código socket cliente
--------------------------------------------------------------------------------------------------------------------
Código de um servidor TCP/IP com Mensagens de Erro e LOOP
CHAT em LINHA DE COMANDOS entre Servidor e Cliente
- para ler da linha de comandos utiliza-se a função fgets (STDIN)
recolhe string inseridos na linha de comandos (STDIN - standard INPUT)
- função trim - retira espaços
- função rtrim — Retira espaço em branco (ou outros caracteres) do final de uma string
código e resultado comunicação
CHAT entre Servidor CMD e Cliente WEB BROWSER
PRECISAM LIGAR XAMPP para CORRER o clientchat.php
--SERVIDOR: Abrir janela em linha de comandos --> correr código php do servidor
-- CLENTE: Abrir Browser; URL digitar localhost/path/nomeficheiro.php
(correr o script
clientchat.php)
- cliente escrever a mensagem para o servidor e enviar
msg
Irá aparecer mensagem do cliente na janela de linha de
comandos
SERVIDOR escrever mensagem para o cliente (enter) e deverá aparecer no cliente Browser
Escrever nova msg do Cliente para servidor
Enviar msg
Servidor: deverá aparecer a frase escrita pelo cliente (aguardar)
Servidor responde “Sim! Adeus ” (enter )
e é visualizada no Browser
EXEMPLO: CHAT do MISAEL
wwwwwwwwwwwwwwwwwwwwwwwwwwww
ResponderEliminarAprendi muito
ResponderEliminar