To Dare Is To Do!
컴퓨터 네트워크 면접 질문(4)-신뢰적 데이터 전송 본문
전송 후 대기 프로토콜이란?
- 자동 재전송 요구(Automatic Repeat reQuest, ARQ)라고도 불린다.
송신자는 한 번에 하나의 데이터 패킷만 전송하고 그 패킷에 대한 확인 응답(ACK)을 받을 때까지 기다린다.
수신자로부터 확인 응답이 도착하면 송신자는 다음 패킷을 전송하게 된다.
만약 일정 시간 내에 확인 응답을 받지 못하면 해당 패킷을 다시 전송하는 과정을 가진다.
과정
송신자
1) 세그먼트 송신 후 복제본을 버퍼에 유지한다.
2) 재전송 타이머를 시작한다.
3) 타이머 종료 전에 ACK(확인 응답) 수신 시, 복제본을 폐기하고 타이머를 종료한다.
4) 타이머 종료 전까지 ACK를 수신하지 못한다면 세그먼트 재전송 후 타이머를 재시작한다.
수신자
정상 세그먼트 수신 시 ACK를 회신하며 이외에는 다른 역할을 하지 않는다.
터를 전송하지 않는다.
이 때
- 수신자의 긍정적인 확인 응답이 손상되어 송신자가 다시 같은 패킷을 보낸다면
- 송신자의 전송한 패킷의 순서가 바뀌어 수신자에게 전달된다면
수신 측에서는 중복된 패킷을 구분하기 위한, 패킷의 순서를 판단하기 위한 기준이 필요하다.
이를 위해 보완하기 위해서 각 세그먼트의 헤더에 순서번호(SN: Squence Number)를 할당하여 위의 오류에 대한 기준을 마련한다.
하지만
신뢰적인 데이터 전송을 위해 Stop and Wait 프로토콜을 사용하다보면
송신자가 수신자의 확인 응답을 받은 후에 다음 패킷을 전송하다보니 오랜 시간을 소비할 가능성이 높아지며 이 시간동안 연결된 링크를 비워두기 때문에 네트워크의 효율성을 저하시킨다.
만약 송수신 간 데이터가 손실되는 문제가 발생한다면 설정한 타이머 시간까지 추가되어 이 문제는 더욱 악화될 것이다.
이런 이슈는 파이프라인 프로토콜을 통해 해결할 수 있다.
파이프라인 프로토콜 (Pipeline Protocol)
송신자는 여러 개의 패킷을 연속적으로 전송할 수 있으며 각 패킷에 대해 수신자의 확인 응답을 기다리지 않고 계속해서 다음 패킷을 전송한다.
=> 세그먼트를 보내고 ACK가 회신되기 전의 시간(RTT)동안 M개의 세그먼트를 전송한다.
물론 파이프라이닝에서도 패킷 손상과 손실, 순서가 맞지 않는 전송이 발생할 수 있다.
이러한 오류에 대한 접근 방법으로 Go-Back-N (GBN)과 Selective Repeat(SR)이 존재한다.
Go-Back-N (GBN)
오류 세그먼트부터 이후의 모든 세그먼트를 재전송한다.
송신자
1) ACK가 회신되는 RTT 동안 연결된 링크에 최대 M(송신 윈도우)개의 세그먼트를 전송하고 이들을 버퍼에 유지한다.
송신 윈도우 :
- 송신자가 보내는 최대 데이터의 양
=송신 가능한 순서번호의 범위
=송신 후 버퍼에 유지되어야 할 세그먼트 범위
2)ACK를 수신하면 해당되는 세그먼트를 버퍼에서 제거하고 송신 가능한 순서번호가 1씩 이동(증가)한다.
=> 송신 윈도우 슬라이딩
3) 세그먼트 재전송 타이머가 종료될 때까지 ACK가 수신되지 않으면 해당 세그먼트부터 송신 윈도우의 양(버퍼에 있는 데이터의 양)만큼의 모든 세그먼트를 재전송한다.
수신자
순서번호(n-1)의 세그먼트를 정상적으로 수신하면 순서번호 n에 대한 ACK를 회신
수신된 세그먼트에 오류가 있다면(비정상적으로 수신) 가장 최근에 올바르게 수신된 세그먼트에 대한 ACK를 보내고 이외의 수신된 세그먼트는 폐기한다.
GBN의 장단점
GBN은 파이프 라이닝을 가능하게 하여, 링크 이용률을 높여준다
하지만, GBN에서 패킷이 손실되면 N개 만큼의 패킷을 불필요하게 재전송 하는 단점이 존재한다.
네트워크에 손실이 많이 발생할수록 네트워크 파이프 라인(링크)는 불필요한 재전송 패킷으로 채워진다는 단점이 있다.
Selective Repeat(SR) - 선택적 반복
오류 세그먼트만 재전송한다.
송신자
1) ACK가 회신되는 RTT 동안 링크에 송신 윈도우 크기만큼 세그먼트를 전송한다.
2) 누적 ACK를 수신하면 송신 윈도우를 누적 ACK 수만큼 이동시킨다.
누적 ACK : 송신 윈도우 내에서 누적적으로 순서 번호가 맞는 ACK
ex) 1,2,3,4 다음에 5번 ACK를 받음
3) 비누적 ACK를 수신하면 해당 세그먼트의 ACK 수신 사실을 기록한다.
비누적 ACK : 송신 윈도우 내에서 누적적으로 순서 번호가 맞지 않는 ACK
ex) 1,2,3,4 다음에 6번 ACK를 받음
4) 세그먼트 재전송 타이머가 종료될 때까지 ACK가 수신되지 않으면 해당 세그먼트를 재전송한다.
수신자
1) 송신 윈도우와 동일한 크기의 수신 윈도우를 유지한다.
2) 누적 정상 세그먼트를 수신하면 ACK를 회신하고 누적 정상 세그먼트 수만큼 수신 윈도우를 이동시킨다.
3) 비누적 정상 세그먼트를 수신하면 ACK를 회신하고 해당 세그먼트를 버퍼에 유지한다.
=> 파이프라인 프로토콜은 효율성이 높고, 네트워크 자원을 더 잘 활용할 수 있어 대규모 데이터 전송에 적합하다.
'네트워크' 카테고리의 다른 글
컴퓨터 네트워크 면접 질문(5) (0) | 2024.09.08 |
---|---|
컴퓨터 네트워크 면접 질문(4)-TCP (0) | 2024.09.04 |
컴퓨터 네트워크 면접 질문(4)-UDP (0) | 2024.09.02 |
컴퓨터 네트워크 면접 정리(3)-네트워크/서버 아키텍처 (0) | 2024.08.29 |
컴퓨터 네트워크 면접 정리(3)-웹 관련 개념 및 프로토콜 (0) | 2024.08.26 |