Skip to main content

Command Palette

Search for a command to run...

ARQ protocol in Transport Layer (2/2)

전송계층의 ARQ 프로토콜

Updated
29 min read
ARQ protocol in Transport Layer (2/2)

Contents


1️⃣ 단순 프로토콜 (Simple Protocol)
2️⃣ 정지-대기 프로토콜 (Stop-and-Wait-Protocol)
3️⃣ N-프레임-후퇴(Go-Back-N) 프로토콜
4️⃣ 선택적 반복 (Selective Repeat) 프로토콜
5️⃣ 피기배킹(Piggy-backing)


ARQ 프로토콜(Automatic Repeat reQuest protocol)은 전송 계층에서 데이터 전송의 신뢰성을 보장하기 위해 사용되는 오류 제어 프로토콜(error control protocol)이다. 데이터 전송 중 오류가 발생하거나 패킷이 손실되었을 때, 수신자가 송신자에게 재전송 요청(retransmission request)을 보내 데이터가 정확히 전달되도록 한다. ARQ프로토콜은 크게 4가지로 나뉜다. 이 프로토콜 덕분에 네트워크 환경에서 데이터가 손실되거나 손상될 가능성이 높은 상황에서도 신뢰할 수 있는 통신이 가능해지게 된다. 이번 시간에서는 전송계층의 오류제어가 어떻게 발전되어 왔는지 대해서 큰 흐름을 공부해본다.

  • 단순 프로토콜 (Simple Protocol)

  • 정지-대기 ARQ (Stop-and-Wait ARQ)

  • Go-Back-N ARQ

  • Selective Repeat ARQ


1️⃣ 단순 프로토콜 (Simple Protocol)

💡요약: 단순 프로토콜(Simple Protocol)은 송신자가 데이터를 보내고, 수신자는 이를 즉시 처리할 수 있다고 가정하는 방식으로, 오류 제어나 흐름 제어가 없는 간단한 프로토콜이다. 주로 네트워크 초기에 간단한 통신이 필요할 때 사용되며, 연결 설정 및 오류 재전송 과정이 없어 효율적이지만 안정성은 낮다는 단점이 있다.

  • 비연결형 프로토콜(connectionless protocol): 단순 프로토콜은 수신 측에서 별도의 수신 확인을 보내거나, 송신 측에서 데이터를 재전송하는 등의 과정이 없다.

  • 흐름제어 없음(no flow control): 데이터를 보내는 속도나 양을 제어하지 않고, 단순히 데이터를 전송한다.

  • 오류제어 없음(no error control): 오류가 발생하더라도 재전송하지 않으며, 데이터가 손상되지 않는다고 가정한다.

  • 즉시 처리 가능한 가정(assumption of immediate processing): 수신자가 수신한 패킷을 즉시 처리할 수 있다고 가정한다.

💡예시상황: 두 친구 A와 B가 서로 편지를 주고받는 상황이라고 하자. A는 B에게 "안녕"이라고 적은 편지를 보냈다.

  • 송신 과정: A는 편지를 쓰고, 바로 우편함에 넣는다. 편지가 B에게 도착하기 전이나 도착했는지 여부에 대해 A는 알 수 없다.
  • 수신 과정: B는 편지를 받으면 바로 편지를 읽고 끝낸다. 만약 편지가 손상되거나 잃어버렸더라도 A는 알 수 없다.

단순 프로토콜의 흐름도🔽

단순 프로토콜(Simple Protocol)흐름 제어(Flow Control)오류 제어(Error Control)가 없는 매우 단순한 데이터 전송 방식이다. 송신자가 데이터 전송을 요청하면 패킷을 보내고, 수신자는 이를 바로 받아들인다 (핑크색 화살표 참조). 중간에 오류가 발생하더라도 재전송이 없고, 단순히 전송과 수신 과정만 이루어진다.

  • 송신자(Sender)는 전송 계층에서 데이터 전송 요청(Request)을 받으면 패킷을 수신자에게 전송한다.

  • 수신자(Receiver)는 송신자로부터 온 패킷을 즉시 받아들이고 처리한다.

  • 중간에 패킷 손실이나 오류가 발생하더라도 다시 보내지지 않으며, 오류 제어(Error Control)흐름 제어(Flow Control)가 없다.

  • 시간(Time)의 흐름에 따라 송신자가 연속적으로 패킷을 전송하고 수신자가 이를 순차적으로 받는 구조이다.

💡분홍색 화살이 아래로 기울어져 있는 이유시간(Time)의 흐름을 나타내기 위함이다. 패킷이 송신자로부터 수신자에게 전송되는 과정에서의 시간 경과를 보여주며, 전송이 즉시 이루어지는 것이 아니라 약간의 지연(Delay)이 존재함을 알수 있다. 실제 네트워크에서는 데이터가 전송되면서 여러 요소로 인해 시간이 걸리기 때문에, 이러한 시간 차이를 시각적으로 표현한 것이다.

💡예시상황: 두 사람이 카카오톡으로 간단히 채팅한다고 가정하자. 한 사람이 메시지를 보내면 다른 사람은 그냥 메시지를 읽는다.

  • 전송 과정: 첫 번째 사람은 "안녕하세요"라고 메시지를 보내고, 상대방이 메시지를 읽었는지 확인하지 않고 다음 메시지를 보낸다.

  • 수신 과정: 상대방은 메시지를 받자마자 읽는다. 중간에 메시지가 손실되거나 도착하지 않으면, 두 사람은 그 사실을 알지 못하고 대화가 진행된다.


2️⃣ 정지-대기 프로토콜 (Stop-and-Wait-Protocol)

💡요약: 정지-대기 프로토콜(Stop-and-Wait Protocol)은 송신자가 한 번에 하나의 패킷만 보내고, 수신자로부터 확인 응답(ACK)을 받을 때까지 기다리는 방식으로 흐름 제어(Flow Control)오류 제어(Error Control)를 제공한다. 이를 통해 데이터 전송의 신뢰성을 보장할 수 있게 된다. 송신자는 타이머를 설정하여 ACK를 기다리며, 타이머가 만료되면 오류로 간주하고 재전송한다.

  • 슬라이딩 윈도우(Sliding Window) 크기가 1로 설정되어, 송신자는 한 번에 하나의 패킷만 전송하고, 수신자로부터 확인 응답(ACK)을 받을 때까지 대기한다.
  • 송신자가 패킷을 전송한 후, 확인 응답(Acknowledgement, ACK)을 받을 때까지 다음 패킷을 전송하지 않는다. (흐름제어 Flow Control)

  • 수신자는 패킷을 받으면 검사 필드(Checksum)를 통해 오류를 확인한다. 오류가 없는 경우에만 송신자에게 ACK를 보낸다. 만약 오류가 있으면 패킷을 조용히 폐기(Silent Discard)하며, 송신자에게 부정 응답(NACK)을 보내지 않는다. 송신자는 타이머를 통해 일정 시간 동안 ACK가 도착하지 않으면 패킷이 손실되었다고 판단하고 재전송을 시도하게 된다. (오류 제어 Error Control)

  • 타이머(Timer): 송신자는 패킷 전송 후 특정 시간 동안 ACK를 기다리며, 타이머가 끝날 때까지 응답이 없으면 오류가 발생했다고 가정하고 패킷을 재전송하게 된다.

💡예시상황: 두 컴퓨터 A와 B가 파일을 전송한다고 가정해보자

  • 전송 과정: 컴퓨터 A는 첫 번째 파일 조각을 컴퓨터 B에게 보낸다.

  • 수신 및 응답: 컴퓨터 B가 파일 조각을 받으면 검사 후 이상이 없을 시 확인 응답(ACK)을 A에게 보낸다. 오류가 있는 경우 B는 조용히 패킷을 폐기한다.

  • 타이머와 재전송: 만약 A가 B의 ACK를 타이머가 만료될 때까지 응답을 받지 못하면, A는 해당 파일 조각을 재전송하게 된다.


정지-대기 프로토콜(Stop-and-Wait Protocol)의 동작 방식

💡요약: 송신자가 한 번에 하나의 패킷만 전송하고, 수신자로부터 확인 응답(ACK)을 받을 때까지 다음 패킷을 전송하지 않는 방식으로, 신뢰성 있는 데이터 전송을 보장한다. 송신자는 타이머(Timer)를 설정하여 ACK를 기다리며, 시간 내에 ACK를 받지 못하면 해당 패킷을 재전송하게 된다. 수신자는 오류가 있는 패킷을 조용히 폐기하고, 순서에 맞는 패킷만 받아들인다.

  • 송신 윈도우(Send Window): 송신자는 한 번에 하나의 패킷만 보내고, 그 패킷에 대한 확인 응답(ACK)을 받기 전까지는 다음 패킷을 보내지 않는다.

  • 수신 윈도우(Receive Window): 수신자는 순서대로 도착한 패킷만 받아들이며, 순서에 맞지 않거나 오류가 있는 패킷은 조용히 폐기(Silently Discard)한다.

  • 타이머(Timer): 송신자는 패킷을 보낸 후, 일정 시간 동안 ACK를 기다리게 된다. 타이머가 만료되면 ACK가 도착하지 않았다고 판단하고 해당 패킷을 재전송한다.

  • 순서 번호(seqNo)확인 번호(ackNo): 송신자는 각 패킷에 고유한 순서 번호(seqNo)를 부여하며, 수신자는 ACK 응답 시 해당 패킷의 순서 번호를 확인 번호(ackNo)로 되돌려 보낸다. 이를 통해 송신자는 올바른 패킷이 도착했는지 확인할 수 있게 된다.

  • 논리 채널(Logical Channel): 송신자와 수신자 간의 통신 경로를 의미하며, 패킷과 ACK가 이 논리 채널을 통해 오간다.

  • Checksum: 패킷의 오류를 검사(Error Detection)하는 역할을 한다. 예를 들어, 송신자가 패킷을 보낼 때 데이터 합계가 1234라면, 수신자가 받은 데이터도 1234이어야 한다. 값이 다르면 오류가 발생한 것이다.


순서 번호(Sequence Number)와 확인응답번호(Acknowledgement Number)의 역할

💡요약: 순서 번호(Sequence Number)확인응답번호(Acknowledgement Number)정지-대기 프로토콜(Stop-and-Wait Protocol)에서 데이터의 순서를 관리하고, 중복된 데이터 수신을 방지하는 오류 제어 역할을 한다. 순서 번호는 패킷의 순서를 식별하고, 확인응답번호는 수신자가 다음에 받을 패킷을 명확히 알려준다. 이 번호들은 데이터 전송 중 패킷의 순서를 추적하고, 신뢰성을 보장하기 위한 중요한 요소이다.

☑️순서 번호(Sequence Number)

  • 역할: 중복 수신을 방지하기 위해 사용된다.

  • 송신자는 패킷의 순서를 관리하기 위해 패킷 헤더에 순서 번호 필드를 추가한다(seqNo)

  • 수신자가 특정 순서 번호를 가진 패킷을 수신하면, 그 다음 패킷에는 순서 번호 + 1이 할당된다. 예를 들어, x번 순서 번호를 수신한 후, 다음 패킷은 x+1번이 된다.

  • 정지-대기 프로토콜에서는 모듈로-2 연산(modulo-2 operation)을 통해 1비트 필드만 사용하므로, 0과 1을 번갈아 사용하여 간단하게 순서를 구분한다.

☑️확인응답번호(Acknowledgement Number)

  • 역할: 수신자가 송신자에게 다음으로 기대하는 패킷의 순서 번호를 알려주는 번호이다.

  • 예를 들어, 수신자가 순서 번호 0번 패킷을 받았다면, 다음 패킷은 순서 번호 1번을 기대하게 된다. 따라서, 수신자는 ACK를 보낼 때 다음 패킷의 순서 번호를 확인응답번호로 전송하여 송신자가 정확한 패킷을 보낼 수 있게 한다.

💡예시상황: 컴퓨터 A가 컴퓨터 B로 데이터를 전송한다고 가정해보자.

  • 전송 과정: 컴퓨터 A는 순서 번호 0을 가진 패킷을 B에게 보낸다.

  • 수신 및 응답: 컴퓨터 B가 패킷 0번을 성공적으로 받으면 확인응답번호(ACK)를 1로 설정하여 A에게 보낸다. 이는 B가 다음으로 순서 번호 1의 패킷을 기대한다는 의미이다.

  • 다음 패킷 전송: A는 B의 ACK 1을 받으면, 다음으로 순서 번호 1을 가진 패킷을 B에게 보낸다.


정지-대기 프로토콜(Stop-and-Wait Protocol)의 동작 과정

💡요약: 아래 동작 과정은 송신자가 하나의 패킷을 보내고 수신자로부터 확인 응답(ACK)을 받을 때까지 기다리는 방식으로 동작하며, 패킷이 손실되었을 경우 타이머에 의해 재전송되는 과정을 포함한다.

  • 패킷 전송과 ACK 수신: 송신자는 순서 번호(Sequence Number)가 0인 패킷(Package 0)을 보내고, 수신자로부터 확인 응답 ACK 1을 받는다. 이를 통해 패킷 0이 성공적으로 도착했음을 알 수 있다.

  • 패킷 손실과 재전송: 송신자가 순서 번호 1인 패킷(Package 1)을 전송했으나, 네트워크 문제로 인해 패킷이 손실되었다. 송신자는 설정된 타이머(Timer)가 만료되면 패킷 1을 다시 전송하게 된다.

  • 중복 패킷 처리: 송신자가 순서 번호 0인 패킷을 다시 전송하였으나, 해당 패킷이 중복으로 도착했음을 수신자는 인지하고, 이를 조용히 폐기(Silently Discard)하게 된다. 이는 송신자가 이미 패킷을 받은 것으로 가정하고 처리를 완료했음을 의미한다.

  • 타이머 설정과 재전송: 송신자는 패킷을 보낼 때마다 타이머를 설정하고, 수신자가 응답을 보내지 않으면 해당 패킷을 다시 보내게 된다.

💡예시상황: 컴퓨터 A가 컴퓨터 B로 데이터를 전송한다고 하자.

  • 전송 과정: A는 첫 번째 데이터 조각(순서 번호 0)을 B에게 보낸다.

  • 수신 및 ACK 응답: B는 데이터를 수신하고 ACK 1을 A에게 보낸다.

  • 패킷 손실: A가 두 번째 데이터 조각(순서 번호 1)을 보냈으나, 패킷이 손실되었다.

  • 타이머와 재전송: A는 ACK가 도착하지 않아 타이머 만료 후 패킷 1을 다시 전송한다.

  • 중복 패킷 처리: 만약 A가 다시 패킷 0을 보낸다면, B가 이를 중복으로 인지하여 폐기하게 된다.


정지-대기 프로토콜(Stop-and-Wait Protocol)의 장단점

💡요약: 송신자가 하나의 패킷을 전송하고, 수신자의 확인응답(ACK)을 받을 때까지 기다리는 방식은 단순하고 구현이 쉬워 데이터의 신뢰성을 보장하는 장점이 있지만, 낮은 네트워크 효율성과 전송 속도 저하, 지연 시간 증가로 인해 대역폭이 큰 네트워크에는 적합하지 않다는 단점이 있다.

장점

  1. 구현이 단순함:

    • 정지-대기 방식은 기본적으로 하나의 패킷을 전송하고 ACK를 기다리는 구조이므로 프로토콜의 구현이 매우 간단하다.

    • 이는 네트워크 초보자나 기본적인 데이터 전송 환경에서 쉽게 사용할 수 있다.

  2. 데이터의 신뢰성 보장:

    • 매번 패킷 전송 후 확인응답을 받기 때문에, 패킷 손실이나 오류가 발생할 경우 쉽게 감지할 수 있다.

    • 오류가 발생하면 해당 패킷을 다시 전송하므로 데이터의 신뢰성을 보장한다.

  3. 자원 절약:

    • 수신자가 한 번에 하나의 패킷만 처리하기 때문에, 수신 측에서 많은 버퍼 공간을 필요로 하지 않는다.

단점

  1. 낮은 네트워크 효율성:

    • 한 번에 하나의 패킷만 전송하고 ACK를 기다리기 때문에, 전송 대기 시간이 발생하여 대역폭을 효과적으로 활용하지 못하게 된다.

    • 특히 전송 거리가 멀거나 대역폭이 넓은 네트워크에서는 비효율적이다.

  2. 전송 속도 저하:

    • 송신자가 매번 ACK를 기다리는 동안 다른 패킷을 전송하지 못하므로, 데이터 전송 속도가 느려지게 된다.

    • 높은 대역폭을 가진 네트워크에서는 이 방식이 전송 속도를 충분히 활용하지 못하게 된다.

  3. 지연 시간 증가:

    • 정지-대기 프로토콜은 패킷 하나를 전송한 후 확인응답을 기다려야 하기 때문에 지연 시간이 커질 수 있다.

    • 특히 응답 시간이 긴 네트워크(예: 위성 네트워크)에서는 더 큰 지연이 발생한다.

  4. 확장성이 부족함:

    • 정지-대기 프로토콜은 패킷 전송량이 많아질수록 더 많은 시간이 필요하므로, 대규모 데이터 전송에는 적합하지 않는다.

대역폭-지연 곱(Bandwidth-Delay Product)과 효율(Efficiency)

💡요약: 정지-대기 프로토콜(Stop-and-Wait Protocol)에서 네트워크의 효율성을 측정하는 두 가지 방법인 대역폭-지연 곱(Bandwidth-Delay Product)효율(Efficiency)에 대해 알아보자. 이 둘은 네트워크 성능을 평가하는 중요한 지표이다. 대역폭-지연 곱은 송신자가 수신자로부터 응답을 기다리는 동안 전송할 수 있는 최대 데이터 용량을 의미하며, 효율은 네트워크가 실제로 얼마나 효과적으로 데이터 전송을 하고 있는지를 나타낸다.

  • 대역폭-지연 곱(Bandwidth-Delay Product)

    • 역할: 네트워크의 성능을 나타내는 지표로, 송신측과 수신측 사이의 왕복시간(RTT, Round Trip Time)대역폭(Bandwidth, bps)의 곱으로 계산된다.

    • 설명: 송신자가 패킷을 보낸 후, 수신자로부터 응답을 기다릴 때 전송할 수 있는 최대 비트 수(Maximum Bits)를 의미한다. 대역폭-지연 곱이 클수록 네트워크의 데이터 전송 용량이 커짐을 나타낸다.

  • 효율(Efficiency)

    • 역할: 네트워크가 실제로 전송할 수 있는 최대 데이터량에 비해 실제로 얼마나 많은 데이터를 전송하고 있는지를 나타내는 비율이다.

    • 설명: 네트워크의 최대 데이터 전송 용량과 비교하여 실제 전송된 데이터가 얼마나 효율적인지 보여주는 척도이다. 효율이 높을수록 네트워크 자원을 더 효과적으로 활용하고 있음을 의미한다.

💡예시상황: 네트워크의 대역폭이 1Mbps이고, 송신자와 수신자 간 왕복 시간이 0.5초라면 대역폭-지연 곱을 구할 수 있다.

  • 대역폭-지연 곱 계산: 1Mbps × 0.5초 = 0.5Mb, 즉, 송신자는 수신자로부터 응답을 받기 전까지 최대 0.5Mb의 데이터를 전송할 수 있다.

  • 효율 예시: 네트워크가 최대 0.5Mb를 전송할 수 있지만, 실제로는 0.4Mb만 전송한다면, 효율은 0.4Mb / 0.5Mb * 100 = 80%가 된다.


정지-대기 프로토콜 네트워크 효율성 계산 문제풀이

  • 대역폭-지연 곱(Bandwidth-Delay Product) 계산:

    • 대역폭이 1Mbps이고 왕복 시간(RTT)이 20ms인 경우, 대역폭-지연 곱은 다음과 같이 계산된다.

    • (1Mbps) × (20ms) = 20,000 비트(20,000 bits).

    • 이는 시스템이 응답을 기다리는 동안 최대 전송할 수 있는 데이터 양을 의미한다.

    • 추가로 대역폭 1Mbps를 비트 단위로 표현하면 1Mbps = 1,000,000 bps이므로 1×10^61 비트/초(bps)가 된다.

    • 왕복 시간(RTT)은 20ms로 주어졌다. 이를 초 단위로 변환하면 20ms = 0.02초이다. 20 × 1 0^−3 초로 표현된다.

    • 결과 적으로 1,000,000 × 0.02초의 결과 값은 20,000이 된다.

  • RTT 동안 전송할 수 있는 데이터량:

    • 계산된 대역폭-지연 곱에 따라, 송신자는 20,000비트를 왕복 시간 동안 전송할 수 있게 된다.
  • 패킷 길이(Packet Length):

    • 시스템에서 사용되는 패킷의 길이가 1,000비트로 정의되어 있다. 이는 패킷 하나의 크기이다.
  • 효율(Efficiency) 계산:

    • 패킷 하나가 1,000비트이며, 왕복 시간 동안 최대 전송할 수 있는 데이터량이 20,000비트이므로 (1,000 / 20,000) × 100 = 5%의 효율이 나오게 된다.

    • 이 예제에서는 고속 회선에서 정지-대기 프로토콜이 비효율적임을 보여준다. 이는 왕복 시간이 짧고 대역폭이 높은 경우, 정지-대기 프로토콜로 전송할 수 있는 데이터량이 전체 용량에 비해 작기 때문이다.


위 예제는 정지-대기 프로토콜(Stop-and-Wait Protocol)의 방식과 다르게, 확인응답(ACK) 없이 데이터를 연속적으로 전송할 수 있는 새로운 프로토콜을 가정하여, 네트워크 효율을 계산하는 문제이다. 최대 15개의 패킷을 왕복 시간(RTT) 동안 전송할 수 있는 상황을 가정한다.

모든 계산과정은 위의 풀이와 동일하고 패킷의 길이만 1,000 × 15 = 15,000비트가 된다.

이를 송신자가 왕복 시간 동안 전송할 수 있는 최대 데이터량인 20,000비트와 곱하면 결과는 15,000/20,000 * 100 = 75%로 정지-대기 프로토콜보다 높은 효율을 나타내고 있다.

만약 데이터 전송 중 패킷 오류(Packet Error)가 발생하면 패킷을 재전송해야 하므로, 네트워크 효율이 낮아질 수 있다는 단점이 있다. 이는 확인응답이 없기 때문에 오류가 발생해도 이를 감지하지 못해 재전송이 필요할 수 있다는 문제점이다. 요약하자면 이 예제는 연속 전송 프로토콜을 사용해 효율을 높일 수 있지만, 패킷 오류가 발생했을 때 재전송이 필요해질 수 있는 단점이 있음을 보여준다.


3️⃣ N-프레임-후퇴(Go-Back-N) 프로토콜

💡요약: 이 프로토콜은 정지-대기 프로토콜의 단점을 개선하여, 확인응답(ACK)을 받기 전에도 여러 패킷을 동시에 전송할 수 있도록 하여 네트워크의 효율을 높이는 방법이다. 송신자는 확인응답을 받지 않은 이전 패킷의 복사본을 저장하여, 전송 실패 시 모든 복사본을 재전송함으로써 신뢰성을 유지한다.

  • 효율성 개선:

    • 정지-대기 프로토콜(Stop-and-Wait Protocol)의 비효율성을 보완하기 위해 Go-Back-N 프로토콜이 사용된다.

    • 송신자는 수신자로부터 확인응답을 기다리는 동안 한 개 이상의 패킷을 전송할 수 있어 채널의 효율을 높인다.

  • 재전송을 위한 패킷 복사본 유지:

    • 송신자는 확인응답을 받지 않은 이전까지 전송한 패킷에 대한 복사본(Copy of Transmitted Packets)을 유지한다. 만약 전송이 실패한 경우, 송신자는 해당 복사본을 다시 전송할 수 있도록 준비한다.
  • 프레임 전송 실패 시 재전송:

    • 송신자가 패킷 전송에 실패했다고 판단하면, 저장된 복사본을 사용해 모든 패킷을 다시 전송한다.

    • 수신자의 동작을 단순하게 하기 위해, 송신자는 확인응답을 받지 못한 모든 패킷을 재전송하게 된다. 이는 네트워크 자원을 다소 낭비할 수 있지만, 신뢰성 있는 데이터 전송을 보장할 수 있다.

💡예시상황: 송신자가 패킷 1, 패킷 2, 패킷 3을 연속적으로 전송한다.

  • 수신 및 ACK 응답: 수신자가 패킷 1에 대한 ACK를 송신자에게 보낸다.

  • 전송 실패 및 재전송: 만약 패킷 2가 손실되었다고 가정하면, 송신자는 패킷 3의 ACK를 받지 못해 패킷 2와 패킷 3을 모두 재전송한다.


N-프레임-후퇴(Go-Back-N) 프로토콜의 동작 방식

💡요약: 송신 윈도우(Send Window)와 수신 윈도우(Receive Window)를 통해 여러 개의 패킷을 연속적으로 전송할 수 있도록 한다. 송신자는 ACK를 기다리지 않고 여러 패킷을 보내고, 수신자는 순서에 맞는 패킷만 받아들인다. ACK가 도착하지 않으면 타이머가 만료되어 필요한 패킷들을 재전송한다.

  • 송신 윈도우(Send Window)

    • 송신 윈도우(Send Window)는 송신자가 확인응답(ACK)을 기다리지 않고도 연속적으로 전송할 수 있는 패킷의 수를 정의다.

    • S_f첫 번째 확인 대기 중인 패킷(First Outstanding Packet)을 나타내며, S_n다음에 보낼 패킷(Next to Send)을 가리킨다.

    • 송신자는 송신 윈도우 내에 있는 여러 개의 패킷을 연속으로 전송할 수 있으며, 수신자로부터 ACK를 받으면 그만큼 윈도우를 이동시키며 새로운 패킷을 전송할 수 있게 된다.

  • 수신 윈도우(Receive Window)

    • 수신 윈도우(Receive Window)는 수신자가 순서대로 도착하는 패킷만 받아들일 수 있도록 한다.

    • R_n다음으로 받아야 할 패킷(Next to Receive)을 가리키며, 이 번호에 맞지 않는 패킷이 도착하면 해당 패킷은 무시된다.

    • 수신자는 순서에 맞는 패킷만 수용하므로, 잘못된 순서의 패킷이 도착했을 경우 이를 저장하지 않고 다음 올 패킷을 기다리게 된다.

  • 타이머(Timer):

    • 송신자는 패킷을 보낼 때 타이머를 설정하여, 일정 시간 동안 ACK가 도착하지 않으면 해당 패킷과 그 이후의 모든 패킷을 다시 전송한다.

    • 이로 인해 네트워크에서 손실된 패킷이 있을 경우 모든 패킷을 재전송함으로써 데이터가 정확히 전달되도록 보장한다.

💡예시상황: 송신자가 패킷 1, 2, 3, 4를 수신자에게 연속적으로 보내는 상황이다.

  • 수신 응답 및 윈도우 이동: 수신자가 패킷 1과 2에 대해 ACK를 송신자에게 보내면, 송신 윈도우는 앞으로 이동하며 새로운 패킷(5번 패킷)을 전송할 준비를 한다.

  • 패킷 손실 발생 시 재전송: 만약 패킷 3이 손실되어 ACK가 오지 않으면 타이머가 만료되고, 송신자는 패킷 3부터 이후의 모든 패킷을 다시 전송한다.


💡중간 점검: 정지-대기 프로토콜(Stop-and-Wait Protocol)과 Go-Back-N 프로토콜의 큰 차이점은 무엇일까? Go-Back-N 프로토콜에서 송신자의 윈도우가 커짐으로 인해 정지-대기 프로토콜과 달리 여러 개의 패킷을 동시에 보낼 수 있게 된 것이 주요 차이점이다.


순서 번호(Sequence Number)와 확인응답번호(Acknowledgement Number)의 역할

N-프레임-후퇴(Go-Back-N) 프로토콜에서 사용하는 순서 번호(seqNo)와 확인응답 번호(ackNo)의 역할을 알아보자.

💡요약: 순서 번호(seqNo)는 송신 측에서 각 패킷에 번호를 부여하여 순서를 확인하는 데 사용되며, 확인응답 번호(ackNo)는 수신 측이 송신 측에 다음으로 기다리는 패킷 번호를 알려주는 역할을 합니다. 이로 인해 송신 측은 수신자가 패킷을 정상적으로 받았는지 파악할 수 있습니다.

☑️ 순서 번호(seqNo)

  • m-비트(m-bit)를 사용하여 순서 번호를 표시한다. 이 번호는 modulo 2^m으로 계산되며, 순환하여 반복된다.

  • 예를 들어, m=3일 때 2^3 = 8 이므로, 순서 번호는 0부터 7까지 순환하며 사용된다.

  • 정지-대기 방식(Stop-and-Wait Protocol)은 m=1 을 사용하며, N-프레임-후퇴 프로토콜에서도 동일하게 적용될 수 있다. m=1 이라면 0과 1의 순서 번호만 반복된다.

☑️ 확인응답 번호(ackNo)

  • 수신 측이 기다리는 패킷의 순서 번호를 나타낸다. 이는 송신자에게 수신 측이 다음으로 어떤 패킷을 기대하는지 알려주는 역할을 한다.

  • 확인응답 번호보다 작은 순서 번호의 패킷은 정상적으로 수신되었음을 의미하며, 이를 통해 수신 측에서 포괄적으로 이전 패킷들이 잘 도착했음을 알리는데 이를 포괄적 수신확인(Cumulative Acknowledgment)이라고 한다.

💡N-프레임-후퇴와 정지-대기 프로토콜의 비교

1. 순서 번호(Sequence Number)

  • 정지-대기 프로토콜(Stop-and-Wait Protocol):

    • 순서 번호는 단순히 0과 1을 번갈아 가며 사용한다.

    • 한 번에 하나의 패킷만 전송하고, 그 패킷에 대한 확인응답(ACK)을 받으면 다음 패킷을 전송하므로, 복잡한 순서 번호가 필요하지 않는다.

    • 0과 1의 2비트만으로도 충분하며, 이를 모듈로 2 방식으로 순환할 수 있다.

  • N-프레임-후퇴 프로토콜(Go-Back-N Protocol):

    • 순서 번호는 여러 패킷을 동시에 관리하기 위해 더 큰 범위의 번호가 필요하다.

    • N개의 패킷을 한 번에 전송할 수 있기 때문에, 순서 번호의 크기는 2^m (여기서 m은 순서 번호의 비트 수)로 정해진다.

    • 예를 들어, 순서 번호가 3비트라면, 0부터 7까지의 순서 번호가 사용되는 것이다.

    • 각 패킷에는 고유한 순서 번호가 붙어서 전송되며, 확인응답을 받은 패킷을 기준으로 송신 윈도우가 이동한다.

2. 확인응답 번호(Acknowledgment Number)

  • 정지-대기 프로토콜(Stop-and-Wait Protocol):

    • 확인응답 번호(ACK)는 전송된 패킷 하나에 대해 개별적으로 응답을 보내는 방식이다.

    • 송신자는 확인응답 번호가 현재 전송한 패킷의 번호와 동일한지를 확인하여 다음 패킷 전송 여부를 결정한다.

    • 예를 들어, 패킷 0을 보낸 후 ACK 0을 수신하면 다음 패킷(1번)을 전송하고, ACK 1을 받으면 다시 0번 패킷을 전송하는 방식이다.

    • 이 방식에서는 포괄적 확인응답(Cumulative ACK)이 필요하지 않으며, 단일 패킷에 대한 응답만 처리하면 된다.

  • N-프레임-후퇴 프로토콜(Go-Back-N Protocol):

    • N-프레임-후퇴 프로토콜은 포괄적 확인응답(Cumulative ACK) 방식을 사용한다.

    • 수신자는 가장 마지막으로 연속해서 잘 수신된 패킷의 순서 번호에 대해 확인응답을 보낸다.

    • 예를 들어, 수신자가 패킷 0, 1, 2를 차례대로 잘 받았다면 ACK 3을 송신하여 송신자가 패킷 0, 1, 2까지 잘 수신되었음을 알리고, 송신자는 그 다음 패킷부터 전송을 시작할 수 있다.

    • 만약 중간에 패킷이 손실되거나 오류가 발생하면, 해당 패킷 이후의 모든 패킷을 다시 전송해야 한다.

    • 이러한 포괄적 확인응답 방식 덕분에 N-프레임-후퇴 프로토콜은 다수의 패킷을 동시에 관리할 수 있지만, 손실된 패킷 이후의 모든 패킷을 다시 보내야 하는 단점이 있다.


Go-Back-N 프로토콜의 송신 윈도우의 #1 - 개념

💡요약: 송신 윈도우(Send Window)는 첫 번째 미응답 패킷 번호(S_f)다음 전송할 패킷 번호(S_n)로 구성되며, 윈도우의 크기(S_size)는 최대 전송할 수 있는 패킷 수를 결정한다. 송신자는 확인응답을 받으면 윈도우를 이동시켜 추가 패킷을 전송할 수 있다.

송신 윈도우의 첫 번째 미응답 패킷 번호(S_f):

  • 송신 윈도우에서 아직 확인응답(ACK)을 받지 못한 첫 번째 패킷 번호를 의미한다.

  • 이 번호부터 송신자는 순차적으로 확인응답을 기다리며, 확인응답이 도착하지 않으면 재전송을 고려하게 된다.

  • 다음 전송할 패킷 번호(S_n):

    • 송신 윈도우에서 다음으로 보낼 패킷 번호를 나타낸다.

    • 송신자는 송신 윈도우 내에서 Sf 부터 S_n​까지의 패킷을 전송할 수 있으며, 송신 윈도우의 크기만큼 전송 범위를 유지한다.

  • 송신 윈도우의 크기(S_size):

    • 송신 윈도우의 크기는 2^m−1 로 정의된다. 여기서 m은 순서 번호에 사용되는 비트 수를 의미한다.

    • 예를 들어, m=3 이면 S size = 2^3 − 1 = 7 이 되며, 송신자는 한 번에 최대 7개의 패킷을 전송할 수 있게 된다.

  • 윈도우 이동:

    • 송신자가 S_f​와 S_n​ 사이의 패킷에 대한 확인응답을 받으면, 송신 윈도우는 앞으로 이동한다.

    • 윈도우가 이동함으로써 송신자는 새로운 패킷을 추가로 전송할 수 있게 된다.

💡예시상황: 송신자는 송신 윈도우 크기가 4인 상태에서 패킷 0, 1, 2, 3을 전송합니다.

  • 수신 응답(ACK): 수신자는 패킷 0과 1에 대한 확인응답(ACK)을 송신자에게 보낸다.

  • 윈도우 이동: 송신자가 ACK 0과 1을 받으면, 송신 윈도우가 앞으로 이동하여 패킷 4, 5를 추가로 전송할 수 있게 된다.


Go-Back-N 프로토콜의 송신 윈도우 #2 - 구조

  • S_f (First Outstanding):

    • S_f첫 번째 미응답 패킷 번호(First Outstanding Packet)를 나타낸다. 송신자는 이 번호부터 확인응답(ACK)을 기다리고 있게 된다.

    • 송신자가 이미 전송했지만 아직 확인응답을 받지 못한 패킷들이 이 지점부터 시작됩니다. 이 패킷들은 Outstanding (sent, but not acknowledged) 상태이다.

  • S_n (Next to Send):

    • S_n다음 전송할 패킷 번호(Next to Send)를 나타낸다. 송신자는 이 번호에 해당하는 패킷을 다음으로 보낼 준비가 되어 있다.

    • 송신 윈도우 내에서는 Can be sent when accepted from process로 표시된 범위의 패킷들이 전송될 수 있다. 이는 송신 프로세스에서 데이터를 받아 패킷을 만들어 전송 가능한 상태를 의미한다.

  • 윈도우 크기(S_size):

    • 송신 윈도우 크기(S_size)는 송신자가 동시에 관리할 수 있는 패킷의 수를 의미한다.

    • 윈도우 크기 내에서 송신자는 여러 개의 패킷을 연속적으로 전송할 수 있으며, 수신자로부터 확인응답이 도착할 때마다 윈도우가 앞으로 이동하게 된다.

  • 패킷 상태 설명:

    • Sent, acknowledged, and purged: 이미 전송되고 확인응답을 받아 더 이상 송신자가 관리할 필요가 없는 패킷

    • Outstanding: 전송은 되었지만 아직 수신자로부터 확인응답을 받지 못한 패킷

    • Can be sent when accepted from process: 송신 프로세스가 데이터를 보내는 즉시 전송 가능한 패킷

    • Cannot be accepted from process: 현재 윈도우 크기 밖에 있어 전송할 수 없는 상태. 수신자로부터 ACK가 도착해 윈도우가 이동해야 전송할 수 있다.


Go-Back-N 프로토콜의 송신 윈도우 #3 - 이동 과정 (Sliding of the Send Window)

  • 첫 번째 미응답 패킷 번호(S_f):

    • S_fFirst Outstanding Packet을 의미하며, 송신자가 아직 확인응답(ACK)을 받지 못한 첫 번째 패킷을 나타낸다. 이 번호부터 송신자는 ACK를 기다리며, 윈도우 내의 다른 패킷을 계속 전송할 수 있다.
  • 다음 전송할 패킷 번호(S_n):

    • S_nNext to Send로, 다음에 전송할 패킷 번호를 가리킨다.

    • 송신 윈도우 내에서 송신자는 S_n이후에 있는 패킷도 전송할 수 있다. 이 예시에서는 확인응답을 기다리는 동안에도 최대 윈도우 크기만큼의 패킷을 준비하고 전송할 수 있게 된다.

  • 윈도우 이동 과정(Window Sliding):

    • a 단계에서는 S_f가 4를 가리키고 S_n이 0을 가리키며, 4~0 범위 내의 패킷들이 송신 윈도우에 포함되어 있다.

    • b 단계에서는 확인응답 번호 6(ACK 6)이 도착하여 윈도우가 이동한다. S_f가 6으로 이동하면서 새로운 패킷이 윈도우에 포함된다.

    • 이로 인해 송신자는 7부터 추가 패킷을 전송할 준비가 된다.

💡예시상황: 송신자가 패킷 4, 5, 6을 전송하고, 4번 패킷에 대한 확인응답을 기다리는 상태

  • 수신 응답(ACK): 수신자로부터 ACK 6이 도착하여, 4번, 5번, 6번 패킷이 성공적으로 수신되었음을 알린다.

  • 윈도우 이동: 송신 윈도우가 앞으로 이동하면서 송신자는 패킷 7부터 새로운 패킷을 전송할 준비가 된다.


Go-Back-N 프로토콜의 송신 윈도우 #4 - 크기

💡요약: Go-Back-N 송신 윈도우의 크기는 2^m-1 보다 작거나 같아야 하며, 수신 윈도우의 크기는 항상 1이다.

  • 송신 윈도우의 크기:

    • 송신 윈도우의 크기는 순서 번호의 크기에 따라 결정된다.

    • 순서 번호가 m 비트일 때, 송신 윈도우의 크기는 2^m-1 보다 작거나 같아야 한다. 이렇게 해야 데이터의 흐름을 효율적으로 관리하고, 데이터의 중복이나 오류를 줄일 수 있게된다.

  • 수신 윈도우의 크기:

    • 수신 윈도우(Receive Window)의 크기는 항상 1이다.

    • 이는 수신자가 한 번에 하나의 패킷만 처리할 수 있음을 의미한다. 따라서, 송신자는 수신자가 확인응답(ACK)을 보낼 때까지 기다렸다가 다음 패킷을 전송한다.

💡예시상황: 순서 번호가 3비트로 표현된다면(즉, m=3), modulo 2^m에 의해 가능한 순서 번호는 0부터 7까지 총 8개가 된다.

  • 윈도우 크기 설정:

    • 송신 윈도우 크기는 2^{3-1} = 4로 설정할 수 있다. 따라서 송신자는 한 번에 4개의 패킷을 전송할 수 있게된다.
  • 수신 동작:

    • 수신자는 송신자가 보낸 패킷을 하나씩 받고, ACK를 송신자에게 보낸다. 송신자는 ACK를 받은 후 다음 패킷을 전송한다.

💡 송신 윈도우 크기 비교

  • 정지-대기 프로토콜의 송신 윈도우 크기는 1이므로, 매번 한 패킷을 전송한 후 ACK를 기다려야 한다.

  • N-프레임-후퇴 프로토콜은 송신 윈도우 크기가 2^m−1이하로 설정되어, 여러 패킷을 동시에 전송할 수 있다.


Go-Back-N 프로토콜의 송신 윈도우 #5 - 크기가 네트워크 통신에 미치는 영향

💡요약:두 가지 경우를 비교하고 있으며, 송신 윈도우 크기가 2^m−1 과 2^m 일 때의 차이점을 보여준다. 송신 윈도우 크기2^m - 1일 때는 중복된 패킷을 올바르게 폐기할 수 있지만, 2^m일 경우에는 중복된 패킷이 새로운 데이터로 잘못 인식될 수 있다. 따라서, N-프레임-후퇴(Go-Back-N) 프로토콜에서 송신 윈도우 크기는 2^m - 1로 설정하는 것이 데이터의 신뢰성을 유지하는 데 더 적합하다.

  • 송신 윈도우 크기 < 2^m (왼쪽 그림):

    • 여기서는 송신 윈도우 크기가 2^m−1인 경우.

    • 송신자가 패킷 0, 1, 2, 3을 연속으로 전송하고, 수신자가 순서대로 ACK 응답을 보낸다.

    • 만약 패킷 0이 손실되어 재전송될 경우, 수신자는 이미 받은 패킷을 중복으로 인식하고 올바르게 폐기(Correctly Discarded)한다.

    • 이 방식에서는 중복된 패킷을 식별하고 버릴 수 있어 데이터의 신뢰성을 유지할 수 있다.

  • 송신 윈도우 크기 = 2^m (오른쪽 그림):

    • 이 경우 송신 윈도우 크기가 2^m이다.

    • 송신자가 패킷 0, 1, 2, 3을 전송하고, 수신자는 ACK 응답을 보낸다. 만약 패킷 0이 손실되면 재전송된다.

    • 그러나, 수신 윈도우 크기가 1이므로 수신자는 재전송된 패킷 0을 새로운 데이터로 잘못 받아들임(Erroneously Accepted). 이로 인해 데이터가 중복되거나 잘못 처리될 수 있다.

    • 이 방식은 데이터의 중복 수신을 유발할 수 있어 신뢰성에 문제가 생긴다.

💡예시상황: 송신자가 패킷 0, 1, 2, 3을 전송하고, 수신자는 이를 차례대로 받는다.

  • 패킷 손실 및 재전송: 패킷 0이 손실되어 송신자가 타이머가 만료되면 다시 패킷 0을 전송한다.

  • 수신 측 처리:

    • 송신 윈도우 크기가 2^m - 1인 경우, 수신자는 패킷 0이 이미 받은 데이터임을 인식하고 이를 폐기한다.

    • 송신 윈도우 크기가 2^m인 경우, 수신자는 패킷 0을 새로운 데이터로 잘못 받아들일 수 있다.


Go-Back-N 프로토콜의 수신 윈도우

💡요약: 수신 윈도우는 송신 윈도우와 다르게 크기가 1로 고정되어 있으며, 수신자가 올바른 순서의 패킷을 받으면 윈도우가 한 칸씩 이동하여 다음 패킷을 기다리게 된다.

  • R_n (Next Expected):

    • R_n은 수신자가 다음에 수신할 것으로 기대하는 패킷 번호(Next Expected Packet)

    • 수신자는 이 번호에 해당하는 패킷이 도착해야 다음 단계로 진행할 수 있다.

  • 수신 윈도우의 크기(R_size):

    • 수신 윈도우의 크기는 항상 1로 고정되어 있다.

    • 이는 수신자가 항상 순서대로 패킷을 수신해야 하며, 하나의 패킷이 도착한 후에야 다음 패킷을 받을 준비가 된다는 의미이다.

  • 윈도우 이동:

    • 수신자가 올바른 순서의 패킷을 받으면 수신 윈도우가 한 슬롯씩 앞으로 이동한다.

    • 예를 들어, 수신자가 패킷 5를 수신한 후에는 R_n이 6으로 이동하며, 이제 6번 패킷을 기다리게 된다.

💡예시상황: 송신자가 패킷 5, 6, 7을 전송하고 있다.

  • 수신 응답(ACK): 수신자는 패킷 5를 수신하고, R_n이 6으로 이동하여 6번 패킷을 기다리게 된다.

  • 다음 패킷 수신: 수신자가 패킷 6을 수신하면, 다시 윈도우가 이동하여 7번 패킷을 기다리게 된다.


4️⃣ 선택적 반복 (Selective Repeat) 프로토콜

💡요약: 선택적 반복(Selective Repeat) 프로토콜전송 실패한 패킷만 재전송하여 효율을 높이는 방식이다. 송신자는 송신 윈도우(Send Window)를 통해 여러 패킷을 전송하며, 실패한 패킷에 대해서만 다시 전송한다. 이는 N-프레임-후퇴 프로토콜보다 효율적이며, 특히 오류가 자주 발생하는 환경에서 유리하다.

  • 이 프로토콜은 전송에 실패한 패킷만 재전송하는 방식으로, N-프레임-후퇴 프로토콜의 비효율성을 줄일 수 있다.

  • 오류가 자주 발생하는 환경에서도 유리하게 작동한다. 왜냐하면, 실패한 패킷만 재전송하기 때문에, 이미 전송된 패킷을 반복적으로 보내지 않아도 되기 때문이다.

  • 송신 윈도우(Send Window):

    • S_f: 첫 번째 미응답 패킷 번호(First Outstanding Packet)를 나타낸다. 송신자는 이 번호부터 시작하여 ACK를 기다리고 있는다.

    • S_n: 다음 전송할 패킷 번호(Next to Send)를 의미하며, 송신자가 전송할 준비가 된 패킷의 번호이다.

    • S_size: 송신 윈도우 크기(Send Window Size)는 2^(m-1)로 설정된다. 여기서 m은 순서 번호에 필요한 비트 수를 의미한다.

  • 윈도우 이동:

    • 송신자는 S_f에 대한 확인응답(ACK)을 받으면 송신 윈도우가 앞으로 이동하게 된다. 이를 통해 새로운 패킷을 전송할 수 있는 공간이 생긴다.

💡예시상황: 송신자가 패킷 0, 1, 2, 3을 전송했는데, 패킷 1이 손실되었다.

  • 수신자 응답(ACK): 수신자는 패킷 0과 패킷 2, 3을 정상적으로 수신하고 각각의 ACK를 송신자에게 보낸다.

  • 재전송: 송신자는 패킷 1에 대한 응답이 없으므로, 패킷 1만 다시 전송한다.

  • 정상 수신: 수신자가 패킷 1을 받으면, 선택적 반복 프로토콜을 통해 모든 패킷이 정상적으로 전달된다.


선택적 반복 (Selective Repeat) 프로토콜 #1 - 동작 방식

  • 송신 윈도우(Send Window):

    • S_f (First Outstanding): 송신 윈도우에서 확인응답(ACK)을 받지 못한 첫 번째 패킷을 가리킨다.

    • S_n (Next to Send): 송신 윈도우에서 다음에 보낼 패킷 번호를 나타낸다.

    • 송신자는 윈도우 내에서 여러 패킷을 전송할 수 있으며, 확인되지 않은 패킷을 관리한다. 확인받지 못한 패킷은 주황색, 순서가 어긋나게 확인된 패킷은 노란색으로 표시된다.

  • 수신 윈도우(Receive Window):

    • R_n (Next to Receive): 수신 윈도우에서 다음으로 수신할 것으로 예상하는 패킷번호이다.

    • 선택적 반복 프로토콜에서는 수신자가 패킷을 순서대로 받을 필요는 없으며, 윈도우 내에서 받은 패킷을 따로 저장하고 관리한다. 이는 불완전한 순서로 도착한 패킷(노란색)이라도 보관하여, 나중에 제대로 전달될 수 있도록 준비한다.

  • 타이머(Timer):

    • 송신자는 각 패킷 전송 시 타이머를 설정하고, 지정한 시간 내에 확인을 받지 못하면 해당 패킷만 다시 전송한다. 이를 통해 오류가 발생한 패킷만 선택적으로 다시 보낼 수 있게된다.

선택적 반복 (Selective Repeat) 프로토콜 #2 - 송신 윈도우의 구조

💡요약: 선택적 반복 프로토콜(Selective Repeat Protocol)은 송신 윈도우(Send Window)를 통해 여러 패킷을 동시에 전송하고, 오류가 발생한 패킷만 선택적으로 재전송한다. 송신자는 각 패킷의 상태를 관리하면서 확인응답이 도착하면 윈도우를 이동시켜 새로운 패킷을 전송할 수 있게 된다.

  • S_f (First Outstanding):

    • S_f는 송신 윈도우에서 아직 확인응답(ACK)을 받지 못한 첫 번째 패킷 번호이다.

    • 이 패킷부터 송신자는 ACK를 기다리며, 확인되지 않은 상태에서 윈도우 내 다른 패킷들을 계속 전송할 수 있다.

  • S_n (Next to Send):

    • S_n다음에 전송할 패킷 번호(Next to Send)를 나타낸다.

    • 송신자는 S_n이 가리키는 번호의 패킷을 전송할 준비가 되어 있으며, 송신 윈도우 내에서 여러 개의 패킷을 동시에 전송할 수 있다.

  • 송신 윈도우 크기(S_size):

    • S_size는 송신 윈도우의 크기를 나타내며, 일반적으로 2^{m-1}로 설정된다. 여기서 m은 순서 번호에 필요한 비트 수를 의미한다.
  • 패킷 상태 설명:

    • Packets already acknowledged: 이미 전송되었고 수신자로부터 확인응답을 받은 패킷

    • Outstanding packets, some acknowledged: 전송되었으나 확인되지 않은 패킷들이다. 일부는 확인을 받았지만, 모두 완료되지 않은 상태이다. 주황색은 확인되지 않은 패킷, 노란색은 순서대로 도착하지 않은 패킷이다.

    • Packets that can be sent: 윈도우 내에서 송신자가 전송할 수 있는 패킷이다.

    • Packets that cannot be sent: 현재 송신 윈도우 크기를 벗어나 아직 전송할 수 없는 상태이다.


선택적 반복 (Selective Repeat) 프로토콜 #3 - 윈도우 크기

💡요약: 송신 및 수신 윈도우의 크기는 순서 번호 비트 수에 따라 결정된다. 송신 및 수신 윈도우 크기는 2^m-1보다 작거나 같아야 한다.

송신 윈도우의 크기:

  • 송신 윈도우의 크기는 2^m-1보다 작거나 같아야 한다. 여기서 m은 순서 번호의 비트 수(Number of Bits in Sequence Number)를 의미한다.

  • 예를 들어, 순서 번호가 3비트(m=3)로 표현된다면, 송신 윈도우의 크기는 2^3−1 = 4 이하로 설정되어야 한다.

수신 윈도우의 크기:

  • 수신 윈도우의 크기도 송신 윈도우와 동일한 크기를 가져야 한다.

  • 이는 송신자와 수신자가 같은 범위 내에서 패킷을 주고받아 데이터의 일관성을 유지할 수 있도록 한다는 뜻이다.

순서번호의 절반 이하:

  • 순서 번호의 범위는2^m이므로, 윈도우 크기는 이 범위의 절반 이하로 설정해야 한다.

  • 이는 순서 번호가 반복될 때 발생할 수 있는 중복 문제를 방지하고, 데이터가 순서대로 정확하게 수신되도록 한다.

💡예시상황: 순서 번호가 3비트로 표현된다면, 순서 번호 범위는 0에서 7까지 총 8개의 값이된다. (2³ = 8)

  • 윈도우 크기 설정: 이 경우, 송신 및 수신 윈도우의 크기는 2^(3-1) 4로 설정된다.

  • 데이터 전송: 송신자는 최대 4개의 패킷을 동시에 전송할 수 있으며, 수신자는 이 범위 내에서 순서에 맞게 데이터를 수신하고 재조립할 수 있다.


선택적 반복 (Selective Repeat) 프로토콜 #4 - 윈도우 크기

💡요약: 송신 윈도우와 수신 윈도우의 크기가 서로 다른 두 경우를 비교함으로써 윈도우 크기를 적절히 설정하는 것이 데이터 전송의 신뢰성에 얼마나 중요한지를 알아보자

  1. 윈도우 크기 = 2m−1(왼쪽 그림 a):

    • 이 경우 송신 윈도우와 수신 윈도우의 크기가 2^{m-1}로 설정되어 있다. 예를 들어, 순서 번호가 2비트(m=2)라면, 윈도우 크기는 2^{2-1} = 2 이다.

    • 송신자가 패킷을 전송하고, 수신자는 올바르게 확인 응답(ACK)을 보냅니다.

    • 중복된 패킷(패킷 0)이 재전송되었을 때, 수신자는 이를 중복으로 인식하고 올바르게 폐기(Correctly Discarded)한다.

    • 이 설정은 데이터가 중복되거나 잘못 처리되는 것을 방지한다.

  2. 윈도우 크기 > 2m−1 (오른쪽 그림 b):

    • 이 경우 송신 윈도우와 수신 윈도우의 크기가 2^{m-1}보다 경우이다. 이는 선택적 반복 프로토콜에서 권장하지 않는 설정이다.

    • 패킷이 중복되어 수신자에게 도착했을 때, 수신자는 이를 새로운 데이터로 잘못 받아들여 저장(Erroneously accepted and stored as new data)하게 된다.

    • 이로 인해 데이터가 중복되거나 잘못된 순서로 저장될 수 있으며, 데이터 전송의 신뢰성에 문제가 생긴다.

💡예시상황: 순서 번호가 2비트로 표현되어, 가능한 번호는 0, 1, 2, 3이다.

  • 윈도우 크기 설정:

    • 왼쪽 상황: 윈도우 크기를 2^{2-1} = 2로 설정하여, 송신자와 수신자는 중복 패킷을 올바르게 폐기할 수 있다.

    • 오른쪽 상황: 윈도우 크기가 3으로 설정되어, 중복된 패킷을 새로운 데이터로 오인하여 잘못 처리하게 된다.


선택적 반복 (Selective Repeat) 프로토콜 #5 - 수신 윈도우

💡요약: 선택적 반복(Selective Repeat) 프로토콜에서 수신 윈도우(Receive Window)순서에 맞지 않는 패킷을 임시 저장하여 나중에 올바른 순서로 데이터를 응용 계층에 전달하는 기능을 제공한다. 이는 패킷이 순서에 맞지 않게 도착해도 데이터의 일관성을 유지할 수 있도록 한다.

  • R_n (Next Expected Packet):

    • R_n수신자가 다음으로 기대하는 패킷 번호(Next Expected Packet)를 의미한다. 수신자는 이 번호의 패킷이 도착할 때까지 대기하며, 이 번호에 맞는 패킷이 도착하면 해당 패킷을 처리할 준비가 된다.
  • R_size (Receive Window Size):

    • R_size는 수신 윈도우의 크기를 의미하며, 2^(m-1)로 설정된다. 여기서 m은 순서 번호를 나타내는 비트 수이다.

    • 이 크기만큼의 패킷을 수신 윈도우에서 관리할 수 있으며, 수신자는 순서에 맞지 않는 패킷을 버리지 않고 임시로 저장한다.

  • 도착 순서 관리:

    • 수신자가 패킷을 수신했을 때, 도착 순서에 맞지 않는 패킷이라도 내부 버퍼에 임시 저장한다.

    • 이렇게 저장된 패킷들은 올바른 순서대로 정렬하여 응용 계층으로 전달되므로 데이터의 순서가 유지되게 된다.

    • 만약 먼저 도착한 패킷이 있다면, 순서에 맞는 패킷이 도착할 때까지 기다렸다가 모든 패킷을 순서대로 응용 계층으로 전달한다.

💡예시상황: 송신자가 패킷 0, 1, 2, 3을 보냈고, 패킷 1이 손실되었다.

  • 수신자 버퍼링: 수신자는 패킷 0과 2, 3을 받지만, 패킷 1이 없기 때문에 버퍼에 임시 저장한다.

  • 재전송: 송신자가 패킷 1을 재전송하고, 수신자는 이를 받으면 모든 패킷이 순서에 맞춰진다.

  • 정렬 및 전달: 수신자는 버퍼에 저장된 패킷들을 순서대로 응용 계층에 전달한다.


Go-Back-N 과 Selective Repeat의 차이점 #1 - 구현

💡요약: 두 프로토콜 모두 네트워크에서 데이터 전송의 신뢰성을 보장하기 위해 사용되지만, 오류 처리와 패킷 관리 방식에서 차이가 있다. N-프레임-후퇴(Go-Back-N) 방식은 하나의 타이머와 포괄적 수신 확인을 통해 단순하게 구현되지만, 재전송 시 여러 패킷을 중복 전송해야 하는 번거로움이 있다. 반면에, 선택적 반복(Selective Repeat) 방식은 각 패킷에 타이머를 설정하고 순서대로 패킷을 재정렬하여 필요한 패킷만 재전송할 수 있지만, 구현이 더 복잡해진다.

구현의 복잡성(Implementation Complexity):

  • 선택적 반복(Selective Repeat) 프로토콜은 수신 측에서 순서번호대로 패킷을 재정렬하는 기능이 필요하다다. 이는 패킷이 순서대로 도착하지 않을 때 이를 저장하고 재정렬하는 작업이 필요하기 때문에, Go-Back-N 방식보다 구현이 더 복잡해지게 된다.
  • 타이머 관리(Timer Management):

    • N-프레임-후퇴 방식(Go-Back-N)에서는 송신 측에서 하나의 타이머만 사용하여 재전송 여부를 판단한다. 만약 타이머가 만료되면 그 시점에서 재전송을 시작한다.

    • 반면, 선택적 반복(Selective Repeat) 방식에서는 각 패킷별로 타이머를 설정해야 한다. 이렇게 패킷별로 타이머를 관리하는 것은 더 복잡하지만, 필요한 패킷만 재전송할 수 있어 효율적이다.

확인응답번호의 의미(Acknowledgment Number):

  • N-프레임-후퇴 방식에서는 확인응답번호(ACK)가 포괄적 수신 확인(Cumulative Acknowledgment)의 의미를 갖는다. 즉, 특정 번호 이하의 모든 패킷이 수신되었음을 의미한다.

  • 선택적 반복 방식에서는 확인응답번호가 특정 패킷 하나에 대한 확인을 의미하며, 순서대로 오류 없이 수신된 패킷의 순서번호를 표시한다. 이 방식은 순서가 어긋난 패킷을 개별적으로 관리할 수 있게 한다.

💡재정렬 작업의 복잡성

네트워크에서 순서대로 도착하지 않은 패킷을 재정렬하는 것은 단순한 작업이 아니다. 수신자는 도착한 패킷을 임시로 저장하고, 예상된 순서대로 모든 패킷이 도착할 때까지 기다리면서 재정렬해야 한다. 특히, 패킷 손실이 빈번하거나 도착 순서가 많이 어긋나는 경우 재정렬 작업이 복잡해질 수 있다.

💡예시상황: 송신자가 패킷 0, 1, 2, 3을 전송했지만, 패킷 1이 손실된 상황

  1. Go-Back-N 방식: 송신자는 패킷 1에 대한 응답을 받지 못하면 패킷 1부터 다시 전송

  2. 선택적 반복 방식: 송신자는 패킷 1에 대한 응답만 받지 못하므로, 패킷 1만 다시 전송


Go-Back-N 과 Selective Repeat의 차이점 #2 - 주요차이점

💡요약: 이 두 가지 프로토콜은 데이터 통신에서 패킷의 전송 및 오류 제어를 관리하는 방식으로, 각기 다른 방식으로 데이터의 신뢰성을 보장한다. 각각의 장단점이 있어 실제 네트워크 환경에서는 필요에 따라 이들 중 하나를 선택하거나 두 가지 방식을 혼합하여 사용하는 경우도 있다. Go-Back-N 프로토콜은 간단한 구현과 적은 메모리 사용이 장점이지만, 패킷 손실 시 여러 패킷을 재전송해야 한다. 선택적 반복 프로토콜은 손실된 패킷만 재전송해 효율적이지만, 구현이 더 복잡하고 버퍼 사용량이 크다.

  • 슬라이딩 윈도우(Sliding Window):

    • Go-Back-N: 송신측만 윈도우를 가지고 있으며, 수신측은 버퍼가 하나만 필요합니다. 따라서 간단하게 구현할 수 있다.

    • 선택적 반복(Selective Repeat): 송신측과 수신측 모두 동일한 크기의 윈도우 버퍼를 갖는다. 이를 통해 수신측은 순서가 뒤섞여 도착한 패킷도 임시로 저장할 수 있다.

  • 수신확인(Acknowledgment):

    • Go-Back-N: 포괄적 수신 확인(Cumulative Acknowledgment)을 사용한다. 이는 특정 패킷 번호 이하의 모든 패킷이 제대로 수신되었음을 나타낸다.

    • 선택적 반복(Selective Repeat): 각 패킷에 대해 개별적인 수신 확인을 한다. 따라서 특정 패킷만 누락되었을 때도 그 패킷만 다시 전송하면 된다.

  • 재요청 방식(Retransmission):

    • Go-Back-N: 오류가 발생하거나 패킷이 유실되면 그 이후의 모든 패킷을 다시 전송한다. 타임아웃이 발생하면 자동으로 재전송된다.

    • 선택적 반복(Selective Repeat): 오류가 발생한 특정 패킷만 재전송한다. 불필요한 데이터 전송이 줄어들어 효율적이다.

  • 프레임 수신 방법(Frame Reception):

    • Go-Back-N: 송신 순서와 수신 순서가 동일해야 하다.

    • 선택적 반복(Selective Repeat): 수신 윈도우 내에서 순서와 상관없이 도착한 패킷들을 수신할 수 있다.

  • 상위 계층으로 전달:

    • Go-Back-N: 수신된 패킷을 하나씩 순서대로 상위 계층으로 전달한다.

    • 선택적 반복(Selective Repeat): 윈도우 크기만큼 도착한 패킷을 순서와 상관없이 상위 계층으로 전달할 수 있다.

  • 장단점:

    • Go-Back-N: 구현이 간단하고 수신측에서 적은 버퍼를 사용하지만, 많은 대역폭을 소비할 수 있다.

    • 선택적 반복(Selective Repeat): 구현이 복잡하고 많은 버퍼를 사용하지만, 재전송으로 인한 대역폭 소비가 적다.

💡예시상황: 송신자가 패킷 0, 1, 2, 3을 전송한다.

  • Go-Back-N 방식: 패킷 1이 손실되면, 수신측은 패킷 2와 3도 버리고, 송신자는 1번 패킷부터 다시 전송한다.

  • 선택적 반복 방식: 패킷 1이 손실되면, 수신측은 패킷 2와 3을 버퍼에 저장하고, 송신자는 패킷 1만 재전송한다.


5️⃣ 피기배킹(Piggy-backing)

💡요약: 피기백킹은 네트워크에서 데이터를 양방향으로 교환할 때, 송신 데이터와 수신 데이터에 대한 확인응답(ACK) 정보를 함께 묶어 보내는 데이터 통신 기술이다. 이를 통해 불필요한 패킷 전송을 줄일 수 있게 된다.

양방향 패킷 교환:

  • 일반적으로 데이터 패킷은 양방향으로 교환된다. 즉, 송신측과 수신측 모두 데이터를 보내고 받는다.

  • 따라서, 확인응답(ACK)도 양방향으로 교환되어야 한다. 데이터를 주고받을 때마다 따로 ACK 패킷을 보내는 것은 비효율적이기 때문이다.

효율성:

  • 확인응답을 별도의 패킷으로 전송하면 네트워크 자원이 낭비된다. 매번 데이터를 보낼 때마다 ACK 패킷을 따로 보내면 대역폭을 더 많이 사용하게 된다.

  • 피기백킹을 사용하면, 송신 데이터와 함께 수신 데이터에 대한 확인응답 정보도 같이 전달할 수 있다. 이렇게 하면 ACK를 따로 보내지 않아도 되므로 네트워크 효율이 높아진다.

피기백킹의 정의:

  • 피기백킹(Piggy-backing)은 송신하는 데이터에 수신 데이터에 대한 ACK 정보를 포함시켜 한 번에 보내는 방식이다.

  • 이는 데이터 통신에서 효율성을 극대화하기 위한 전략이다. 즉, 데이터를 보내는 동시에 그 데이터에 대한 응답을 전달하는 방식으로, 네트워크의 자원을 절약할 수 있다.

💡예시상황: A와 B가 서로 데이터를 주고받고 있으며, A는 B에게 패킷을 전송하고 확인응답(ACK)을 기다리는 상황이다.

  • 피기백킹 사용 전: A와 B는 각각 데이터 패킷과 ACK 패킷을 따로 보낸다.

  • 피기백킹 사용 후: A가 B에게 데이터를 보낼 때, 그 데이터에 대한 ACK를 피기백킹으로 포함시켜 한 번에 보낸다. B도 A에게 데이터를 보낼 때 ACK 정보를 포함하여 전송한다.


피키배킹(Piggy backing)의 동작 구조

💡요약: 각 패킷에는 순서 번호(seqNo)확인응답 번호(ackNo)가 포함되어 데이터와 확인응답을 함께 처리한다.

  • 피기백킹의 기본 개념:

    • 피기백킹(Piggy-backing)송신 데이터와 수신 데이터에 대한 확인응답(ACK)을 함께 묶어서 전송하는 방식이다.

    • 예를 들어, 클라이언트(Client)가 서버(Server)로 데이터를 전송할 때, 서버는 해당 데이터에 대한 응답을 별도의 패킷으로 보내지 않고, 자신이 송신할 데이터에 확인응답 정보를 포함시켜 한 번에 보낸다.

  • 패킷 구조:

    • 각 패킷에는 순서 번호(seqNo)확인응답 번호(ackNo)가 포함되어 있다.

    • 순서 번호(seqNo)는 현재 전송하는 데이터의 번호를 나타내며, 확인응답 번호(ackNo)는 수신한 데이터에 대한 응답 정보를 포함한다.

    • 또한 체크섬(checksum)을 통해 데이터의 무결성을 확인한다.

  • 피기백킹의 장점:

    • 네트워크 자원 절약: 피기백킹 방식은 별도의 확인응답 패킷을 줄일 수 있어, 대역폭을 절약하고 네트워크 효율성을 높인다.

    • 지연 시간 감소: 데이터 전송과 확인응답을 한 번에 처리하여 전송 지연을 줄일 수 있다.

💡예시상황: 클라이언트(Client)가 서버(Server)로 데이터 패킷을 전송하는 상황이다.

  • 피기백킹 사용: 서버는 클라이언트의 데이터에 대해 확인응답(ACK)을 해야 하지만, 피기백킹 방식을 사용하여 별도의 ACK 패킷을 보내지 않고 자신이 송신할 데이터 패킷에 ACK 정보를 포함한다.

  • 결과: 클라이언트는 서버로부터 데이터를 받는 동시에, 자신의 전송 데이터에 대한 확인응답을 받게 된다.


ComputerNetwork

Part 6 of 7

This subject explores various topics centered on TCP/IP protocol technology, which is the basis of information and communication and computer networks. this is further study for me from Data Communication.

Up next

What is the Transport Layer? (1/2)

전송계층