260 likes | 370 Views
Trabalho elaborado por: Nelson de Sousa, n.º 20825. Fiabilidade de Sistemas Informáticos. Reliable Message Delivery. Introdução. Objectivos : Numa rede de computadores conectados, para todos os pares de nós “i” e “j”, existe um caminho entre eles no grafo.
E N D
Trabalho elaborado por: Nelson de Sousa, n.º 20825 Fiabilidade de Sistemas Informáticos Reliable Message Delivery
Introdução Objectivos : • Numa rede de computadores conectados,para todos os pares de nós “i” e “j”, existe um caminho entre eles no grafo. • Uma sequência de mensagem m1... mn enviada do emissor ao receptor deve chegar : • Não corrompida (i.e modificada ou alterada) • Com a mesma ordem de origem
Introdução Problematica : • Como satisfazer essas duas propriedades quando há falhas na rede, sabendo que perdas de mensagens e erros de comunicação são factos em meios de comunicação reais? • Essas falhas podem ter varias origens (software,hardware,fisicas...) podem ser pontuais, temporárias o definitivas, e o que resulte na desaparição de nós do grafo da rede Limitações : • Consideramos que quando há uma falha, o grafo da rede fica único, i.e, não há partição na rede (o grafo é conexo) • Existe sempre um caminho entre dois nós • O emissor e o receptor ficam sempre activos
Soluções • Detecção de erros : • Detectado pelo receptor • Codificação da informação de maneira que qualquer alteração da mensagem pode ser verificada • Métodos como bits de paridade e CRC são muito usados • Se a mensagem foi corrompida, é rejeitada. • Supõe-se que os erros são detectados por mecanismos de detecção e falhas permanentes de um nó são detectadas por outros nós.
Soluções • Ordem e Entrega Garantida : • Um protocolo de comunicação oferece dois diferentes tipos de comunicação entre dois nós: • “connection-oriented” (TCP) : • Estabelece primeiramente uma conexão • Depois transfere a informação usando essa a conexão • “connection-less” (UDP) : • Cada mensagem contem o endereço de destino e é roteada independentemente das outras • É possível que alguma mensagem se perca, ou chegue fora de ordem no destino • Para suportar as propriedades desejadas, um serviço orientado à conexão é necessário
Soluções • Protocolos de entrega : • Muitos protocolos permitem a entrega de mensagem fiável • Uma família de protocolos conhecida é o RDT (Reliable Data Transfert) de 1.0 a 3.0 • Outra família de protocolos é o de “Sliding Windows” • “Go-Back-N” e o “Selective Repeat”
Protocolos de entrega • Rdt1.0 : • Implemente a transferência fiável sobre um canal fiável • Considera-se que não há erros e perda de pacotes • O remetente envia os dados no canal fiável • Exige-se a criação do pacote e o envia no canal não fiável • O destinatário recebe na saída desse canal e recupera os dados • O destinatário não envia informações ao remetente. • rdt_send() : os dados são transmitidos ã camada superior do receptor. • udt_send() : chamado por o protocolo rdt para a transferência dos pacotes sobre o canal não fiável • rdt_rcv() : chamado a chegada dos pacotes sobre o canal do lado do receptor • deliver_data() : chamado por o protocolo rdt para emitir os dados a camada superior
Protocolos de entrega • Rdt 2.0 : • Protocolo com um canal com erros mas sem perdas • O destinatario que recebeu correctamente um pacote envia um ACK • (acknowledge), ou em caso contrario um NAK (negative ACK). • O remetente implementa o protocolo “stop and wait”, o seja, fica a espera da recepção de um pacote ACK do destinatário antes de enviar os outros • Mas se o receptor recebe um NAK, ele ré-envia o pacote que • foi alterado • Vantagem : assegura uma transferência num canal com erros mas sem perdas • Defeito : se os ACK/NAK são alterados, o remetente pode retransmitir • pacote já enviados, então, como é que o emissor e o receptor gerar esses casos
Protocolos de entrega • Rdt 2.1 : • Protocolo com ACK e NAK alternados • Gera a duplicação dos pacotes • O emissor adiciona um numero de sequência nos pacotes • O receptor recebe um pacote que tem o mesmo numero que o precedente é que esse pacote é duplicado, então ele rejeita-o, senão envia um ACK • O receptor recebe um pacote corrompido ou um NAK, ele re-envia o ultimo pacote • Rdt 2.2 : • Protocolo sem NAK • Mesmas funcionalidades que o rdt 2.1 mas só usa o ACK • Em vezes do NAK, o receptor envia o ACK do ultimo pacote bem recebido • O receptor inclua o numero de sequência do ultimo pacote bem recebido • O emissor recebe um ACK duplicado significa que o ultimo pacote não foi bem recebido, e então a sua retransmissão é efectuada.
Protocolos de entrega • Rdt 3.0 : • Protocolo com canal com erros e perdas • O mais proximo da realidade • As soluções descritas precedentemente não são suficiente para gerar todos os casos • O emissor deve esperar um tempo razoável a chegada do ACK • O timeout deve no mínimo corresponder o tempo de ida e volta de um pacote entre os dois nó de uma rede • Se o timeout acabou-se e que não foi recebido o ACK, o pacote é retransmitido • Se o pacote chega, mas depois do timeout, a duplicação de dados pode ser resolvida com o uso de numero de sequência • Problema do rdt 3.0 é escolher um timeout correcto : • não acaba sempre antes da recepção • não fica a espera muito tempo • senão o desempenho protocolo é medíocre
“Sliding-Windows” • Características : • Melhoramento do rdt 3.0 • Satisfaz as duas propriedades e executa o controle de fluxo • “sending-windows” : o remetente possui uma lista de números sequenciais que correspondem às mensagens que ele é autorizado a enviar e contem as mensagens enviadas mas ainda não confirmadas, as quais uma retransmissão pode ser necessária. • Uma nova mensagem transmitida recebe o próximo maior número sequencial, e a parte superior da janela avança • Quando alguma ACK chega, a parte inferior da janela avança • Se o timeout acaba supõe-se que a mensagem foi perdida, e esta é retransmitida. • “receiving-windows” : o receptor mantém uma lista de números sequenciais das mensagens que ele está autorizado a receber • Uma mensagem recebida com número sequencial diferente é rejeitada • Uma mensagem com um número sequencial igual ao menor número da janela é recebido, então a parte inferior da janela avança, e um ACK desta mensagem é enviada ao emissor
“Sliding-Windows” • « Go-Back-N »: • O janela tem um tamanho máximo de N pacotes ainda não “ACKados” • O receptor pode enviar uma confirmação por vários pacotes • ACK(M) : confirma a recepção dos pacotes com um número de sequência inferior o igual a M • O emissor usa um timeout por os pacotes não “ACKados” • Timeout(M) : permite a retransmissão de todos os pacotes que são superior a M e na “sending-windows” • Problemas : • O receptor pode enviar “ACK” varias vez por um mesmo pacote • O receptor não tem buffer, e sabe unicamente o numero do pacote a seguir, então se ele recebe um pacote com um numero maior que o que ele pretende ele envia um “ACK”.
“Sliding-Windows” • « Selective Repeat » : • O emissor ré-envia unicamente os pacotes por quais ele não recebeu confirmação dentro do timeout • Se o emissor recebe o “ACK” por o mais pequeno pacote ainda não confirmado então a base da janela muda para o próximo pacote com um numero de sequência ainda não “ACKado” • O receptor confirma individualmente os pacotes correctamente recebidos, e se foram recebidos na ordem, mete os pacotes num buffer para mais tarde ser transmitidos a camada aplicativa.
”Routing Algorithms” • Características : • Decide qual é o caminho percorrido por uma mensagem para atingir seu destino com a maior eficácia • Um algoritmo de roteamento é usado numa rede para rotear mensagens do nó « i » para o nó « j » através do nó « k » • Se o nó « k » falha o algoritmo rotea as mensagens através de outro caminho • Para tratar falhas é necessário rotear de acordo com as mudanças na topologia da rede • Dois tipos de algoritmo : • conhecimento global da rede (Djikstra) • informação distribuída (Distance Vector)
Algoritmo de Dijkstra • Principios : • A topologia completa da rede e os custos de todos as ligações entre os nós são conhecidos. • O principio de este algoritmo é de calcular os caminhos mais curtos desde de uma fonte até todos os outros nos. • Parâmetros : • c(x, y) : custo do ligação do nó x o no y, +∞ se não é vizinho direito • D(v) : valor corrente do caminho do fonte ao destino v • p(v) : nó precedente de v no caminho da fonte a v • N′ : conjunto de nó por os quais o caminho mais surto é definitivamente conhecido • Iniciação : Algoritmo : • € : não pertence a Repetir • N′ = {u} Procurar w ε N' tal que D(w) seja minimal • Para todos os nos v Acrescentar w ao N' • Se v é vizinho de u Actualizar D(v) para todos vizinho v de w e € N′ • então D(v) = c(u, v) D(v) = min(D(v),D(w) + c(w, v)) • Senão D(v) = ∞ até que todos os nós sejam em N' • /* O novo custo por v é o antigo custo de v ou o custo do caminho mais curto para w mais o custo de w a v */
“Distance Vector” • Principios : • Ao principio, um nó só conhece o seus vizinhos direitos e o custo para eles. • As informações são trocadas graças a comunicação entre os nós do seus conhecimentos • Ao final o nó tem o conhecimento global da topologia da rede e do melhor caminho para todos o outros nós • A vantagem principal é que quando um no falha os vizinhos estão avisados e podem procurar outro caminho para o destinatário • Parâmetros : • Dx(y) : estimação do custo menor de x a y • Vector de distancia : Dx = [Dx (y) : y Є N] • O nó x conhece o custo para cada um dos seus vizinhos v : c(x, v) • O nó x mantém Dx = [Dx (y) : y Є N] • O nó x mantém também os vectores de distancias dos seus vizinhos • Para cada vizinho v, x mantém Dv = [Dv (y) : y Є N]
“Distance Vector” • Explicações Algoritmo : • Cada nó envia periodicamente a sua própria estimação do vector de distancia ao seus vizinhos • Quando um nó detecta uma mudança nó custo local, actualiza as informação e calcula novamente o vector de distancia • Quando um nó x recebe um novo vector de um vizinho, ele actualiza o seu próprio vector usando a equação de Bellman-Ford : • Dx(y) : minv{c(x, v) + Dv (y)}, V y Є N • e se necessário avisa os seus outros vizinhos • Problema : • As boas novidades repercutem-se depressa mas as más demoram muito tempo
Reliable Data Delivery • Conclusões : • A entrega fiável e segura de mensagens é assegurada por vários protocolos e algoritmos • Protocolos de roteamento garante a entrega (rede) • Protocolos de janela deslizante garante a ordem correta (transporte) • Para mais eficácia tem de se combinar soluções das vários camadas da topologia de redes. • Bibliografia : • www.fr.wikipedia.org • www.en.wikipedia.org • www.mathiaz.com/routage • www2.rad.com/networks/2004/sliding-windows • www.cse.ohio-state.edu/~sharpr/classes/667/applets • www.univ-orleans.fr/plone/...