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

네트워크 10강 - TCP part.1

by N.Damgom 2020. 8. 10.

앞으로 세 강에 걸쳐서 TCP에 대해 알아보자. 강의 시간은 총 3 시간 남짓이지만 이 포스팅은 중요 내용을 기억하기 위한 이정표를 제공하기 위한 글이므로 짧게 요약해서 쓰겠다. 하루 중 시간을 조금씩만 투자하면 금방 완강하니 자투리 시간을 내서 꾸준히 들어보기를 권한다.

 


TCP는 Byte Stream

TCP는 메세지를 임시 저장소인 버퍼에 담아서 Flow Control, Congestion Control에 의해 제어되는 속도로 버퍼에 있는 메세지를 전송한다.

  • 버퍼 담는다는 것에 주목해보자.
    • TCP는 잠시 버퍼에 담았다가 전송한다.
    • 버퍼로 인해 메모리에 부담이 커질 수 있다.
    • 잠시 담았다가 전송하므로 Throughput 성능이 떨어진다.
  • Flow Control이란?
    • 수신측에도 TCP 버퍼가 있다.
    • 수신 측 TCP 버퍼가 가득 차도록 송신 측에서 빨리 전송하면 어떻게 될까?
    • 메시지는 기껏 거의 다 와서 유실된다.
    • 커넥션을 맺을 때 / 서로 통신할 때 자신의 남은 버퍼 크기를 전송해서
    • 그 크기만큼 보내지 않도록 조정한다.
  • Congestion Control이란?
    • 라우터에도 버퍼가 있다.
    • 라우터 버퍼가 가득 차면 메시지가 유실되어 수신 측에서 ACK가 오지 않을 것이다.
    • ACK가 오지 않으면 중간 라우터에서 데이터 Loss가 생긴 것 (== Congestion 발생)으로 인식하고
    • 데이터 보내는 속도를 줄인다.

 


 

TCP의 특징과 원리

  • 제공하는 기능들
    • Point to Point (일대일) 연결이다.
    • Reliable, In-Order bytestream이다.
    • Pipelined 되어있다.
    • Full Duplex (동시 양방향 통신)이다.
    • Connection Oriented 통신이다.
    • Flow, Congestion Control을 제공한다.

TCP Segment

출처 : https://www.slideserve.com/redford/the-tcp-segment-header

  • TCP 세그먼트의 헤더는 기본 4바이트 5줄 + Options으로 구성되어있다.
  • 따라서 TCP 세그먼트의 크기는 20byte + a 이다.
  • Src 포트와 Dest포트만 있다. IP 주소는 네트워크 계층 헤더에 있다.
  • Sequence Number : TCP는 Inorder 전송을 위해 데이터에 순서 번호를 붙여서 전송한다.
  • Acknowledgement Number : ACK == 100이면 99까지 데이터를 받았고 100번 데이터를 전송해달라는 것이다. TCP는 누적 ACK를 사용한다.
  • TCP Header Length : Optional 필드가 있으므로 어디까지가 헤더인지 알아야 한다.
  • TCP Control Flags
    • URG : 급한 데이터가 있음을 나타낸다. Urgent Pointer에 값이 있음을 의미.
    • ACK : 1로 세팅되면 ACK에 값이 유효함을 의미한다.
    • PSH : PUSH, 버퍼링 된 데이터를 상위 계층으로 즉시 전송할 것을 의미한다.
    • RST : 연결 리셋 시 사용되는 플래그이다.
    • SYN : 연결 시작 시 송수신 번호 동기화를 위해 사용된다.
    • FIN : 연결 종료를 나타내는 플래그이다.
  • Window Size : ACK를 받지 않아도 전송 가능한 세그먼트의 양이다. Congestion Control을 위한 CWND와 Flow Control를 위한 RWND 중 작은 값을 선택한다. 
    • CWND : Congestion Window. rwnd를 무시할 때 송신 측이 Ack 없이 한 번에 데이터를 보낼 수 있는 크기이다. 작은 값에서 시작해서 점점 늘려나가다 네트워크 상에서 Loss가 일어나면, 즉 중간의 라우터에서 Congestion이 발생해 패킷이 유실되면 CWND를 줄인다.
    • RWND : Receiving Window, 수신 측 TCP 버퍼 여유공간의 크기이다. 여유공간의 크기 이상으로 ACK 없이 데이터를 전송하면 수신 측 버퍼가 가득 찰 수 있으므로 Window는 RWND 보다 작아야 한다.

 


TCP Timeout

  • 어느 정도 시간이 흐른 뒤에도 ACK가 오지 않으면 Loss가 발생했다고 판단할 수 있을까?
  • Timeout 시간이 너무 짧으면 불필요한 재전송이 많을 것이고 너무 길면 Loss가 일어나도 재전송까지 시간이 오래 걸릴 것이다.
  • Timeout시간은 RTT를 이용해서 판단한다.
  • 일정 시간 동안의 RTT 값의 가중평균에 Safety Margin을 더해서 Time-out Interval을 정한다.
    • Time-out Interval = (1-a) * EstamatedRTT + a * SampleRTT + (1-b) * DeviationRTT + b * |SampleRTT-EsstamatedRTT|
    • 일반적으로 a = 0.125, b = 0.25를 사용한다.
    • 최근 추정 값의 오차가 커지면 Interval의 값이 커진다.
    • Interval은 RTT값이 크게 변해도 가중 평균되기 때문에 완만한 그래프를 그린다.
    • Time-out Interval (RTO)를 측정하는 방법은 여러 가지가 있다.

 

더보기

 

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

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

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

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