[Network] TCP & UDP

do_it·2025년 9월 4일

network

목록 보기
4/12
post-thumbnail

TCP (Transmission Control Protocol)

  • 전송 계층(Transport Layer) 프로토콜
  • 연결 지향형(connection-oriented)
    • 통신을 시작하기 전에 송신자와 수신자가 연결을 맺음
  • 신뢰성 있는 데이터 전송(reliable transmission) 제공

TCP의 특징

  1. 연결 지향형
    통신 전에 3-way handshake로 연결을 설정
  2. 신뢰성
    데이터 손실, 중복, 순서 뒤바뀜을 감지하고 보정
  3. 흐름 제어
    수신자가 처리할 수 있는 만큼만의 데이터를 전송
  4. 혼잡 제어
    네트워크 혼잡 시 전송 속도를 조절
  5. 세그먼트 단위 전송
    데이터는 세그먼트로 나누어 전송

TCP의 동작 과정

  1. 연결 설정 (3-way handshake)
  2. 데이터 전송
    데이터를 세그먼트 단위로 나누어 전송
    각 세그먼트에는 시퀀스 번호(sequence number)가 있어 순서 확인 가능
    수신자가 받은 데이터에 대해 ACK(acknowledgment) 응답 전송
    손실된 세그먼트는 재전송(Retransmission)
  3. 연결 종료 (4-way handshake)

TCP 헤더

: TCP 패킷이 전달될 때 포함하는 제어정보

이미지 출처

  • [Soucre Port] 16 bit : 송신 측 포트 번호
  • [Destination Port] 16bit : 수신 측 포트 번호
  • [Sequence Number] 32 bit: 각 데이터 바이트 순서를 표시하는 번호
    TCP는 연속3적인 바이트 스트림을 전송하므로, 수신자가 어떤 순서대로 데이터를 조립해야 하는지 알아야 함
    3-way handshake에서는 연결 시작 시 초기 시퀀스 번호(ISN)를 서로 교환해서
    이후 데이터 전송에 대한 기준점을 마련함
  • [Acknowledgment Number] 32 bit : 다음에 받을 바이트 번호
    수신자는 ACK를 통해 데이터 손실 여부를 알려줌
    클라이언트 seq = 100, 서버가 ACK = 101 → 클라이언트가 seq=100 바이트를 정상 수신했다고 확인
  • [Data Offset] 4bit : TCP 헤더 길이 (옵션 포함)
  • [Reserved] 3bit: 예약된 필드
  • [Flags(Control bits)] 9bit: TCP 제어 플래그(SYN, ACK, FIN, RST, PSH, URG 등)
    • SYN: 연결 요청
    • ACK: 수신 확인
    • FIN: 연결 종료
    • RST: 연결 리셋
    • PSH: 수신 즉시 데이터 처리
    • URG: 긴급 데이터 표시
  • [Window Size] 16 bit: 흐름 제어: 수신 가능한 바이트 수
  • [Checksum] 16 bit: 오류 검출용 체크섬
  • [Urgent Pointer] 16 bit: URG 플래그가 설정된 경우 긴급 데이터 위치
  • [Options] 가변: 선택적 기능 (최대 세그먼트 크기, 타이머…)

TCP 3-way handshake


이미지 출처

  • 연결 설정 : 안전한 통신 채널 만들기

Client Server
| ----- SYN(seq=x) ---> | (클라이언트 연결 요청)
| <--- SYN-ACK(seq=y, ack=x+1) --- | (서버 승인)
| --- ACK(seq=x+1, ack=y+1) ---> | (클라이언트 확인)

  1. SYN (Synchronize)

    Client ----SYN(seq = x)----> Server

  • 클라이언트 → 서버 : 연결 요청
  • SYN 플래그가 설정된 TCP 패킷 전송
  • 클라이언트는 자신의 초기 시퀀스 번호(ISN, Initial Sequence Number)를 함께 보냄
  1. SYN-ACK (Synchronize + Acknowledge)

    Client ----ACK(seq = x+1, ack = y+1)----> Server

  • 서버 → 클라이언트
  • 서버가 클라이언트 요청을 승인하고, 자신의 초기 시퀀스 번호를 보냄
  • 동시에 클라이언트 SYN을 확인했다는 의미로 ACK 번호 = x+1 전송
  1. ACK (Acknowledge)

    Client ----ACK(seq = x+1, ack = y+1)----> Server

  • 클라이언트 → 서버
  • 클라이언트가 서버 SYN을 확인했음을 알림
  • ACK 번호 = y+1
  • 연결 설정 완료 → 양쪽 모두 데이터 전송 가능

3-way handshake에서 시퀀스 & ACK 번호의 의미

단계시퀀스 번호ACK 번호의미
SYN (클라이언트→서버)x-클라이언트 초기 번호 x 설정, 서버에 연결 요청
SYN-ACK (서버→클라이언트)yx+1서버 초기 번호 y, 클라이언트 SYN 확인
ACK (클라이언트→서버)x+1y+1클라이언트가 서버 SYN 확인, 연결 완료

TCP 4-way handshake

  • 연결 종료

Client Server
| --- FIN ---> | (클라이언트 종료 요청)
| <--- ACK --- | (서버 확인)
| <--- FIN --- | (서버 종료 요청)
| --- ACK ---> | (클라이언트 확인, 연결 종료 완료)

  1. FIN (Finish) – 종료 요청
  • 연결 종료를 원하는 쪽이 FIN 플래그를 설정하여 보냄
  1. ACK - 종료 확인
  • 상대방이 FIN을 받고 ACK로 확인
  • ACK 번호 = 보낸 FIN 시퀀스 번호 + 1
  • 이 시점에서 한쪽은 데이터 전송 종료, 다른 쪽은 아직 데이터 전송 가능
  1. FIN - 반대편 종료 요청
  • 상대방도 자신의 데이터 전송이 끝났음을 알리기 위해 FIN 전송
  1. ACK - 최종확인
  • 처음 FIN을 보낸쪽이 ACK를 보내 최종확인
  • ACK 번호 = 상대방 FIN 시퀀스 번호 -1
  • 이제 양쪽 연결이 완전히 종료!

UDP (User Datagram Protocol)

가벼운 비연결형 통신을 제공하는 프로토콜

UDP의 특징

  1. 비연결형 (Conectionless)
    TCP처럼 연결을 먼저 만들지 않음
    바로 데이터 전송 가능
  2. 신뢰성 없음 (Unreliable)
    패킷 손실, 순서 바뀜, 중복 수신에 대해 보장하지 않음
  3. 헤더 구조 간단
    TCP 헤더보다 작아서 처리 속도 빠름
  4. 빠른 전송
    실시간 전송에 유리 (VoIP, 게임, 스트리밍)

UDP 헤더

이미지 출처

  • Source Port (16bit) : 발신 포트
  • Destination Port (16bit) : 수신 포트
  • Length (16bit) : UDP 헤더 + 데이터 길이
  • Checksum (16bit): 데이터 무결성 검사 (선택 가능)

TCP & UDP

항목TCPUDP
연결 방식연결형비연결형
신뢰성보장없음
순서 보장있음없음
속도느림빠름
사용 사례웹, 이메일, 파일 전송게임, VoIP, 실시간 스트리밍

0개의 댓글