Just do IT
article thumbnail

TCP 통신

   * TCP 통신 과정

   * 흐름 제어

   * 혼잡 제어

 

TCP 통신 과정

   * 3 way handshake : TCP는 연결 지향 프로토콜로 두 호스트가 통신하기 전에 연결을 위한 관계를 수립

 

   * 4 way handshake : 연결을 종료

 

   * TCP 상태 전이도 - Client

 

   * TCP 상태 전이도 - Server

 

   * TCP 타이머 - Retransmission

      - 송신측이 패킷을 매번 전송할 때 카운트

      - RTO (Retransmission Timeout)내 ACK 응답이 오지 않으면 재전송

      - RTO 는 RTT(Round Trip Time)에 따라서 가변적으로 변함

      - SRTT(Smoothed Round-Trip Time), RTTVAR (Round-Trip Time Variation)

      - alpha = 1/8, beta = 1/4, R = 측정된 RTT 값, G = clock granularity

      - RTTVAR = (1 - beta) * RTTVAR + beta * | SRTT - R |

      - SRTT = (1 - alpha) * SRTT + alpha * R

      - RTO = SRTT + max (G, 4*RTTVAR)

      - https://tools.ietf.orh/rfc/rfc6298.txt

 

   * PTT - PCAP

      - Wireshark > Menu > Statistics > TCP Stream Graph > Round Trip Time graph

 

   * TCP 타이머 - Persistence

      - 윈도우 사이즈 관련 타이머

      - 수신측에서 용량 부족으로 윈도우 사이즈 없음을 보내고 다시 용량에 여유가 생기면 송신측에 요청

      - 중간에서 윈도우 사이즈 > 0 을 보내는 ACK이 유실되면 서로 통신 간 문제 발생

      - 수신측 위도우 사이즈 = 0을 보낼 경우 Persistence 타이머 가동 - RTO

      - Persistence 타이머가 종료되면 Probe(ACK 재전송 요청)를 보내고 타이머 재가동

      - 다시 타이머가 종료되기 전에 ACK을 수신 못하면 시간을 2배로 늘리고
         Probe 재전송

      - 타이머의 임계치는 60초이다

 

   * TCP 타이머 - Time waited

      - TCP 연결 종료 후에 특정 시간만 연결을 유지

      - MSL(Maximum Segment Lifetime) = 120초, TIME_WAIT = 2MSL

      - 다른 연결이 맺어진 상태에서 이전 연결의 지연 / 중복 패킷 도착으로 인한 문제 발생

 

   * TCP 타이머 - Keepalive

      - TCP 연결 유지 타이머

      - TCP 연결을 맺고 수신측에서 2시간 동안 송신하는 패킷이 없으면 수신측은 75초 단위로
         Probe 전송

      - Probe 9개를 보내고 응답이 없으면 연결 종료

      - Probe 9개 이전에 응답이 있으면 타이머는 재 설정됨

 

흐름 제어

   * Flow Control : 송신과 수신측의 데이터 처리 속도 차이 해결

   * Sliding Window 기법, Window = 데이터 전송을 위한 버퍼

   1. 버퍼 사이즈 중 Window = 4

   2. TCP Data중 1을 프로세스에서 Read 처리

   3. Window Size = 5, 송신측에서 Size 확인 후 데이터 전송

   * 윈도우 사이즈 = 마지막 수신한 데이터 - 프로세스가 처리한 데이터

 

혼잡 제어

   * Congestion Control : 수신측으로 유입되는 트래픽의 양이 정해진 대역폭을 넘어가지 않도록 제어

   1. AIMD (Additive Increase / Multiplicative Decrease)

      - 패킷 전송시 문제 없으면 Windows size 1씩 증가, 타임아웃 또는 loss시 패킷 속도 1/2 감소
         , 초기에 높은 대역폭 사용 불가, 미리 혼잡 상태 감지 불가

   2. Slow Start

      - 패킷 전송시 문제 없으면 Windows size 2배씩 증가, 혼잡 상태 발생 시 1로 변경
        , 사전 혼압 상태를 기록하고 Windows size 절반까지 2배씩 증가 후 1씩 증가

   3. Fast Retransmit - TCP Tahoe / Fast Recovery - TCP Reno

      - 수신측에서 먼저 와야 하는 패킷이 오지 않고 다음 패킷이 오게 되어도 송신측에 ACK 보냄
         , 송신측은 타임아웃 시간을 기다리지 않고 중복된 순번의 패킷을 3개 받으면 재전송

   4. 개선된 Fast Retransmit / Fast Recovery

      - TCP New Reno, SACK (TCP Tahoe + Selective Retransmit)

 

 정리

   * TCP는 초기 연결은 3 way handshake로 정상적인 연결 종료는 4 way handshake을 사용한다

   * TCP 타이머는 Retransmission, Persistence, Time waited, Keepalive가 있다

   * Flow Control은 송신과 수신측의 데이터 처리 속도 차이를 해결하는 방법

   * Congestion Control은 수신측으로 유입되는 트래픽의 양이 정해진 대역폭을 넘어가지 않도록 제어

 

출처 : 제로베이스

'공부 Note > 네트워크' 카테고리의 다른 글

Chapter 06 TCP와 NAT (4)  (0) 2022.02.24
Chapter 06 TCP와 NAT (3)  (0) 2022.02.24
Chapter 06 TCP와 NAT (1)  (0) 2022.02.24
Chapter 05 동적 라우팅 (3)  (0) 2022.02.24
Chapter 05 동적 라우팅 (2)  (0) 2022.02.24
profile

Just do IT

@AmyG

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!