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)
TCP/IP é um conjunto de protocolos que possibilita a comunicação entre computadores e servidores, formando a Internet. Ele combina o Protocolo de Controle de Transmissão (TCP), responsável pela transmissão de dados, com o Protocolo de Internet (IP), que identificar os computadores e servidores.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 aplicação servidor e os processos de uma 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)
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:
- SOCK_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. pode encontrar a aplicação 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.
PROGRAMAÇÃO DE SOCKETS - PHP
Em PHP, pode-se criar uma comunicação via sockets utiliza-se as funções:-
socket_create()
, socket_bind()
, socket_listen()
, socket_accept()
, socket_read()
, socket_write() e
socket_close()
EXEMPLO de uma comunicação entre SOCKET SERVIDOR e um SOCKET CLIENTE
COMPREENDER AS FUNÇÕES EM PHP (Socket Servidor)
1. Criar socket
SINTAXE: socket_create(int $domain
, int $type
, int $protocol
): Socket|false´
Exemplo:
$socket_servidor = socket_create (AF_INET , SOCK_STREAM, SOL_TCP);
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.
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);
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
Abrir uma janela em linha comandos
Na pasta c:xampp\php deve chamar o executável php.exe com opção -f para interpretar o código php.
Digitar php -f path do ficheiro ou seja php -f c:\xampp\htdocs\M6\server1.php
Para ir buscar o path no VSCode
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 (na pasta c:\xampp\php)
Editar ficheiro --> Localizar ;extension =sockets -->
retirar o ponto e vírgula ; , ou seja,
onde estava ;extension =sockets fica apenas extension =sockets

Salvar
Interpretar novamente o código server1.php.
Abrir 2 janelas de linha de comando, uma para o cliente e outra para o servidor
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 o comando para interpretar o 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
Atenção: falta linhas de código
--------------------------------------------------------------------------------------------------------------------
Código de um servidor TCP/IP e código do cliente com LOOP
- para ler strings utiliza-se a função fgets (STDIN)
recolhe a string inserida 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
CHAT entre Servidor CMD e Cliente WEB BROWSER
LIGAR o XAMPP para CORRER o clientchat.php via Browser
--Correr código do SERVIDOR:
Abrir janela em linha de comandos --> interpretar o código php do servidor
-- Correr código do CLENTE:
Abrir Browser --> digitar na URL: localhost/path/nomeficheiro.php
- cliente escrever a mensagem e enviar para o servidor
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