본문 바로가기
컴퓨터 네트워크

네트워크 12강 - TCP part.3

by N.Damgom 2020. 8. 10.

TCP를 소개하는 마지막 글이다. TCP가 커넥션을 맺는 방법과 Congestion Control을 자세히 알아보자. TCP는 신뢰성 있는 전송을 제공하는 것이 기본적인 목적인 만큼 Control에 관해선 할 말이 많다.

 


TCP 연결 관리

  • TCP은 Connection Oriented Protocol이다.
    • 데이터 전송을 보장하는 파라미터들을 각자 설정하기 위해 연결을 맺는다.
  • 2 Way Handshaking의 문제점
    • 클라이언트는 서버가 alive 상태인 것을 확인할 수 있다.
    • 하지만 서버는 클라이언트의 SYN 메세지가 언제 전송된 것인지, 혹은 이미 종료된 연결의 SYN 메시지인 지 알 수 없다.
    • 서버 측도 클라이언트가 alive 상태인 것을 확인하기 위해 3 way Handshaking을 한다.
  • 3 Way Handshaking
    • 클라이언트는 SYN M을 보낸다
    • 서버는 ACK M+1과 SYN N을 보낸다.
    • 클라이언트는 ACK N+1과 경우에 따라서 payload를 실어서 보낸다.
    • 쉽게 설명하자면 클라이언트도 서버가 살아 있는지 확인하고, 서버도 클라이언트가 살아있는지 확인하는 과정이다. 
  • TCP 연결 해제
    • 클라이언트는 FIN flag를 1로 설정하고 보낸다.
    • 서버는 ACK를 보내고 남은 데이터를 전송해준 후 FIN 플래그를 1로 설정해서 보낸다
    • 클라이언트는 서버 측 FIN에 대해 ACK를 보내고 ACK 를 받은 서버는 연결 해제된다.
    • 클라이언트는 ACK가 사라졌을 경우를 대비해 max segment lifetime의 2배만큼 기다렸다가 종료한다.
    • 서버가 보낸 FIN 에 대한 ACK가 사라졌을 경우 서버는 계속 연결을 유지하고 있는 상태가 된다.

 


Congestion Control

  • 애플리케이션의 전송량과 수신측에서 실제로 받는 데이터 양의 비교
    • 애플리케이션이 시간당 점점 많은 양을 보내면 수신 측에서 중복을 제외하고 실제로 받는 양은 점점 늘어나지만
    • Link Capacity의 절반도 차기 전에 Congestion으로 인한 Loss와 불필요한 Retransmission으로 실제로 받는 양은 급격히 줄어든다.
    • 따라서 혼잡을 피해 적당히 보내는 것이 중요하다.
  • Congestion Control의 두가지 방법
    • End to End Approach : End System에서 Congestion Control을 한다.
    • Network Assisted : Network가 Congestion Control을 한다.
    • 코어는 전송만 담당해야 한다는 인터넷의 원칙에 따라 TCP는 End to End Approach를 사용한다.
  • AIMD : Additive Increase Multiplicate Decrease (마치 주식투자 같다.)
    • CWND : Congestion Window
      • 지난 포스팅에서 여러 번 설명했던 CWND에 대해 더 자세히 알아보자
      • CWND : RWND를 무시할 때 송신 측이 ACK 없이 보낼 수 있는 data의 크기이다.
    • CWND를 더해나가다가 Loss가 발생하면 (3 duplicated ack, timeout으로 탐지) 확 줄인다.
    • 초기 CWND는 작은 값이므로 Slow Start라고 한다.
    • Tahoe mode : CWND를 1 MSS로 줄이고 다시 Exponential 하게 증가한다.
    • Reno mode : CWND를 현재 CWND의 반으로 줄이고 선형적으로 증가시킨다.
      • ssthreshold와 CWND의 값이 같게 되어 혼잡 회피(Congestion Avoidance) 단계부터 시작한다.
  • TCP Slow Start
    • 초기 CWND는 1 MSS이다. (Slow 한 상태)
      • MSS : Maximum Segment Size
    • 각 ACK를 정상적으로 받을 때마다 CWND를 1 MSS 만큼씩 증가시켜서
    • 1 RTT마다 CWND는 두배씩 증가하게 된다.
  • TCP Congestion Avoidance
    • 혼잡이 일어날 때까지 CWND를 두배씩 증가시킬 순 없다!
    • Slow Start Threshold ( Threshold : 한계점)
      • 줄여서 ssthresh라고 한다.
      • ssthresh의 값은 임의로 설정된 값이다.
      • CWND가 ssthresh보다 커지면 Congestion Avoidance로 진입한다.
      • Congestion Avoidance에서는 CWND를 1 RTT마다 1 MSS 씩 늘려나간다.
      • Loss가 발생하면 ssthresh는 현재 CWND의 절반이 된다.
      • 그러므로 Reno 모드에서는 Loss 발생 시 혼잡 회피 단계부터 시작하게 된다.
  • 시간에 따른 CWND는 톱니 모양이다.
    • TCP의 평균 전송량은 (3/4)*(평균 CWND/RTT)가 된다.
  • TCP Throughput의 정확한 계산
    • (1.22*MSS) / (RTT * root(L))이다.
    • 빠른 속도를 유지하려면 새로운 버전의 TCP가 필요하게 된다.
  • TCP Fairenss
    • Slow Start를 무시하고 두 연결이 링크로부터 같은 거리에 있다고 할 때
    • 두 연결의 처리율은 Capacity 절반에 수렴한다.

 

 

더보기

본 게시물은 kocw 이화여자대학교 이미정 교수님의 컴퓨터 네트워크 강의를 듣고 정리한 글임을 밝힙니다.

내용상 틀린 부분이 있을 수도 있으며 이에 대한 책임을 지지 않습니다.

틀린 부분이나 오타 지적은 댓글로 남겨주세요.

www.kocw.net/home/cview.do?cid=e44bdd9b3a3f9bb5