certification/정보처리산업기사

[Network] ARQ

gaing 2024. 10. 20. 02:15

ARQ(Automatic Repeat Request)

자동 재전송 요청을 의미하며, 데이터 통신에서 오류가 발생했을 때 데이터의 신뢰성을 보장하기 위한 메커니즘

 

송신된 데이터에서 오류가 감지되거나, 송신자가 ACK를 받지 못했을 때 자동으로 재전송을 요청하는 방식이다.

이를 통해 네트워크 상에서 데이터 무결성을 보장하고, 오류가 있는 데이터를 수신자에게 올바르게 전달할 수 있게 해준다.


용어 정리

  • ACK(Acknowledge) : 수신 측에서 이상 없이 프레임을 받았을 경우에 보내는 확인 응답
  • NAK(Negative Acknowledge) : 프레임을 제대로 전송받지 못한 경우 송신 측에서 보내는 신호

ARQ의 종류

Stop-and-Wait ARQ 방식

수신 측으로부터 ACK를 받을 때까지 대기하는 방식
  • 한 번에 하나의 데이터 패킷만을 전송하고, 송신자는 수신자의 ACK를 받을 때까지 대기한다.
  • 만약, ACK가 도착하지 않으면 일정 시간 후 데이터를 재전송한다.
  • 데이터 프레임의 정확한 수신 여부를 매번 확인하면서 다음 프레임을 전송해나가는 가장 간단한 오류 제어 방식이다.
  • 구현이 간단하고 송신 측에서 최대 프레임 크기의 버퍼가 1개만 있어도 된다.
  • 응답이 올 때까지 대기해야 하므로 네트워크 지연 시간이 길어질 수 있다.
  • 응답을 기다리는 동안 대역폭이 사용되지 않는다는 점에서 효율이 떨어진다.

동작 원리

  1. 송신자는 하나의 패킷을 전송한다.
  2. 수신자는 패킷을 받고 오류 검증을 한다.
  3. 오류가 없으면 수신자는 ACK를 보내고, 송신자는 다음 패킷을 전송한다.
  4. 오류가 있거나 ACK가 수신되지 않으면, 일정 시간이 지나 송신자가 해당 패킷을 재전송한다.

 

Go-back-N ARQ 방식

오류가 난 지점부터 전송한 지점까지 모두 재전송하는 방식
  • Stop-and-Wait ARQ를 개선한 방식이다.
  • 송신자는 여러 개의 패킷을 연속적으로 전송할 수 있으며, 수신자가 NAK 또는 오류가 발생한 특정 패킷 이후의 데이터를 모두 재전송하는 방식이다.
  • 이 방식에서는 송신자는 수신자에게 ACK를 받을 때까지 연속된 패킷을 전송할 수 있지만, 오류가 발생하면 해당 오류 이후의 모든 패킷을 다시 전송해야 한다.
  • 하나의 패킷에서 오류가 발생하면, 그 이후의 모든 패킷을 다시 전송해야하므로 비효율적일 수 있다.

동작 원리

  1. 송신자는 N개의 패킷을 연속적으로 전송할 수 있다.
  2. 수신자는 각 패킷에 대해 오류를 검사하고, 오류 없는 패킷에 대해 ACK를 보낸다.
  3. 만약 특정 패킷에서 오류가 발생하면, 수신자는 해당 패킷을 수신하지 못했다고 NAK를 보낸다.
  4. 송신자는 오류가 발생한 패킷 이후의 모든 패킷을 다시 전송한다.

 

Selective Repeat ARQ 방식

연속적으로 데이터 프레임을 전송하고 에러가 발생한 데이터 프레임만 재전송하는 방식
  • Go-back-N ARQ의 단점을 해결한 방식이다.
  • 수신자는 각 패킷을 순서에 상관없이 개별적으로 ACK 응답을 보내고, 송신자는 오류가 있는 패킷만 선택적으로 재전송한다.
  • 이 방식은 데이터 전송 중 발생할 수 있는 비효율적인 재전송을 최소화하는 것이 목표이다.
  • 각 패킷에 대해 개별적으로 ACK를 처리해야 하므로, 복잡한 구현이 필요하다.

동작 원리

  1. 송신자는 N개의 패킷을 연속적으로 전송한다.
  2. 수신자는 각 패킷에 대해 개별적으로 ACK를 보낸다.
  3. 만약 특정 패킷에서 오류가 발생하면, 그 패킷만 재전송을 요청한다.
  4. 송신자는 수신자에게 NAK 또는 ACK 미수신특정 패킷만 재전송한다. 

연속 재전송을 하는 두 방식의 비교

구분 Go-back-N ARQ Selective Repeat ARQ
에러 발생 시 손상된 프레임의 이후부터 모두 재전송 손상된 프레임만 재전송
구현 난이도 구조가 비교적 간단하며 구현이 쉬움 프레임의 재배열을 구현하기 어려움
버퍼 유무 데이터를 폐기하기 때문에 큰 버퍼 요구 X 프레임 재배치로 인한 큰 버퍼 요구

 


 

참고 자료

velog