2012-04-10 9 views
1

두 개의 개별 클라이언트 및 서버 응용 프로그램에서 Go N 프로토콜을 구현하려고합니다. 내 시퀀스 번호가 3 비트에 맞아야하므로 2^3 = 8 개의 최대 숫자와 2^3 - 1 = 7 창 크기라고 가정합니다.N 프로토콜로 돌아 가기

처음에는 전체 창을 보냅니다. 처음 두 개의 패킷 (0과 1)은 올바르게 수신됩니다. 패킷 2가 삭제됩니다. 수신기 (6)을 통해 패킷 (3)을 얻을 때, 0과 1이되었는지 이해, 그것은 2를 기다리고 있었다, 그래서 패킷이 보낸 사람이 처음 nack2를 받으면 2.

Sender  Receiver 
    0   0 
    1   1 
    2 (packet dropped) 
    3   nack2 
    4   nack2 
    5   nack2 
    6   nack2 

을 원하는 NACK을 말하고있어한다 피기 백 (piggybacking)을 통해 수신하고 창을 앞으로 이동 시키지만 순서 번호 2 (2-3-4-5-6- 및 아마도 7-0)에서 시작하여 창을 다시 보내야합니다. 보낸 사람이 두 번째 nack2를 받으면 이미 해당 패킷을 보냈습니다. 프로토콜 때문에, 보낸 사람은 다시 2를 포함하여 자신의 전체 창을 다시 보냅니다. 이제 수신기는 2 (및 기타)를받을 수 있지만 두 번째 nack2 일괄 처리에서는 2를 다시 수신합니다. 이는 순서가 맞지 않습니다. 예상 패킷을 잠그는 등의 작업을 수행해야합니다. 나는이 모든 가정들을 수정합니까?

내가있는 경우 Go N이 중지 및 대기보다 많은 패킷을 보내는 것처럼 보입니다. 특히 창 크기를 늘리면 더 많이 나타납니다. 나는 무엇을 얻지 못합니까?

답변

0

이 문제에서 발견 된 해결책은 단순히 시퀀스 번호를 나타 내기 위해 더 많은 비트를 사용하므로 MAX가 더 큽니다. MAX가 2 * Window 크기 인 경우, 지연된 2는 적절한 ACK로 잘못 해석 될 수 없습니다.