계속 공부하며 업데이트 할 것
근데 이게 윈도우 조정 방식을 곁들인
ACK를 받지 못하면 송신 측에서 타임아웃이 발생하고, 해당 패킷을 재전송하게 됩니다. 하지만 Go-Back-N (GBN)과 Selective Repeat (SR)에서 재전송 방식과 윈도우 조정 방식이 다릅니다.
GBN에서 송신자는 타임아웃이 발생하면 send_base부터 그 이후의 모든 패킷을 다시 재전송합니다. 예를 들어, 패킷 1, 2, 3을 보냈는데 패킷 2에 대한 ACK를 받지 못하면, 송신자는 2, 3을 모두 재전송합니다.
윈도우 조정은 별도로 일어나지 않습니다. 타임아웃이 발생할 때까지 윈도우는 그대로 유지되고, 송신자는 재전송 후에 다시 ACK를 기다리게 됩니다. 즉, 윈도우는 고정된 크기를 유지하고, 재전송 시에도 그 크기 안에서 전송됩니다. 패킷이 올바르게 ACK될 때까지 윈도우의 경계(send_base)는 이동하지 않습니다.
SR에서는 타임아웃이 발생한 개별 패킷만 재전송됩니다. 예를 들어, 패킷 1, 2, 3을 보냈는데 패킷 2에 대한 ACK를 받지 못하면, 패킷 2만 재전송하고, 패킷 3에 대한 ACK는 그대로 인정됩니다.
SR에서도 윈도우 크기 자체는 고정되어 있지만, ACK가 도착할 때마다 send_base가 앞으로 이동하고, 새 패킷을 보낼 수 있는 공간이 생깁니다. ACK가 순서대로 오지 않아도 각각의 패킷을 개별적으로 관리하기 때문에, 타임아웃이 발생한 패킷만 재전송되고 윈도우는 계속해서 움직입니다.
따라서 GBN 방식에서 윈도우는 재전송 시점에 조정되지 않고, ACK가 순차적으로 도착해야 윈도우가 앞으로 이동합니다.
send_base에 해당하는 가장 먼저 전송된 패킷에 대해 돌아갑니다.send_base부터 윈도우 안에 있는 모든 패킷을 재전송합니다.send_base가 앞으로 이동하고, 타이머는 다시 새로 설정됩니다.즉, GBN은 윈도우 내의 첫 번째 패킷에 대한 타이머 하나만 사용합니다. 송신 측은 send_base부터 ACK를 받지 못한 패킷들을 재전송하게 되고, ACK가 순서대로 도착할 때만 윈도우가 움직이며 타이머도 다시 설정됩니다.
SR에서는 윈도우 크기만큼의 타이머가 동시에 돌아가게 됩니다. 각 패킷이 독립적으로 재전송되기 때문에, 개별 패킷의 타이머가 중요합니다.
send_base에 대해 동작합니다. 타임아웃이 발생하면 send_base부터 모든 패킷을 재전송합니다.이 차이가 두 프로토콜의 효율성과 복잡도 차이를 만듭니다. GBN은 구현이 상대적으로 간단하지만, 재전송 비용이 크고, SR은 복잡하지만 효율적인 재전송을 할 수 있는 방식입니다.