CS

[네트워크] TCP

may_wonhui 2023. 11. 22. 22:40

TCP?

TCP(Transmission Control Protocol)는 네트워크에서 데이터를 안정적으로 전송하기 위한 프로토콜 중 하나

 

 


TCP의 특징?

  • 연결 지향적 (Connection-Oriented)
    • TCP는 통신 시작 전에 먼저 연결을 설정하고(3-way handshake), 
      통신이 끝나면 명시적으로 연결을 해제한다(4-way handshake)
    • 이를 통해 데이터를 안정적으로 전송할 수 있다.
  • 신뢰성 있는 전송
    • 데이터를 전송하는 동안 손실된 패킷이나 오류가 발생하면, 
      이를 감지하고 재전송을 수행하여 안정적인 통신을 제공한다.
  • 흐름 제어(Flow Control)
    • 수신자가 송신자로부터 받을 수 있는 속도보다 빠르게 데이터가 전송되지 않도록 조절하여
      혼잡을 방지하고, 안정적인 통신을 유지한다. 
    • 흐름 제어 방법에는 Stop-and-wait 방식, 슬라이딩 윈도우 방식 등이 있다.
  • 혼잡 제어(Congestion Control)
    • 네트워크 내의 혼잡을 감지하고 적절한 조치를 통해 네트워크 혼잡을 방지
    • 혼잡 제어는 네트워크 성능에 부정적인 영향을 미치는 것을 방지하는 데 중요한 역할
    • 혼잡 제어 방법에는 AIMD, Slow Start 등이 있다.

 

 

 


3-Way Handshake?

 

TCP 연결을 설정하는 과정으로, 송수신자 간에 신뢰성 있는 통신을 위한 초기 단계

 

  • 과정
  1. 송신자(sender, 클라이언트)가 수신자(receiver, 서버)에게 SYN 패킷을 보낸다. (클라이언트 상태는 SYN_SENT)
  2. 수신자가 송신자에게 SYN-ACK 패킷을 보낸다. (서버 상태는 SYN_RCVD)
  3. 송신자가 수신자에게 ACK 패킷을 보낸다. (서버는 연결 상태가 확립되었다는 것을 알고 통신 가능 상태 ESTABLISHED가 됨)

 

 

 

 


4-Way Handshake?

TCP 연결을 해제하는 과정

 

  • 과정
  1. 송신자(sender, 클라이언트)가 수신자(receiver, 서버)에게 FIN(Finish) 패킷을 보낸다.
  2. 수신자가 송신자에게 ACK, FIN 패킷을 보낸다.
  3. 송신자가 수신자에게 ACK 패킷을 보낸다.
  4. 수신자가 안전하게 연결을 종료하고 송신자에게 FIN 패킷을 보낸다.

 

 

 

 


TCP 빠른 재전송 (Fast Retransmit)?

TCP의 빠른 재전송은 손실된 패킷을 빠르게 감지하고 재전송하는 메커니즘.

(서버 측에서는 다음 받을 패킷에 대한 ACK를 전송하는데, 예를 들어 클라이언트 측에서 1,2,3,4,5 패킷을 보냈다고 했을 때 서버는 ACK(2), ACK(3) .. 을 차례로 전송한다. 서버 측에서 3번 패킷을 받지 못하고 4번 패킷과 5번 패킷을 성공적으로 받아도 3번 패킷을 받지 못했기 때문에 ACK(3)을 반복적으로 전송하게 된다. 이렇게 중복으로 3번의 ACK 요청이 클라이언트에게 가면 클라이언트는 타임 아웃 전에 다시 3을 재전송한다.)

 

  • 일반적으로 TCP는 패킷의 송수신을 확인하기 위해 ACK 를 사용
  • 만약 송신자가 특정 패킷에 대한 ACK를 기다리고 있는데,
    해당 ACK를 수신하지 못하면 패킷이 손실된 것으로 간주하고 빠른 재전송을 수행 (타임아웃 시 재전송)
  • 빠른 재전송이 필요한 경우 수신자는 손실된 패킷에 대한 ACK를 중복으로 3번 전송하게 되는데,
    이 경우 타임 아웃까지 기다리지 않고 손실된 패킷을 재전송하는 것을 의미한다.

 

 

 

 


혼잡 제어 (Congestion Control)?

혼잡 제어는 네트워크에서 발생할 수 있는 혼잡을 관리하고 효율적인 데이터 전송을 유지하기 위한 메커니즘.

(네트워크에서의 혼잡-패킷 손실 등-이 발생하면 이를 처리할 수 있는 알고리즘 AIMD, Slow Start 등을 사용하여 이를 해결하고 제어)

  • 혼잡: 네트워크에서의 전송량이 네트워크가 처리할 수 있는 용량을 초과할 때 발생하며,
    패킷 손실과 지연을 유발할 수 있다. 
  • TCP는 혼잡 제어를 위해 AIMD, Slow Start를 주로 사용한다.
    • AIMD (Additive Increase Multiplicative Decrease)
      • TCP에서 서버는 윈도우 크기 조절을 통해 네트워크 혼잡을 감지하고 대응
      • 윈도우 크기를 점차적으로 증가시키면서 대역폭을 테스트 (Additive Increase)
      • 혼잡이 감지되면(패킷 손실) 윈도우 크기를 반으로 줄여서 혼잡을 완화
    • Slow Start
      • AIMD와 달리 손실된 패킷이 발생하기 전까지 윈도우 크기를 지수 함수 꼴로 증가시킨다.
      • 혼잡이 감지되면 윈도우 크기를 1로 설정하여 혼잡을 완화
    • Fast Recovery (빠른 복구)
      • 패킷 손실이 감지되면 윈도우 크기를 반으로 줄이는 AIMD를 수행하지 않고 현재의 윈도우 크기를 유지
      • 손실된 패킷에 대한 ACK를 수신하면, 해당 패킷부터 다음 패킷들을 빠르게 재전송
      • 재전송한 패킷에 대한 ACK를 수신하면,
        서버는 현재의 윈도우 크기를 유지하고 패킷 손실 이전의 혼잡 윈도우 크기로 돌아감
      • 이를 통해서 패킷 손실로 인한 대역폭 감소를 최소화할 수 있다.

 

 

 


흐름 제어 (Flow Control)?

흐름 제어는 네트워크에서의 전송 속도를 조절하여 receiver가 처리할 수 있는 속도에 맞추는 메커니즘.

흐름 제어를 통해 데이터 전송의 안정성과 효율성 향상

(서버는 본인의 버퍼 사이즈를 클라이언트에게 전송하고, 클라이언트는 해당 버퍼 사이즈에 맞게 윈도우 크기를 조절-슬라이딩 윈도우 방식-하여 네트워크에서의 전송 속도를 조절한다)

 

  • TCP는 흐름 제어를 위해 Stop-and-wait, Sliding window 방식을 주로 사용한다.
    • Stop-and-wait
      • 클라이언트는 패킷을 보내고, 보낸 패킷에 대한 ACK를 서버로부터 받으면 다음 패킷을 전송한다.
    • Sliding window
      • 클라이언트는 패킷을 서버가 정의한 윈도우 크기 내에서 전송한다.
      • 서버는 받은 패킷의 ACK를 전송하고, 윈도우를 이동시켜서 새로운 데이터를 받는다.

 

 

 


에러 복구 - 재전송(ARQ, Automatic Repeat reQuest)?

에러 복구를 위한 통신 프로토콜인 ARQ의 종류에는

Stop-and-wait ARQ, Go-back-N ARQ, Selective Repeat ARQ 등이 있다.

 

  • Stop-and-wait ARQ
    • 클라이언트는 한 번에 하나의 프레임을 전송하고, 서버로부터 ACK를 받으면 다음 데이터를 전송한다.
    • ACK를 받지 못하면 이전 프레임을 재전송한다.
    • 흐름 제어가 없기에 효율성이 낮을 수 있다. (효율성이 낮아 대역폭 활용도가 떨어진다는 단점이 있다.)
    • 적은 대역폭에서 활용하기 좋다.
    • 프레임 크기가 작고 전송 속도가 빠를 때 사용하기 좋다.
  • Go-back-N ARQ
    • 클라이언트는 여러 개의 프레임을 연속적으로 전송하고, 서버는 정상적으로 받은 마지막 프레임의 번호를 사용한 ACK를 전송한다.
    • 클라이언트는 ACK를 받지 못하면 해당 ACK 이후의 모든 프레임을 재전송한다.
    • 손실된 프레임 이후를 모두 재전송하므로 구현이 비교적 단순하다는 장점이 있다.
    • 손실된 프레임 이후를 모두 재전송하므로 복구 속도가 비교적 빠르다는 장점이 있다.
    • 오류가 발생할 경우 많은 데이터를 재전송해야하는 단점이 있다. (불필요한 데이터까지 모두 전송하므로 오버헤드 발생 가능)
  • Selective Repeat ARQ
    • 클라이언트는 여러 개의 프레임을 연속적으로 전송하고, 서버는 정상적으로 받은 프레임의 번호를 사용하여 ACK 전송한다.
    • 클라이언트는 ACK를 받지 못하면 해당 ACK 이후의 특정 프레임만 재전송한다.
    • 오류가 발생한 프레임만 재전송하므로 효율적이다.
    • 구현이 복잡하고, 복구 속도가 느리다는 단점이 있다.
  • Go-Back-N ARQ는 단순하고 효율적이지만 오버헤드가 발생할 수 있으며, Selective Repeat ARQ는 정확성과 효율성 면에서 더 뛰어나지만 복잡성이 높을 수 있습니다.

'CS' 카테고리의 다른 글

[네트워크] 쿠키, 세션, 토큰 외  (1) 2023.12.06
[네트워크] IP 프로토콜  (2) 2023.11.29
[네트워크] DNS, UDP  (0) 2023.11.15
[네트워크] HTTPS  (0) 2023.11.13
[네트워크] HTTP 프로토콜  (0) 2023.11.08