stop-and-wait 프로토콜의 효율성이 떨어지는 문제를 해결하기 위해 파이프라이닝을 사용하였다.
파이프라이닝 시 오류 회복을 위한 방법으로 Go-Back-N 프로토콜과 Selective Repeat 프로토콜이 있다.
이 두 프로토콜은 순서 번호(sequence number)가 점점 커지도록 설계되어있다.
Go-Back-N(GBN, N부터 반복)
송신자는 ACK를 기다리지 않고 여러 패킷을 전송할 수 있다. 단, ACK를 받지 않은 패킷의 최대 허용 수는 N을 넘으면 안된다. 즉, N은 한 번에 보낼 수 있는 패킷의 최대 개수이다. 패킷에 대한 순서번호는 크기가 N인 윈도로 구현된다. 따라서 N을 윈도 크기라고 부른다.
송신측
GBN의 특징으로는 cumulative ACK(누적 확인 응답)을 사용한다는 것이다. N번에 대한 ACK가 도착했다면 수신측은 N번까지 잘 받았다는 뜻이다. 예를 들어 1, 2, 3, 4, 5번 패킷을 보냈을 때 3번에 대한 ACK가 도착했다면 1, 2, 3은 제대로 받았지만 그 이후는 제대로 받지 못했다는 뜻이다.
송신자는 N번에 대한 ACK 응답을 받으면 윈도의 시작을 N+1로 이동하며, N번에 대한 timeout이 발생한다면 N번부터 패킷 번호 윈도의 마지막 번호까지 재전송한다.
수신측
수신측은 ACK만을 사용하며, 맞는 순서 번호를 가진 패킷이 오류 없이 도착한다면 상위 계층에 패킷의 데이터 부분을 전달하고 N번에 대한 ACK를 전달한다. 그 외의 경우는 가장 최근에 제대로 전송된 패킷에 대한 ACK를 전달한다. 만약 순서가 다른 패킷을 전송받았다면 해당 패킷을 버리거나 받아서 버퍼에 저장한다.
Selective Repeat(SR, 선택적 반복)
이름에서부터 알 수 있듯이, 수신자가 제대로 받지 못한 패킷만을 재전송하는 프로토콜이다.
수신측은 수신한 패킷에 대한 ACK를 개별적으로 보내야 하고, 송신측은 타임 아웃된 패킷들을 각각 재전송해야 한다.
송신측과 수신측은 각각 크기가 N인 순서 번호 윈도를 가지고 있다.
송신측
GBN처럼 ACK를 받지 않고 N개까지 패킷을 전송할 수 있다.
타임아웃된 패킷이 있다면 해당 패킷만 재전송하고, 해당 패킷의 타이머를 재시작시킨다.
ACK를 받은 패킷이 윈도의 첫번째라면 윈도를 ACK 받지 않은 패킷의 번호까지 이동시키고, 다음 번호(전송한 패킷 중 가장 높은 순서 번호+1)의 패킷을 재전송한다.
수신측
받은 패킷에 대한 ACK를 각각 전송하고, 받은 패킷의 순서번호가 윈도의 첫번째 번호였다면 윈도를 받지 않은 패킷의 번호까지 이동한다.
'네트워크' 카테고리의 다른 글
(8) Reliable Data Transfer Protocol(rdt) (0) | 2024.04.12 |
---|---|
(6) DNS (0) | 2024.04.02 |
(5) E-mail (0) | 2024.03.31 |
(4) HTTP 메시지 포맷, 쿠키와 웹 캐시, HTTP/2 (0) | 2024.03.05 |
(3) TCP와 UDP, HTTP (0) | 2024.02.21 |