O documento descreve um protocolo de comunicação entre emissor e receptor chamado ProtocolWith Timer. Nele, o emissor envia pacotes de dados continuamente ao receptor, assumindo que serão recebidos com sucesso. Caso o receptor não receba um ACK no tempo esperado, o emissor reinicia a transmissão de todos os pacotes. O protocolo foi modelado em Redes de Petri Coloridas usando a ferramenta CPNTools.
2. Protocolo com Temporizador Desenvolvido e Mantido por: Kurt Jensen, Universidade de Aarhus, Dinamarca (kjensen@daimi.au.dk).
3. Protocolo com Temporizador É um protocolo baseado em transmissão de dados, onde existe um emissor e um receptor. O protocolo é otimista, ele assume que cada pacote será recebido com sucesso e, portanto, imediatamente continua a enviar o pacote que lhe suceda. O “ProtocolWith Timer” possui algumas semelhanças com alguns outros protocolos como é o caso do “SimpleProtocol” e do “TimedProtocol”, mas não se engane, cada um tem caracteristicas distintas.
4. Protocolo com Temporizador O modelo deste protocolo foi modelado em Redes de Petri Colorida utilizando a ferramenta CPNTools.
6. Declarações da Rede colset INT = int; colset DATA = string; colsetINTxDATA = product INT * DATA; var n, k: INT; var p, str: DATA; Val stop = “########”; colset Ten0 = intwhith 0..10; colset Ten1 = intwhith 1..10; var s:Ten0; var r: Ten1; fun OK(s:Ten0, r:Ten1) = (r<=s);
17. O Lugar Send A ligação<n=1,p="Modellin"> está habilitada. Quando a ligação ocorre uma ficha é adicionada no lugar A. Isto representa que o pacote (1,"Modellin") é enviado para a rede. O pacote não é removido do lugar Send e o contador do lugar NextSend é incrementado indicando qual é o próximo pacote. No nosso caso, ligação<n=2,p=“g and An">
19. A função “ ok ” A função Ok(s,r) checa se r ≤ s. Para r ∈1. .8, Ok(s,r)=true. A ficha é movida de A para B. Isto significa que o pacote é transmitido com sucesso. Para r ∈ 9. .10, Ok(s,r)=false. Nenhuma ficha é adicionada em B. Isto significa que o pacote é perdido. O simulador CPN faz escolhas aleatórias entre ligações: 80% de chance para transferir com sucesso.
20. Pacote Recebido O número do pacote chegando “n” e o número do pacote esperado “k” são comparados. O dado no pacote é concatenado ao dado já recebido. O contador NextRec é incrementado em um. If n = k (n,p) Str^p If n = k
21. Pacote Perdido Se o pacote que chegou “n” é diferente do pacote esperado “k” o pacote é perdido. If n = k (n,p) If n = k
22. Envio do ACK Diferentemente do SimpleProtocolo ProtocolWith Time só envia o ACK quando envia o pacote de stop (8,“########") . Aqui ele testa se p=stop e n<k. Em caso verdadeiro envia uma ficha para o lugar C. e caso seja falso ele não envia nada.
23. Transmitindo o ACK O protocolo da rede também considera que o ACK também pode ser perdido. Neste caso é feito o teste com a função ok(s,r) no caso verdadeiro o ack é recebido, e nocaso de ser falso o ack também é perdido.
24. O Temporizador Quando Send envia o ultimo pacote (8,“########“), ele adiciona um token com o valor 0 em Count (no temporizador), habilitando assim a transição Clock Tick. Fica esperando o recebimento do ACK. Cada ocorrência desse transição aumenta a contagem (ou seja, a contagem do valor do token). Quando a contagem atinge um limite pré-definido (no nosso caso”8”) de transição do Relógio Tickdeixa de ser habilitado. 8
25. O Temporizador Quando a contagem atinge o limite pre- estabelecido o alarme de transição torna-se habilitado, e se a confirmação ACK não tiver chegado. O Alarm dispara colocando o token com o valor 1 no lugar NextSend, ou seja, ele reinicia uma retransmissão de todo o conjunto de pacotes. Mas caso o ACK tiver chegado nesse periodo a trasnmissão é concluida. 8 Alarm 1