🙈

⃝ 동글동글 ⃝

🪐ᐩ˖ 🍎

CS

신뢰적 데이터 전송의 원리 & TCP

JONG_UK 2023. 11. 22. 00:34
728x90
반응형
SMALL

신뢰적 데이터 전송의 원리

신뢰적 데이터 전송의 원리는 데이터가 송신자로부터 수신자에게 정확하고 신뢰성 있게 전달되도록 보장하는 방법입니다. 

Sending Process(송신하는 프로세스)에서 보내는 데이터가 Receiver Process(수신하는 프로세스)에게 도착했을 때, 에러가 없고 순서대로 도착해야 신뢰성이 보장됩니다.

 

일반적으로 저희가 보는 것은 realiable channel이기 때문에 TCP는 신뢰성 있게 데이터를 잘 전송하는 것처럼 보입니다. 하지만 실제 구현 측면에서 보면 TCP는 unreliable channel이 존재하는 Network Layer 위에 존재하기 때문에 구현이 복잡합니다.

 

출처:https://brightmango.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%8B%A0%EB%A2%B0%EC%A0%81%EC%9D%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%84%EB%8B%AC-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C%EC%9D%98-%EA%B5%AC%EC%B6%95

 

데이터 전송 프로토콜의 송신 측(reliable data transfer protocol sending side)

  • rdt_send()
    • rdt : 신뢰적인 데이터 전송 프로토콜을 나타냄
    • _send() : rdt의 송신 측에서 호출되고 있음을 나타냄

 

데이터 전송 프로토콜의 수신 측(reliable data transfer protocol receiving side)

  • 상위 계층으로 전달될 데이터를 보냄
  • rdt_rcv()는 패킷이 채널의 수신 측으로부터 도착했을 때 호출됨
  • rdt 프로토콜이 상위 계층에 데이터를 전달하려고 할 때 deliver_data()가 호출됨

rdt 송신 측과 수신 측은 udt_send()를 호출하여 패킷을 전송합니다.

  • udt : 비신뢰적인 데이터 전송(unreliable data transfer)

 

신뢰적 데이터 전송의 주요 원리

  1. 오류 감지와 수정: 데이터 전송 과정에서 발생할 수 있는 오류를 감지하고 수정합니다. 이는 일반적으로 체크섬, CRC (Cyclic Redundancy Check), 또는 다른 오류 감지 코드를 사용하여 수행됩니다.
  2. 수신 확인과 재전송: 데이터 패킷이 수신자에게 성공적으로 도착했는지 확인하기 위해, 수신자는 송신자에게 수신 확인 신호(ACK)를 보냅니다. 만약 ACK가 송신자에게 도달하지 않으면, 송신자는 데이터 패킷을 재전송합니다.
  3. 순서 유지: 데이터 패킷이 전송되는 순서대로 수신자에게 도착하도록 보장합니다. 이는 각 패킷에 순서 번호를 부여하여 관리합니다.
  4. 흐름 제어: 네트워크의 혼잡 상태나 수신자의 처리 능력을 고려하여 데이터 전송 속도를 조절합니다. 이는 네트워크의 효율성과 안정성을 유지하는 데 도움이 됩니다.
  5. 혼잡 제어: 네트워크 내의 혼잡을 감지하고 이를 완화하기 위해 데이터 전송 속도를 조절합니다. 이는 네트워크 과부하를 방지하고 전체적인 성능을 향상하는 데 중요합니다.

 

슬라이딩 윈도우(Sliding Window)

기본 개념

  • 슬라이딩 윈도우(Sliding Window)는 데이터 통신에서 사용되는 흐름 제어 및 혼잡 제어 기법 중 하나입니다. 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 패킷 각각에 대한 응답 없이 세그먼트를 전송하게 하고, 데이터 흐름을 동적으로 조절하는 기법입니다. 이 기법은 효율적인 데이터 전송을 가능하게 합니다. 
  • 윈도우(Window): 윈도우는 송신자와 수신자 각각이 한 번에 보내거나 받을 수 있는 데이터 패킷의 양을 나타냅니다. 이 윈도우의 크기는 네트워크의 상태나 수신자의 버퍼 크기에 따라 조절될 수 있습니다.

 

출처:https://velog.io/@haero_kim/TCP-%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4-%EA%B8%B0%EB%B2%95-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0

작동 원리

  1. 송신자의 윈도우: 송신자는 윈도우 크기만큼의 패킷을 연속적으로 보낼 수 있습니다. 이때, 각 패킷에는 순서 번호가 부여됩니다.
  2. 수신자의 윈도우: 수신자는 자신의 윈도우 크기만큼의 패킷을 한 번에 수신할 수 있으며, 정확한 순서대로 패킷을 받아들입니다.
  3. 슬라이딩: 송신자는 수신자로부터 패킷 수신 확인(ACK)을 받으면, 윈도우를 "슬라이딩"하거나 이동시켜, 새로운 패킷을 전송할 수 있게 됩니다. 이 과정은 연속적으로 이루어지며, 데이터 흐름을 효율적으로 관리합니다.
  4. 흐름 제어: 수신자가 패킷을 처리하는 속도에 따라 송신자의 윈도우 크기를 조절함으로써, 수신자가 넘쳐흐르지 않도록 합니다. 이는 네트워크의 효율성과 안정성을 유지하는 데 중요합니다.
  5. 혼잡 제어: 네트워크의 혼잡 상태에 따라 송신자의 윈도우 크기를 조정하여, 네트워크의 과부하를 방지하고 전체적인 성능을 향상하는 데 도움을 줍니다.

 

 

TCP/IP를 사용하는 모든 호스트들은 송신 그리고 수신을 위한 2개의 Window를 가지고 있습니다. 호스트들은 실제 데이터를 보내기 전에 3-Way Handshake를 통해 연결 설정을 해줄 때, 수신 호스트의 Receive Window 크기에 Send Window 크기를 맞춰 설정하여 윈도우 크기만큼 패킷을 모두 전송하고, 그 패킷들의 전달이 확인되는 대로 해당 윈도우를 옆으로 슬라이딩하면서 그다음 패킷을 전송하는 방식으로 동작한다.

 

슬라이딩 윈도우 기법은 일정한 윈도우 크기 내에서 한번에 여러 패킷을 송신하고 이를 패킷에 대하여 단지 한 번의 ACK를 보내 수신 확인을 합니다. 따라서 패킷 전달 도중 에러가 발생하였을 때 해당 패킷을 재전송하기 위해 기다리는 과정을 단축시켜 효율성을 향상시켰습니다.

 

 

 

[ Pipelining ]

Go Back N

"Go Back N" (GBN)은 데이터 링크 계층과 전송 계층에서 널리 사용되는 오류 제어 프로토콜 중 하나입니다. 이 프로토콜의 목적은 송신자와 수신자 사이에서 신뢰성 있는 데이터 전송을 보장하는 것입니다. Go Back N 프로토콜의 주요 특징과 작동 방식은 다음과 같습니다.

주요 특징

  1. 슬라이딩 윈도우 기반: GBN은 슬라이딩 윈도우 프로토콜의 일종으로, 송신자가 수신 확인(ACK)을 받기 전에 여러 개의 패킷을 연속적으로 보낼 수 있게 합니다. 이 윈도우 크기는 송신자가 동시에 보낼 수 있는 패킷의 최대 수를 결정합니다.
  2. 순차적인 패킷 처리: 수신자는 순차적으로 패킷을 처리합니다. 즉, 순서가 어긋난 패킷은 무시하고 기다립니다.

작동 방식

  1. 패킷 전송: 송신자는 윈도우 크기 내에서 여러 패킷을 연속적으로 보낼 수 있으며, 각 패킷에는 순서 번호가 부여됩니다.
  2. ACK 응답: 수신자는 정상적으로 수신된 패킷에 대해 ACK를 보냅니다. ACK는 가장 최근에 순서대로 받은 패킷의 번호를 나타냅니다.
  3. 타임아웃 및 재전송: 송신자는 각 패킷에 대해 타임아웃을 설정합니다. 만약 타임아웃 시간 내에 ACK가 도착하지 않으면, 해당 패킷과 그 이후에 전송된 모든 패킷을 재전송합니다.
  4. 오류 발생 시 재전송: 만약 수신자가 오류가 있는 패킷을 받거나 순서가 뒤바뀐 패킷을 받으면, 해당 패킷에 대한 ACK를 보내지 않고, 송신자는 타임아웃이 발생할 때까지 기다린 후 재전송합니다.

장단점

  • 장점: 구현이 비교적 간단하고, 순차적인 패킷 처리로 인해 수신자 측에서의 처리가 간단합니다.
  • 단점: 네트워크에 패킷 손실이나 오류가 발생했을 때, 오류가 발견된 패킷뿐만 아니라 그 이후의 모든 패킷을 재전송해야 하므로 효율성이 낮을 수 있습니다. 이는 네트워크 대역폭의 낭비를 초래할 수 있습니다.

출처:https://ddongwon.tistory.com/81

 

위 그림을 보면 패킷 2번이 중간에 소실되어 에러가 발생하였습니다. 따라서 패킷을 기다리기 위해 타임아웃을 설정하고, 그 시간 내로 ACK가 도착하지 않으면 에러가 발생한 패킷부터 다시 패킷을 전달합니다. 

 

Go Back N 프로토콜은 신뢰성 있는 데이터 전송을 제공하지만, 네트워크의 오류율이 높은 환경에서는 성능 저하가 발생할 수 있습니다. 이러한 상황에서는 Selective Repeat과 같은 더 효율적인 프로토콜이 선호될 수 있습니다.

 

 

 

Selective Repeat

"Selective Repeat" (SR)은 데이터 통신에서 사용되는 또 다른 오류 제어 프로토콜로, 신뢰성 있는 데이터 전송을 보장하기 위해 설계되었습니다. 이 프로토콜은 특히 네트워크에서의 패킷 손실이나 오류에 대해 더 효율적으로 대처할 수 있는 방식을 제공합니다. Selective Repeat의 주요 특징과 작동 방식은 다음과 같습니다.

주요 특징

  1. 개별적인 패킷 처리: Selective Repeat은 각각의 패킷을 개별적으로 추적하고 관리합니다. 오류가 발생한 패킷만 선택적으로 재전송됩니다.
  2. 슬라이딩 윈도우 기반: 이 프로토콜 역시 슬라이딩 윈도우 메커니즘을 사용하여 흐름 제어를 수행합니다. 송신자와 수신자 모두 자신의 윈도우를 유지합니다.

작동 방식

  1. 패킷 전송: 송신자는 여러 개의 패킷을 윈도우 크기에 따라 연속적으로 전송합니다. 각 패킷은 고유의 순서 번호를 가집니다.
  2. 개별 ACK 응답: 수신자는 각 패킷에 대해 개별적으로 확인 응답(ACK)을 보냅니다. 순서가 뒤바뀌어 도착한 패킷도 버퍼에 저장하고, 해당 패킷에 대해 ACK를 보냅니다.
  3. 선택적 재전송: 오류가 발생한 패킷 또는 손실된 패킷에 대해서만 송신자가 재전송을 합니다. 이는 네트워크 대역폭을 보다 효율적으로 사용할 수 있게 해줍니다.
  4. 수신자의 버퍼링: 수신자는 순서가 뒤바뀐 패킷을 버퍼에 저장하고, 올바른 순서가 되었을 때 이를 상위 계층으로 전달합니다.

장단점

  • 장점: 오류가 발견된 패킷만 재전송하기 때문에, Go Back N 프로토콜에 비해 네트워크 자원을 효율적으로 사용합니다. 또한, 패킷 손실률이 높은 네트워크 환경에서도 성능이 좋습니다.
  • 단점: 수신자 측에서 각 패킷을 개별적으로 관리하고 버퍼링해야 하기 때문에, 구현이 복잡하고 더 많은 메모리가 필요합니다.

 

출처:https://ddongwon.tistory.com/81

 

위 그림을 보면, 패킷 2번에서 오류가 발생하면, 패킷 2번만 따로 다시 전송합니다. 위와 같은 방식으로 동작하는 것이 Selective Repeat 프로토콜입니다.

 

Selective Repeat 프로토콜은 고속 네트워크와 같이 패킷 손실이 자주 발생하고, 높은 대역폭을 사용하는 환경에서 특히 유용합니다. 이 프로토콜은 네트워크의 오류율에 따라 자원을 보다 효율적으로 사용할 수 있도록 설계되었습니다.

 
 

 

 

TCP(Transmission Control Protocol)

출처:https://velog.io/@averycode/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-TCPUDP%EC%99%80-3-Way-Handshake4-Way-Handshake

 

TCP는 클라이언트와 서버 간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜이며, 네트워크를 통한 신뢰성 있는, 순서대로 이루어지는, 양방향 바이트 스트림 전송을 제공합니다. TCP는 데이터를 성공적으로 전송하고 순서대로 재조립하는 것을 보장하며, 데이터 전송 과정에서 발생할 수 있는 에러(패킷 손실, 순서 뒤바뀜 등)들을 해결합니다.

 

주요 특징

  1. 신뢰성 있는 전송: TCP는 패킷 손실, 오류, 중복, 순서 뒤바뀜 등을 처리하여 신뢰성 있는 데이터 전송을 보장합니다.
  2. 연결 지향적 프로토콜: TCP는 통신을 시작하기 전에 먼저 연결을 설정합니다. 이 과정은 '3-way handshake'라고 불립니다.
  3. 흐름 제어: TCP는 수신자의 버퍼가 넘치지 않도록 데이터 전송 속도를 조절합니다.
  4. 혼잡 제어: 네트워크의 혼잡을 감지하고, 이에 대응하여 데이터 전송 속도를 조절합니다.

작동 방식

  1. 연결 설정 (3-way handshake):
    • 단계 1: 송신자가 수신자에게 SYN 패킷을 보내 연결을 요청합니다.
    • 단계 2: 수신자는 SYN-ACK 패킷을 보내 연결 요청을 수락합니다.
    • 단계 3: 송신자는 ACK 패킷을 보내 연결을 확립합니다.
  2. 데이터 전송:
    • 데이터는 세그먼트라는 단위로 나뉘어 전송됩니다.(세그먼트는 전송 계층에서의 패킷을 의미함)
    • 각 세그먼트에는 순서 번호와 오류 검출을 위한 체크섬이 포함됩니다.
  3. 수신 확인 및 재전송:
    • 수신자는 성공적으로 수신된 세그먼트에 대해 ACK를 보냅니다.
    • 손실된 세그먼트는 타임아웃 후 재전송됩니다.
  4. 흐름 제어 및 혼잡 제어:
    • 송신자는 수신자의 수신 창 크기를 바탕으로 전송 속도를 조절합니다.
    • 네트워크의 혼잡 상태에 따라 전송률을 조절하여 혼잡을 방지합니다.
  5. 연결 종료(4-way handshake):
    • 연결 종료 시에도 양방향 '4-way handshake' 과정을 통해 안전하게 종료됩니다.

 

3-way handshake

3-way handshake는 송신자(Client, 호스트)와 수신자(서버) 두 장치 간에 신뢰성 있는 연결을 설정하는 과정입니다. 이 과정은 데이터 전송이 시작되기 전에 통신 세션을 개시하고, 양 당사자가 데이터를 전송할 준비가 되었음을 확인합니다. 3-way handshake는 아래와 같은 세 단계로 구성됩니다.

 

출처:https://sjlim5092.tistory.com/35

 

1단계: SYN (Synchronize)

  1. 송신자가 초기화: TCP 연결을 시작하려는 호스트(송신자, Client)는 수신자(서버)에게 SYN(Synchronize) 패킷을 전송합니다. 이 패킷은 연결 요청을 나타내며, 송신자의 초기 순서 번호(ISN: Initial Sequence Number)를 포함합니다.
  2. 연결 요청: SYN 패킷은 TCP 연결을 위한 필요한 초기 설정 값들을 수신자에게 알립니다.

2단계: SYN-ACK (Synchronize-Acknowledgment)

  1. 수신자 응답: 수신자(서버)는 송신자의 연결 요청을 받고, SYN-ACK 패킷으로 응답합니다. 이 패킷은 송신자의 SYN 패킷을 수신했음을 확인하는 ACK(Acknowledgment) 플래그와, 수신자의 자체적인 초기 순서 번호를 포함하는 SYN 플래그를 함께 가집니다.
  2. 연결 수락: 이 단계에서 수신자는 자신도 데이터 전송 준비가 되었음을 송신자에게 알립니다.

3단계: ACK (Acknowledgment)

  1. 송신자 최종 확인: 송신자는 수신자의 SYN-ACK 패킷을 받고, ACK 패킷을 전송하여 이를 확인합니다. 이 ACK 패킷은 수신자의 초기 순서 번호를 인정하고, 자신의 다음 순서 번호를 알립니다.
  2. 연결 확립: 이 단계가 완료되면, TCP 연결이 성공적으로 확립되며, 이후 데이터 전송이 시작됩니다.

이 과정에서 클라이언트와 서버 사이에서 3개의 Segment가 교환되는 것을 확인할 수 있습니다. 이것이 바로 3-way handshake의 기본 매커니즘입니다. 양쪽 호스트가 서로의 존재를 확인하고, 연결 매개변수를 협상하며, 데이터 전송을 위한 준비를 합니다. 또한, 이를 통해 무작위 패킷(이전 연결의 잔여 패킷)이 현재 연결에 영향을 미치지 않도록 합니다.

 

 

4-way handshake

4-way handshake는 TCP에서 연결을 종료하는 과정입니다. TCP는 양방향 통신 프로토콜이므로, 연결을 종료할 때는 각 방향의 연결을 개별적으로 종료해야 합니다. 이를 위해 4-웨이 핸드셰이크 과정이 사용되며, 아래와 같은 네 단계로 구성됩니다.

 

출처:https://velog.io/@nnnyeong/Network-TCP-3-way-4-way-Handshake

 

1단계: FIN (Finish) from Initiator

  1. 연결 종료 요청: 연결을 종료하고자 하는 송신자(Client)는 FIN (Finish) 플래그가 설정된 TCP 세그먼트를 수신자(서버)에게 보냅니다. 이는 연결 종료 의사를 표시합니다.
  2. 데이터 전송 종료: 이 단계에서 클라이언트는 더 이상 데이터를 보내지 않겠다는 의미입니다. 그러나, 클라이언트는 여전히 서버로부터 데이터를 받을 준비가 되어 있습니다.

2단계: ACK from Receiver

  1. 첫 번째 응답: 서버는 클라이언트의 FIN 세그먼트를 수신하고, ACK (Acknowledgment)를 전송하여 이를 확인합니다.
  2. 연결 유지: 이 시점에서 클라이언트로부터의 연결은 종료되었지만, 서버는 클라이언트로 데이터를 전송할 수 있습니다.

3단계: FIN from Receiver

  1. 서버의 연결 종료 요청: 서버가 모든 데이터를 전송하고 연결을 종료할 준비가 되면, 자신의 FIN 세그먼트를 클라이언트에게 보냅니다.
  2. 서버의 데이터 전송 종료: 서버는 이 단계를 통해 클라이언트에게 더 이상 데이터를 보내지 않겠다고 알립니다.

4단계: ACK from Initiator

  1. 최종 확인: 클라이언트는 서버의 FIN 세그먼트를 수신하고, 마지막으로 ACK 세그먼트를 서버에게 보내 연결 종료를 최종 확인합니다.
  2. 연결 완전 종료: 이 ACK를 서버가 수신하면, 양방향 TCP 연결이 완전히 종료됩니다.

 

 

TCP 빠른 재전송(Fast Retransmit)

TCP 빠른 재전송(Fast Retransmit)은 TCP 프로토콜에서 사용되는 오류 제어 메커니즘의 일부로, 패킷 손실이 발생했을 때 빠르게 재전송하는 기법입니다. 이는 표준 TCP 재전송 타임아웃(Retransmission Timeout, RTO)에 의존하지 않고, 수신자로부터의 중복된 확인 응답(Duplicate Acknowledgments)을 사용하여 패킷 손실을 감지합니다.

빠른 재전송의 과정

  1. 중복 ACK 수신: TCP 수신자는 순서대로 도착하지 않은 패킷을 감지하면, 가장 최근에 순서대로 받은 패킷의 순서 번호에 대한 ACK를 다시 전송합니다. 이러한 중복 ACK는 패킷 손실의 신호로 간주될 수 있습니다.
  2. 중복 ACK의 역할: 송신자가 연속된 중복 ACK를 수신하면, 이는 특정 순서 번호의 패킷이 손실되었음을 나타냅니다. 일반적으로 TCP는 동일한 순서 번호에 대해 세 개의 중복 ACK를 수신하면 패킷 손실로 판단합니다.
  3. 즉각적인 재전송: 송신자는 재전송 타임아웃을 기다리지 않고 즉시 손실로 추정되는 패킷을 재전송합니다. 이는 네트워크 대기 시간을 줄이고 성능을 개선하는 데 도움이 됩니다.
  4. 혼잡 제어와의 상호작용: 빠른 재전송은 혼잡 제어 메커니즘과 밀접하게 연결되어 있습니다. 패킷 손실이 감지되면, TCP는 네트워크 혼잡을 가정하고 혼잡 윈도우 크기를 줄입니다.

중요성

  • 효율성 향상: 빠른 재전송은 표준 재전송 타임아웃에 의존하는 대신 능동적으로 패킷 손실을 처리함으로써, 전체 네트워크 성능을 향상시킵니다.
  • 네트워크 혼잡 감지: 패킷 손실을 빠르게 감지하고 대응함으로써 네트워크 혼잡 상태를 더 잘 관리할 수 있습니다.

 

혼잡 제어(Congestion Control)

TCP 혼잡 제어(Congestion Control)는 TCP 네트워크에서 데이터 전송 중에 발생할 수 있는 네트워크 혼잡을 관리하고 제어하는 메커니즘입니다. 네트워크 혼잡이란 네트워크 내의 트래픽이 과도해져 라우터가 패킷을 적절히 처리하지 못하고 버려지는 상황을 말합니다. TCP 혼잡 제어는 데이터 전송 속도를 조절함으로써 네트워크 혼잡을 예방하고, 발생한 혼잡을 완화합니다. 주요 혼잡 제어 알고리즘에는 다음과 같은 것들이 있습니다:

1. Slow Start (느린 시작)

  • 작동 원리: 연결 초기에 혼잡 윈도우(cwnd)의 크기를 1로 시작하여, 각 RTT(Round-Trip Time)마다 크기를 두 배씩 증가시킵니다. 이는 지수적인 성장을 의미합니다.
  • 목적: 네트워크의 혼잡 상태를 천천히 탐색하여, 안정적인 전송률을 찾아가는 과정입니다.

2. Congestion Avoidance (혼잡 회피)

  • 작동 원리: 혼잡 윈도우의 크기가 임계값(threshold)에 도달하면, 혼잡 윈도우의 크기를 선형적으로 증가시킵니다. 이는 각 RTT마다 혼잡 윈도우를 1만큼 증가시키는 것을 의미합니다.
  • 목적: 혼잡이 발생하기 쉬운 상황에서 네트워크 상태를 안정적으로 유지하기 위한 것입니다.

3. Fast Retransmit (빠른 재전송)

  • 작동 원리: 연속된 중복 ACK를 수신하면, 해당 패킷을 즉시 재전송합니다. 이는 패킷 손실을 빠르게 감지하는 방법입니다.
  • 목적: 패킷 손실이 혼잡의 신호로 간주되므로, 빠른 재전송을 통해 혼잡 상황에 빠르게 대응합니다.

4. Fast Recovery (빠른 복구)

  • 작동 원리: 빠른 재전송 후, 혼잡 윈도우의 크기를 반으로 줄이고, 혼잡 회피 단계로 이동합니다.
  • 목적: 혼잡 상황에서 빠르게 회복하고, 네트워크를 안정화시키기 위함입니다.

중요성

  • 네트워크 성능 최적화: 혼잡 제어는 네트워크의 성능을 최적화하고, 전송 효율성을 높이는 데 중요한 역할을 합니다.
  • 공정한 자원 분배: 모든 TCP 연결이 네트워크 자원을 공정하게 사용할 수 있도록 합니다.
  • 네트워크 혼잡 예방 및 완화: 네트워크 혼잡을 예방하고, 발생한 혼잡 상황을 효과적으로 관리합니다.

 

 

 

흐름 제어(Flow control)

흐름 제어(Flow Control)는 데이터를 전송하는 송신자와 데이터를 수신하는 수신자 간의 데이터 전송 속도를 조절하는 메커니즘을 말합니다. 흐름 제어의 주 목적은 수신자의 데이터 처리 속도와 버퍼 크기를 고려하여, 송신자가 데이터를 너무 빠르게 보내 수신자가 처리할 수 없는 상황을 방지하는 것입니다. TCP에서의 흐름 제어에는 주로 다음과 같은 기법들이 사용됩니다:

1. 윈도우 기반 흐름 제어

  • 윈도우 크기 조절: TCP는 송신자와 수신자 사이에 '윈도우 크기'(window size)라는 개념을 사용합니다. 이 윈도우 크기는 수신자가 한 번에 처리할 수 있는 데이터의 양을 나타냅니다.
  • 윈도우 크기 조정: 수신자는 자신의 처리 능력과 버퍼 상태에 따라 송신자에게 윈도우 크기를 조정하도록 요청할 수 있습니다. 이를 통해 수신자의 데이터 처리 능력에 맞춰 데이터 전송 속도가 조절됩니다.

2. ACK 기반 흐름 제어

  • ACK 메시지: 수신자는 데이터를 성공적으로 수신하면, 송신자에게 'ACK'(Acknowledgment) 메시지를 보냅니다. 이 ACK 메시지에는 수신자가 다음에 기대하는 데이터의 순서 번호가 포함될 수 있습니다.
  • 데이터 재전송: ACK가 도착하지 않으면, 송신자는 데이터를 재전송합니다. 이를 통해 데이터가 수신자에게 성공적으로 도착했는지 확인합니다.

3. TCP의 흐름 제어 알고리즘

  • TCP는 흐름 제어를 위해 '슬라이딩 윈도우 프로토콜'을 사용합니다. 이는 송신자가 수신자의 윈도우 크기에 맞춰 데이터를 보내고, 수신자가 데이터를 수신할 준비가 되면 윈도우 크기를 조절해 더 많은 데이터를 수신할 수 있도록 합니다.

중요성

  • 버퍼 오버플로 방지: 흐름 제어는 수신자의 버퍼가 넘치는 것을 방지하여 데이터 손실을 최소화합니다.
  • 효율적인 데이터 전송: 송신자와 수신자 간의 데이터 전송 속도를 조절함으로써, 더 효율적이고 안정적인 데이터 전송을 가능하게 합니다.
  • 네트워크 자원의 최적 사용: 네트워크의 자원을 효율적으로 사용하고, 네트워크 혼잡을 방지하는 데 기여합니다.

 

 

 

참고 자료
 

[TCP] 신뢰성 있는 데이터 전송의 원리

네트워킹에서 신뢰성 있는 데이터 전송은 굉장히 중요합니다. 그것의 원리에 대해서 정리하였습니다.

velog.io

 

[컴퓨터 네트워크] 신뢰적인 데이터 전달 프로토콜의 구축

​ 위 그림은 신뢰적인 데이터 전송 연구에 대한 프레임워크이다. 이는 상위 계층 개체에게 제공되는 서비스 추상화는 데이터가 전송될 수 있는 신뢰적인 채널의 서비스로의 추상화이다. ​ 신

brightmango.tistory.com

 

[Network] 신뢰적인 데이터 전송 서비스 추상화와 동작 원리

신뢰적인 데이터 전송의 원리 신뢰적인 채널의 서비스 추상화 상위 계층 객체에게 제공에게 제공된다. 데이터가 전송될 수 있는 신뢰적인 채널의 서비스 추상화이다. TCP 인터넷 애플리케이션에

howudong.tistory.com

 

TCP 흐름제어 기법 살펴보기

안전한 패킷 전송을 보장하기 위한 수단 중 하나, 흐름제어

velog.io

 

패킷 pipelining (go-Back-N, selective repeat)

1. Stop and Wait 앞서 기본적으로 reliable한 패킷 데이터 교환을 위해서는, 우선 패킷을 보내고 그에 해당하는 ACK이 올때까지 기다리는 Stop and Wait 방식을 사용한다고 하였다. 하지만 이 방법은 ACK이

ddongwon.tistory.com

 

[네트워크] TCP/UDP와 3 -Way Handshake & 4 -Way Handshake

TCP / UDP / 3-Way Handshake / 4-Way Handshake

velog.io

 

TCP 3 way handshake 내용 정리

TCP three-way handshake 란? TCP 는 Connection-Oriented (연결 지향) 프로토콜 입니다. 이 말은 프로토콜에 의해 연속적으로 패킷의 상태 정보를 확인하고 유지하는 것을 기본으로 한다고 생각할 수 있습니다

sjlim5092.tistory.com

 

[Network] TCP 3-way, 4-way Handshake

3일만의 네트워크 포스팅이다 오늘은 TCP 에서 연결을 생성하고 해제하는 과정인 3-way handshake, 4-way handshake 에 대해 공부해 보았다 역시나 세부적인 내용까지 정리되어 있는 글을 찾기가 참 어려

velog.io

 

 

TCP/IP (흐름제어/혼잡제어) | 👨🏻‍💻 Tech Interview

최종 수정 : 12/17/2022, 7:23:59 AM

gyoogle.dev

 

728x90
반응형
LIST

'CS' 카테고리의 다른 글

프로토콜(Protocol) - HTTP  (0) 2023.11.08
컴퓨터 네트워크 - OSI 7 Layer - TCP/IP  (0) 2023.11.07