✅ ARQ란 ?
ARQ : Automatic Repeat Request의 약자로, 자동 반복 요청을 의미. 에러가 발생한 경우 재전송을 요구하는 방식
1. 정지 조회 방식(stop-and-wait)
A가 B에게 1개의 프레임을 전송하게 되면 B는 해당 프레임의 에러 유무에 따라 NAK 또는 ACK를 보내게 된다.
구현 방식이 단순하며 송신측내에 최대 프레임 크기의 버퍼를 1개만 잡아도 되나
송신측이 ACK 혹은 NAK를 받을 때까지 다음 프레임을 받을 수 없으므로 전송 효율이 떨어지는 단점이 있다.
2. 연속적 ARQ 방식
- Go-back-N 방식
- Selective Repeat 방식
- Adaptive 방식
✅ GBN(Go-back-N) 방식
한번에 여러 프레임을 보내고 하나의 긍정 확인 응답(ACK)을 받고 다음 데이터를 전송하는 방식
에러가 발생한 블록 이후의 모든 블록을 재전송하는 방식이다.
슬라이딩 윈도우 방식이라고도 한다.
GBN window size 크기가 2^m 보다 작아야 하는 이유
위의 그림과 같이 송신측에서 5개의 비트를 전송했고 수신측에서 보낸 ACK는 모두 유실됐다고 가정하자
a. 상황의 경우 ACK가 도착하지 않았으므로 이전의 0부터 재전송을 하게되는 반면,
b. 상황의 경우 송신측에서 그 전에 있던 0이 아닌 새로운 0(실제로는 다른 데이터지만, 넘버링은 반복됨)을 보내게 되어
수신측에서는 새로운 0을 그대로 처리하게 된다.
즉 window size = 2^m 이라면 기존의 0과 새로운 0이 모두 한 타임 안에 전송되는 상황이 벌어져 데이터가 유실된다.
✅ GBN 방식 장/단점
장점
구현이 간단하다.
- 송신자 입장에서는 응답이 오지 않은 패킷 중 가장 오래된 패킷 하나만을 관리하므로 패킷에 대한 타임아웃을 결정할
타이머를 하나만 관리하면 된다.
또한 GBN을 사용하면 윈도우 관리가 단순해지는데, 파이프라이닝 기법으로 GBN을 사용한다면 3가지 변수만 관리하면 된다.- window size - 응답을 받지 못한 패킷을 몇개까지 저장할 것인가를 결정하기 위한 것
- 응답 받지 못한 가장 오래된 패킷의 sequence number - 타임아웃을 발생시키고 재전송을 할 것인지 결정 (가장 중요)
- 윈도우에 아직 남아있는 여유 공간의 번호 - 응답 받지 못한 패킷을 저장하는 버퍼에 여유가 있을 때, 다음 패킷을 어디에
저장 할지를 결정하는 변수
- 수신자 입장에서는 손상되지 않은 패킷을 받았다면, 그 패킷의 sequence number를 확인해보고,
기대했던 sequence number라면 ACK를 보내고, 그렇지 않다면 discard 하는 것이다.
단점
GBN이 성능문제를 겪을 수 있는 상황이 생길 수 있다는 것이다.
특히 윈도 크기와 대역폭 지연 결과가 모두 클 때 많은 패킷이 파이프라인에 있을 수 있으며
고로 GBN은 패킷 하나의 오류 때문에 많은 패킷들을 재전송하므로 많은 패킷을 불필요하게 재전송하는 경우가 발생한다.
✅ SR(Selective Repeat) 방식
송신측에서 수신측으로 연속적으로 프레임을 전송하고, 수신측은 에러 검출 후 에러 발생시 프레임 정보를 NAK 신호를
송신측으로 전송한다. NAK 신호를 수신한 송신측은 에러가 발생한 프레임만 수신측으로 재전송한다.
Frame 2가 유실된 상태로 Frame 3을 전송했을 때 수신측은 NAK 2를 보내고 이를 수신한 송신측은 Frame 2만을
재전송할 수 있다.
SR의 window size를 2^m의 반 이하로 해야하는 이유
GBN과는 달리 유실된 프레임을 위한 버퍼 매니지먼트를 해야하기 때문이다.
b. 상황의 경우 0, 1, 2를 성공적으로 보냈으므로 다음으로 3 프레임을 보내야하는데, 0 프레임을 보내게 된다.
이때 사이즈가 크다면 이 프레임이 중복인지 새로운 데이터인지를 파악하기 어려워 확보된 공간에 저장해버린다.
a. 상황처럼 1/2로 줄인다면 2가 와야할 상황에 0이 왔을 때 버퍼에 저장할 공간이 없으므로 버리게 된다.
즉 window size가 커질수록 중복된 데이터가 저장되어 버리는 문제점이 생긴다.
✅ GBN vs SR 정리
📌 참고
'CS > 네트워킹' 카테고리의 다른 글
[네트워킹] 라우터, 스위치, 브릿지, 허브, 게이트웨이 (0) | 2022.02.11 |
---|---|
[네트워킹] 피기백(Piggyback) 방식 (0) | 2022.02.11 |
[네트워킹] ethernet 프레임 (0) | 2022.02.11 |
[네트워킹] 로드 밸런싱(Load Balancing) (0) | 2022.02.11 |
[네트워킹] UDP (0) | 2022.02.10 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!