Escolar Documentos
Profissional Documentos
Cultura Documentos
Lista - 1 - Redes - de - Computadores
Lista - 1 - Redes - de - Computadores
Campus de Quixadá
Disciplina de Redes de Computadores
Professor Arthur Callado
Nome:
1) Em que partes da topologia física da rede (não confundir com a arquitetura da rede) se
implementam os protocolos de camada de aplicação e porquê?
3) Diferencie os principais requisitos de transporte que uma aplicação pode ter e dê exemplos
de aplicação com tais requisitos.
Os requisitos de transporte que uma aplicação pode ter incluem:
1. Método GET: O método GET é o mais comum e simples de ser usado. Ele é
utilizado para solicitar informações do servidor através de uma URL. Ao enviar um
formulário usando o método GET, os dados do formulário são anexados à URL
como parâmetros e enviados ao servidor. É importante notar que, como os dados
são anexados à URL, eles podem ser visualizados por qualquer pessoa que esteja
observando a conexão de rede. Além disso, o método GET tem um limite na
quantidade de dados que podem ser enviados, o que pode ser um problema para
formulários com muitos campos.
2. Método POST: O método POST é usado para enviar dados ao servidor de forma
mais segura e confidencial do que o método GET. Ao contrário do método GET, os
dados do formulário são enviados no corpo da requisição HTTP, e não na URL, o
que significa que eles não são visíveis na conexão de rede. Além disso, o método
POST não tem limite na quantidade de dados que podem ser enviados, o que o
torna ideal para formulários com muitos campos ou para o envio de arquivos. No
entanto, o método POST é mais complexo e pode exigir mais processamento por
parte do servidor e do cliente.
Em resumo, o método GET é mais adequado para formulários simples que não exigem
segurança ou confidencialidade, enquanto o método POST é mais adequado para
formulários mais complexos que exigem segurança e confidencialidade. É importante
escolher o método de formulário adequado com base nos requisitos de segurança,
quantidade de dados a serem enviados e outros fatores específicos da aplicação.
Um proxy HTTP é um intermediário entre um cliente e um servidor web que atua como um
servidor para o cliente e como um cliente para o servidor. Quando um cliente envia uma
solicitação para acessar um recurso na internet, a solicitação é interceptada pelo proxy
HTTP, que então encaminha a solicitação ao servidor web. Quando a resposta é recebida do
servidor web, o proxy HTTP a encaminha de volta ao cliente.
O "proxy transparente" é um tipo de proxy que é configurado de forma que o cliente não
precisa fazer nenhuma configuração para utilizá-lo. Ele é chamado de transparente porque,
do ponto de vista do cliente, a conexão com o servidor web parece direta, sem a
intermediação do proxy.
Em um proxy transparente HTTP, as solicitações do cliente são interceptadas pelo proxy
sem que o cliente saiba disso. O proxy então encaminha a solicitação ao servidor web em
nome do cliente e recebe a resposta do servidor web. Quando o proxy recebe a resposta, ele
a encaminha de volta ao cliente como se fosse a resposta original do servidor web. O
cliente não precisa fazer nenhuma configuração adicional para usar um proxy transparente,
porque a conexão com o servidor web parece direta.
O protocolo FTP (File Transfer Protocol) é um protocolo de rede utilizado para transferir
arquivos entre computadores na internet. Uma das características do FTP que o diferencia
de outros protocolos de transferência de arquivos é que ele utiliza dois canais de
comunicação separados para controlar a transferência de dados.
O primeiro canal é o canal de controle, que é usado para enviar comandos e respostas entre
o cliente e o servidor FTP. O canal de controle é estabelecido na porta 21 e é usado para
autenticar o usuário, enviar comandos para listar, transferir e excluir arquivos, além de
fornecer informações de status e erro.
O segundo canal é o canal de dados, que é usado para transferir os dados de arquivo entre o
cliente e o servidor FTP. O canal de dados é estabelecido em uma porta diferente da porta
de controle, geralmente na faixa de portas de 1024 a 65535. O canal de dados é aberto
apenas quando necessário e é fechado quando a transferência de dados é concluída.
Essa separação de canais é importante porque permite que o FTP forneça feedback em
tempo real ao usuário, mesmo durante a transferência de grandes quantidades de dados. Por
exemplo, o usuário pode interromper a transferência de dados a qualquer momento através
do canal de controle, sem interromper a comunicação no canal de controle.
O protocolo SMTP (Simple Mail Transfer Protocol) é um protocolo de rede usado para
enviar e receber emails na internet. No SMTP, o remetente é definido no cabeçalho do
email como o endereço de email "De" e pode ser facilmente falsificado ou manipulado,
mesmo sem a senha da pessoa.
O remetente pode especificar qualquer endereço de email válido como o endereço "De" no
cabeçalho do email, incluindo um endereço de email que não pertence a eles. Isso é
conhecido como "spoofing" de email ou falsificação de endereço de email.
Isso significa que é possível enviar emails usando o SMTP fazendo-se passar por outra
pessoa, mesmo sem saber a senha da pessoa. Por exemplo, um remetente mal-intencionado
pode enviar um email de phishing ou de spam com um endereço de email falsificado para
enganar o destinatário e induzi-lo a clicar em um link malicioso ou fornecer informações
confidenciais.
Para combater a falsificação de endereço de email, foram desenvolvidas técnicas como SPF
(Sender Policy Framework), DKIM (Domain Keys Identified Mail) e DMARC
(Domain-based Message Authentication, Reporting and Conformance), que ajudam a
verificar a autenticidade do remetente do email e reduzir o risco de spoofing de email. No
entanto, a adoção dessas técnicas ainda não é universal e muitos emails falsificados ainda
passam pelos filtros de spam e chegam à caixa de entrada dos usuários
O IMAP (Internet Message Access Protocol) e o POP3 (Post Office Protocol 3) são dois
dos protocolos mais comuns usados para receber emails em clientes de email. Ambos os
protocolos têm suas vantagens e desvantagens, mas o IMAP tem algumas vantagens
significativas em relação ao POP3, que incluem:
Em resumo, o IMAP é mais adequado para usuários que precisam acessar emails em vários
dispositivos e desejam manter as mesmas pastas e organização de mensagens em todos os
dispositivos. O POP3 pode ser mais adequado para usuários que desejam baixar e
armazenar emails localmente em um único dispositivo.
Quando um cliente de DNS envia uma consulta para um domínio de nível superior, o
servidor de DNS local encaminha a consulta para um dos servidores raiz de DNS. Se o
servidor raiz não puder resolver a consulta diretamente, ele encaminha a consulta para os
servidores DNS autoritativos para o domínio de nível superior correspondente. Esses
servidores autoritativos, por sua vez, podem encaminhar a consulta para servidores DNS
autoritativos para domínios de nível inferior, até que a consulta seja resolvida e a resposta
seja retornada ao servidor de DNS local.
Os servidores raiz do protocolo DNS são essenciais para a operação da Internet e garantem
que os nomes de domínio possam ser resolvidos em endereços IP corretos. Embora existam
apenas 13 servidores de raiz no mundo, eles são distribuídos em diferentes partes do
mundo e são replicados para garantir a resiliência e a disponibilidade do serviço.
A zona de DNS reversa é organizada de forma diferente da zona de DNS normal, pois os
endereços IP são divididos em blocos e organizados em ordem inversa, com a parte mais
específica do endereço IP aparecendo primeiro. Por exemplo, se um endereço IP for
192.0.2.100, na zona de DNS reversa ele seria representado como 100.2.0.192.in-addr.arpa.
Para configurar a resolução de nomes reversa, é necessário criar uma zona de DNS reversa
para a rede ou sub-rede correspondente, e em seguida, adicionar registros PTR (Pointer) a
essa zona. Os registros PTR mapeiam o endereço IP para o nome de domínio do host
correspondente.
O processo de resolução de nomes reversa começa quando um cliente faz uma consulta
DNS PTR para um endereço IP específico. Essa consulta é enviada para um servidor DNS,
que verifica se possui uma zona de DNS reversa correspondente ao endereço IP
consultado. Se possuir, o servidor procura um registro PTR correspondente e retorna o
nome de domínio associado ao endereço IP. Se não houver uma zona de DNS reversa
correspondente, ou se não houver registro PTR para o endereço IP, o servidor retorna uma
resposta negativa.
As redes P2P podem ser divididas em duas categorias principais: redes P2P puras e redes
P2P híbridas.
As redes P2P puras são redes em que todos os nós (computadores conectados na rede) têm
a mesma capacidade de compartilhar recursos. Não há um nó centralizado que coordene as
atividades da rede, e todos os nós têm acesso igual aos recursos compartilhados. Exemplos
de redes P2P puras incluem BitTorrent e Gnutella.
Já as redes P2P híbridas combinam elementos de uma rede P2P com uma rede
cliente-servidor. Nesse tipo de rede, existem nós que têm funções específicas de servidor,
que ajudam a coordenar as atividades da rede e armazenar informações importantes,
enquanto outros nós funcionam como clientes, que usam os recursos da rede. Em outras
palavras, a rede P2P híbrida tem uma estrutura em camadas, com servidores centrais que
coordenam as atividades e clientes que usam os recursos compartilhados. Exemplos de
redes P2P híbridas incluem Skype e eMule.
A principal diferença entre as redes P2P puras e as redes P2P híbridas é a forma como as
atividades são coordenadas e os recursos são compartilhados entre os nós da rede.
Enquanto as redes P2P puras são totalmente descentralizadas e todos os nós têm acesso
igual aos recursos, as redes P2P híbridas têm uma estrutura em camadas, com servidores
centrais que ajudam a coordenar as atividades e os clientes que usam os recursos
compartilhados.
O TCP é um protocolo orientado a conexão, o que significa que ele estabelece uma
conexão entre o remetente e o destinatário antes que os dados sejam enviados. Isso garante
que os dados sejam entregues de forma confiável e em ordem, com confirmações de
recebimento e retransmissões de pacotes perdidos ou danificados. O TCP é frequentemente
usado em aplicações que exigem alta confiabilidade e precisão, como transações bancárias,
transferências de arquivos grandes e transmissão de vídeos de alta qualidade.
Por outro lado, o UDP é um protocolo sem conexão, o que significa que não há
estabelecimento de conexão antes que os dados sejam enviados. O UDP é mais simples e
rápido que o TCP, pois não há sobrecarga com confirmações de recebimento,
retransmissões de pacotes perdidos ou controle de congestionamento. O UDP é
frequentemente usado em aplicações que requerem alta velocidade e eficiência, mas que
podem tolerar a perda de alguns pacotes, como jogos on-line, streaming de áudio e vídeo
em tempo real e transmissão de dados em tempo real.
Assim, enquanto o TCP se concentra na entrega confiável e em ordem dos dados, o UDP
prioriza a velocidade e a eficiência de transmissão. Cada protocolo é projetado para atender
a diferentes necessidades e aplicações, e a escolha entre eles depende dos requisitos
específicos da aplicação em questão.
Em resumo, o TCP é mais confiável, seguro e lento, enquanto o UDP é mais rápido, mas
menos confiável. A escolha entre TCP e UDP depende dos requisitos específicos da
aplicação em questão.
Por exemplo, o processo HTTP (HyperText Transfer Protocol), que é responsável pela
transferência de dados da Web, usa a porta 80 para enviar e receber dados. O processo
SMTP (Simple Mail Transfer Protocol), usado para envio de e-mails, usa a porta 25 para
enviar e receber dados.
Cada protocolo de rede possui portas específicas associadas a ele. Quando um processo
deseja se comunicar com outro processo em uma máquina remota, ele especifica a porta do
processo de destino na mensagem que envia. Ao receber a mensagem, a máquina de
destino encaminha a mensagem para o processo apropriado, com base na porta especificada
na mensagem.
Assim, as portas permitem que vários processos em uma máquina se comuniquem com
processos em outras máquinas, de forma confiável e segura.
17) O que são sockets? Que funções são necessárias ao uso de sockets?
Sockets são uma interface de programação de aplicativos (API) que permite a comunicação
entre processos em diferentes computadores através de uma rede. Eles são usados para
enviar e receber dados entre processos e permitem que os desenvolvedores de aplicativos
criem programas que possam se comunicar por meio de uma rede de computadores.
Para usar sockets, é necessário ter uma série de funções que permitem a criação,
configuração e gerenciamento de conexões de rede. As principais funções necessárias para
o uso de sockets incluem:
1. socket(): cria um novo socket e retorna seu descritor de arquivo (file descriptor).
2. bind(): associa o socket a um endereço IP e porta local.
3. listen(): coloca o socket em modo de escuta (listen) e aguarda por conexões de
entrada.
4. accept(): aceita uma conexão de entrada e cria um novo socket para comunicação
com o cliente.
5. connect(): inicia uma conexão de saída com um servidor em um endereço IP e porta
remotos.
6. send() e recv(): enviam e recebem dados através do socket.
7. close(): fecha o socket e libera todos os recursos associados a ele.
Essas funções são usadas para configurar e gerenciar a comunicação entre os processos que
utilizam os sockets. Por exemplo, para estabelecer uma conexão entre um cliente e um
servidor, o cliente cria um socket e usa as funções connect() e send() para enviar dados ao
servidor. O servidor, por sua vez, cria um novo socket para a comunicação com o cliente
usando a função accept() e usa as funções send() e recv() para enviar e receber dados do
cliente.
Os sockets são uma ferramenta poderosa para a criação de aplicativos de rede, permitindo
que os desenvolvedores criem aplicativos escaláveis e flexíveis que possam se comunicar
com outros computadores em uma rede.
O checksum funciona através do cálculo de um valor numérico com base nos dados que
estão sendo transmitidos. Esse valor é então enviado junto com os dados. Quando os dados
são recebidos, um novo checksum é calculado com base nos dados recebidos e comparado
com o checksum original enviado junto com os dados. Se os dois valores forem iguais, isso
indica que os dados foram transmitidos com sucesso e sem erros. Se os valores forem
diferentes, isso indica que ocorreu um erro nos dados transmitidos.
A aplicação que iniciou a conexão recebe a mensagem SYN-ACK e envia uma mensagem
ACK (acknowledge) de volta para a outra aplicação, confirmando que a conexão foi
estabelecida. A mensagem ACK contém um número de reconhecimento igual ao número
de sequência da mensagem SYN-ACK mais um.
Com isso, a conexão TCP é estabelecida e as aplicações podem começar a trocar dados.
Quando a comunicação entre as aplicações é concluída, é necessário finalizar a conexão
TCP de forma adequada. O término de conexão TCP é realizado por meio de um processo
de quatro vias, que envolve a troca de mensagens entre as aplicações.
Para finalizar a conexão TCP, a aplicação que deseja terminar a conexão envia uma
mensagem FIN (finish) para a outra aplicação, indicando que deseja encerrar a conexão. A
outra aplicação recebe a mensagem FIN e envia uma mensagem ACK de volta,
confirmando o recebimento da mensagem FIN.
Em seguida, a aplicação que recebeu a mensagem FIN também envia uma mensagem FIN
para a aplicação que iniciou a conexão, indicando que também deseja encerrar a conexão.
A aplicação que iniciou a conexão recebe a mensagem FIN e envia uma mensagem ACK
de volta, confirmando o recebimento da mensagem FIN.
Com isso, a conexão TCP é finalizada e ambas as aplicações podem ser encerradas. O
processo de estabelecimento e término de conexão do TCP é importante para garantir a
integridade dos dados transmitidos e a confiabilidade da comunicação entre as aplicações.
20) Como funciona a janela deslizante do TCP? Quais os modos de funcionamento e em que
casos é feita a troca?
A janela deslizante do TCP é uma técnica usada para controlar o fluxo de dados entre o
emissor e o receptor em uma conexão TCP. Ela permite que o emissor envie múltiplos
segmentos de dados para o receptor sem esperar pela confirmação de recebimento de cada
um antes de enviar o próximo. Em vez disso, o emissor pode enviar uma quantidade de
dados que seja menor ou igual ao tamanho da janela, que é determinado pelo receptor e
pode ser alterado durante a conexão.
O controle de fluxo do TCP é usado para evitar a sobrecarga da rede e prevenir perda de
pacotes. Ele funciona através do uso da janela deslizante, que permite que o receptor
informe ao emissor a quantidade de dados que ele está disposto a receber em um
determinado momento.
O receptor envia uma mensagem ACK (acknowledgment) para o emissor informando que
recebeu um segmento de dados. Junto com a mensagem ACK, o receptor também
informa o número de sequência do próximo segmento que está esperando receber e o
tamanho da janela disponível para receber dados. O emissor usa essas informações para
determinar a quantidade de dados que pode enviar para o receptor sem sobrecarregar a
rede.
Por exemplo, suponha que a janela do receptor tenha tamanho 1000 bytes. O emissor
envia um segmento de dados de 500 bytes para o receptor e espera uma mensagem
ACK. O receptor confirma o recebimento do segmento e informa que a janela está
disponível para receber mais 500 bytes de dados. O emissor pode então enviar mais 500
bytes de dados sem esperar uma nova mensagem ACK.
Se a janela do receptor estiver cheia, o emissor terá que esperar até que haja espaço
disponível na janela para enviar mais dados. Isso evita que o emissor envie dados em
excesso para o receptor, o que pode sobrecarregar a rede e causar a perda de pacotes.
O controle de fluxo é implementado pelo TCP através dos campos de cabeçalho Window
Size e Sequence Number, que são usados para controlar o tamanho da janela e a ordem
de entrega dos pacotes. Quando o receptor informa o tamanho da janela disponível, ele
está efetivamente controlando o fluxo de dados recebidos do emissor.
O modelo TCP/IP é um modelo de protocolo de rede que é usado como padrão para
comunicação de dados em redes de computadores. Ele consiste em cinco camadas, que
são:
Quando um cliente faz uma solicitação HTTP através de um proxy, o proxy intercepta a
solicitação e, em seguida, encaminha a solicitação ao servidor de destino em nome do
cliente. O servidor de destino responde ao proxy, que, por sua vez, encaminha a resposta
ao cliente. Isso pode ajudar a melhorar o desempenho, reduzir o tráfego de rede e
aumentar a segurança.
A arquitetura peer-to-peer pura é uma rede em que todos os nós têm a mesma função e
responsabilidade, ou seja, cada nó atua como cliente e servidor ao mesmo tempo. Cada
nó pode se comunicar diretamente com outros nós e compartilhar recursos, como
arquivos. O Gnutella é um exemplo de arquitetura P2P pura.
Já a arquitetura P2P híbrida é uma rede que combina elementos de uma rede P2P com
um servidor centralizado, também conhecido como "tracker". Cada nó ainda pode se
comunicar diretamente com outros nós, mas eles também se comunicam com o tracker
para encontrar outros nós que possuem o arquivo desejado. O BitTorrent é um exemplo
de arquitetura P2P híbrida.
OBS: A diferença do P2P puro para o híbrido é em poucas palavras, pois o híbrido possui
um servidor central, enquanto P2P puro não há distinção clara entre as funções que
esses nós desempenham na rede.
O controle de fluxo do TCP funciona usando uma técnica chamada "janela deslizante"
(sliding window). Cada pacote de dados TCP contém um número de sequência e um
número de confirmação. Quando o receptor recebe um pacote, ele envia um número de
confirmação para o emissor indicando que recebeu com sucesso o pacote e está pronto
para receber mais dados. O número de confirmação é igual ao número de sequência do
próximo pacote que o receptor espera receber.
Assim, o controle de fluxo do TCP ajuda a garantir que a comunicação entre emissor e
receptor seja eficiente e confiável, permitindo que o receptor controle o fluxo de dados e
evite a sobrecarga de dados indesejada. Ele é um dos principais mecanismos que tornam
o TCP um protocolo robusto e confiável para a comunicação de rede.
Por outro lado, UDP (User Datagram Protocol) é um protocolo não confiável e sem
conexão. Ele envia pacotes de dados, conhecidos como datagramas, sem garantir que
cheguem ao seu destino. Se um pacote UDP é perdido ou corrompido, o remetente não é
notificado e não há garantia de que ele será retransmitido. O UDP é mais adequado para
aplicativos em que a perda de alguns pacotes não é crítica e a latência é importante.
● Não confiabilidade: O UDP não é confiável, o que significa que não há garantia de
que os dados chegarão ao seu destino ou na ordem correta.
● Sem conexão: O UDP não estabelece uma conexão antes de iniciar a
transferência de dados, o que significa que os pacotes podem ser enviados
imediatamente.
● Overhead: O UDP tem um overhead menor do que o TCP, já que não implementa
controle de fluxo ou controle de congestionamento.
B - Como se usam sockets TCP no servidor e no cliente ? Para cada um, cite as funções na
ordem de utilização
Para o cliente:
1. Criação do socket: Cria um socket TCP para comunicação com o servidor. Isso é
geralmente feito com a função socket(), especificando o protocolo TCP.
2. Conexão com o servidor: Conecta-se ao servidor usando a função connect(),
que estabelece uma conexão TCP com o endereço IP e a porta do servidor.
3. Envio de dados: Envia dados ao servidor usando a função send(), que envia os
dados por meio da conexão TCP.
4. Recebimento de dados: Recebe dados do servidor usando a função recv(), que
recebe dados por meio da conexão TCP.
5. Encerramento da conexão: Encerra a conexão TCP com o servidor usando a
função close(), que fecha o socket.
Para o servidor:
1. Criação do socket: Cria um socket TCP para aguardar a conexão dos clientes.
Isso é geralmente feito com a função socket(), especificando o protocolo TCP.
2. Vinculação do socket: Vincula o socket ao endereço IP e à porta do servidor
usando a função bind().
3. Escuta por conexões: Aguarda conexões de clientes usando a função listen(),
que coloca o socket em modo de escuta para receber conexões.
4. Aceitação de conexões: Aceita uma conexão de um cliente usando a função
accept(), que retorna um novo socket para comunicação com o cliente
conectado.
5. Recebimento de dados: Recebe dados do cliente usando a função recv(), que
recebe dados por meio da conexão TCP.
6. Envio de dados: Envia dados ao cliente usando a função send(), que envia os
dados por meio da conexão TCP.
7. Encerramento da conexão: Encerra a conexão TCP com o cliente usando a
função close(), que fecha o socket.
Cookies HTTP são pequenos arquivos de texto que um servidor web envia para o
navegador do usuário e que são armazenados no computador ou dispositivo do usuário.
Os cookies são usados para armazenar informações sobre as preferências do usuário,
como suas configurações de idioma, login e senha, histórico de navegação e outras
informações relevantes para a interação com o site.
1. Cookies de sessão: são temporários e são apagados assim que o usuário fecha o
navegador.
2. Cookies persistentes: permanecem armazenados no dispositivo do usuário por um
período específico de tempo, permitindo que o servidor se lembre das
preferências do usuário quando ele retorna ao site.
3. Cookies de terceiros: são definidos por um domínio diferente do que o usuário
está visitando, como anúncios de terceiros que podem coletar informações sobre
o comportamento do usuário na web.