풀스택서비스네트워킹

[풀스택서비스네트워크] - 2주차 : OSI Architecture L4 (2)

utf-8 2025. 3. 24. 16:50

Transmission Control Protocol (TCP)

1. 개념

  • 연결 지향형(Connection-Oriented) Transport Protocol
    • 통신을 시작하기 전에 가상의 연결(Virtual Connection) 을 생성
  • 흐름 제어(Flow Control), 오류 검출 및 복구(Error Detection & Recovery) 기능 제공

2. TCP의 데이터 전송 특징

  • 스트림 지향(Stream-Oriented)
    • 연속된 바이트 스트림 으로 데이터를 처리
  • 버퍼 (Buffer)
    • 송신자(Sending)와 수신자(Receiving) 간 처리 속도 차이를 고려해 버퍼(Buffer) 사용
    • 원형 큐(Circular Queue) 형태로 관리
    • 보낸 데이터는 수신자의 응답(ACK) 을 받을 때까지 Sending Buffer에 유지
    • 에러가 발생하면 재전송(Retransmission) 가능

3. TCP 서비스 특징

  • Full-Duplex 서비스
    • 양쪽 프로세스가 동시에 송신과 수신 가능
    • Piggybacking: 송신할 데이터에 수신 확인(ACK) 정보도 같이 실어 보냄 → 효율성 증가
  • Connection-Oriented 서비스
    • 연결 설정 과정이 필요 (Three-way Handshake)
    • 양쪽 모두 데이터 전송이 끝나고 버퍼가 비워지면 연결 해제
  • Reliable 서비스
    • 수신 확인(ACK) 메커니즘을 통해 데이터가 정상적으로 도착했는지 확인
    • 데이터 손실, 순서 오류 발생 시 재전송

Byte Number

  • TCP에서 전송되는 데이터의 각 바이트에 대한 고유 번호

Sequence Number (순서 번호)

  • 세그먼트에 포함된 첫 번째 바이트의 번호

TCP Segment

  • TCP는 데이터를 일정 크기의 세그먼트(Segment) 로 나눠서 전송
  • 각 세그먼트는 데이터 + 제어 정보(헤더) 로 구성

TCP Segment Header 주요 필드

  • Sequence Number: 이 세그먼트에서 처음 전송하는 Byte Number
  • Acknowledgment Number: 수신자가 다음에 기대하는 바이트 번호 (애러 검출 및 복구에 사용)
  • Window Size: 수신자가 한 번에 받을 수 있는 데이터 크기 (흐름 제어에 사용)
  • Control Bits: 세그먼트의 제어 목적 (ACK, SYN, FIN 등)

Control Bits 종류 (대표)

  • ACK : Acknowledgment Number가 유효함을 표시
  • SYN : 연결 설정 요청
  • FIN : 연결 종료 요청

Connection Establishment : 3 - Way Handshake

  • TCP 연결을 설정하는 과정으로, 송신자와 수신자가 서로 통신할 준비가 되었는지 확인하는 절차

[1] SYN 패킷 (연결 요청)

Source Port: 12345  |  Destination Port: 80  |  Sequence Number: 1000  |  ACK Number: 0  |  Flags: SYN = 1, ACK = 0  


[2] SYN + ACK 패킷 (연결 승인)

Source Port: 80  |  Destination Port: 12345  |  Sequence Number: 5000  |  ACK Number: 1001  |  Flags: SYN = 1, ACK = 1  


[3] ACK 패킷 (연결 확립)

Source Port: 12345  |  Destination Port: 80  |  Sequence Number: 1001  |  ACK Number: 5001  |  Flags: ACK = 1  


SYN Flooding Attack

  • 정의: 공격자가 서버에 다수의 SYN 패킷을 보내서, 서버의 연결 요청 처리 리소스를 고갈시키는 공격
  • 공격 방식:
    • IP 주소 위조: 각 SYN 패킷이 다른 클라이언트에서 온 것처럼 보이도록 출발지 IP 주소를 위조.
    • 서버 리소스 소모: 서버는 연결을 기다리며 자원을 점점 소모하게 되고, 결국 정상적인 요청을 처리하지 못하게 됨.

Connection Termination: 4-Way Handshake (Half-Close)

  1. Half-Close 상태:
    • 클라이언트가 FIN 패킷을 전송 → 연결 종료 요청
    • 서버가 ACK로 응답 : 클라이언트 → 서버 방향의 데이터 전송 종료
    • 서버 → 클라이언트 방향의 데이터 전송은 계속 가능
      → 서버는 데이터를 계속 보낼 수 있으며, 클라이언트는 이를 ACK로 응답
  2. 최종 종료:
    • 서버가 더 이상 데이터를 보내지 않으면 FIN 패킷을 전송
    • 클라이언트가 이를 받아 ACK 패킷을 보내면서 연결 종료

TCP - Flow Control

  • 수신 버퍼의 크기에 따라 데이터를 얼마나 보낼 수 있는지 조절하는 방식
  • rwnd (Receive Window) 크기에 맞춰 송신 버퍼에서 데이터를 전송
  • 클라이언트와 서버는 이 정보를 주고받으며 데이터 흐름을 제어

TCP - Normal Operation (ACK Delaying Timer)

  1. 목표:
    • 데이터 전송 속도를 높이기 위해 수신 버퍼의 사이즈를 자주 업데이트하는 것이 중요
    • 이를 통해 데이터를 얼마나 많이 보낼 수 있는지 파악 가능
  2. 문제점:
    • Server로부터 많이 오는 ACK 패킷으로 인해 성능에 부하가 걸림.
    • ACK 패킷을 자주 받는 것이 서버 측에 부하를 주기 때문에 이를 최적화할 필요가 있음
  3. ACK Delaying Timer:
    • ACK Delaying Timer를 사용하면 ACK 패킷을 보내는 주기를 조절하여 부하를 줄일 수 있음
    • 타이머가 짧으면 rwnd 사이즈가 더 빨리 업데이트되어 데이터 전송 속도가 증가함
    • 그러나 타이머를 짧게 설정하면 서버 부하가 증가하므로 Trade-off 관계가 발생
  4. 현대적 관점:
    • 컴퓨터의 프로세싱 성능이 향상되어 타이머를 짧게 설정하는 것이 유리해짐
    • 부하가 증가하더라도 빠른 데이터 전송을 위해 타이머를 짧게 설정하는 것이 일반적

Lost Segment

  • RTO (Retransmission Time Out):
    • 송신자는 데이터(segment)를 보내고 타이머(RTO)를 시작
    • 서버로부터 ACK를 RTO 시간 내에 받지 못하면 해당 데이터를 송신 버퍼에서 꺼내 재전송

  • 동작 예시:
    • 송신자가 Seq: 701–800 데이터 전송 후 타이머 시작.
    • RTO 시간 안에 ACK: 701을 받지 못해 타임아웃 발생.
    • 결과적으로 Seq: 701–800 구간을 Resent(재전송) 한다.

Fast Retransmission

  • 빠른 오류 복구 메커니즘:
    • 송신자가 같은 ACK 패킷을 3번 연속 수신하면, 해당 데이터(segment)가 손실된 것으로 간주하고 즉시 재전송
    • 컴퓨터 프로세싱 속도가 빨라짐에 따라 적합한 기법.

Tahoe TCP - Congestion Control

  • Slow Start 단계:
    • cwnd(혼잡 윈도우)가 지수적으로 증가.
      • cwnd란, 송신측이 ACK를 받기 전에 보낼 수 있는 패킷의 최대 개수.
    • 네트워크가 혼잡하지 않으면 계속 빠르게 성장.
  • Time-Out 발생 시:
    • ssthresh를 현재 cwnd의 절반으로 설정.
    • cwnd를 1로 초기화하고 다시 Slow Start로 돌아간다.
  • Congestion Avoidance 단계:
    • cwnd가 ssthresh 도달 시, 선형 증가(한 번에 1씩 증가)로 전환.
  • 3중 중복 ACK 수신 시:
    • ssthresh는 현재 cwnd의 절반으로 설정, cwnd를 1로 리셋.
    • 이후 다시 Slow Start 단계부터 시작.
    • 참고로, Reno TCP는 3중 중복 ACK 수신 시:
      • Fast Recovery 단계 진입.
      • cwnd를 1로 초기화하지 않고, 성능 저하를 방지하면서 빠르게 복구.