두 개의 개별 클라이언트 및 서버 응용 프로그램에서 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이 중지 및 대기보다 많은 패킷을 보내는 것처럼 보입니다. 특히 창 크기를 늘리면 더 많이 나타납니다. 나는 무엇을 얻지 못합니까?