[CS] TCP와 UDP

말하는 감자·2025년 1월 4일

CS

목록 보기
3/33
post-thumbnail

TransportLayer(전송계층/4계층)

목적

  • 신뢰성: 데이터를 순차적, 안정적으로 전달
  • 전송: 포트 번호에 해당하는 프로세스 데이터를 전달

필요성

1. 데이터 전송의 신뢰성 보장

  • 오류 감지 및 수정: 전송 계층은 데이터가 올바르게 수신 되었는지 확인하고, 손실된 패킷을 재전송 하는 기능을 제공
    • 순서 보장: 데이터 패킷이 올바른 순서로 수신 될 수 있도록 관리
      ex. 송신: 123 --> 수신: 321 이런 현상 방지

2. 흐름 제어

  • 전송 계층은 송신자의 전송 속도와 수신자의 처리 속도 간의 균형을 맞춘다. 이로 인해 수신자가 데이터 양을 조절하고, 버퍼 오버플로우를 방지할 수 있다.

3. 혼잡 제어

  • 네트워크에서 발생할 수 있는 혼잡 문제를 처리한다. 전송 꼐층은 네트워크 상태를 모니터링하여, 네트워크가 혼잡할 때 데이터 전송 속도를 조절 가능함

4. 세그먼테이션 및 재조합

  • 데이터는 전송 당시 작은 단위로 나누어져 전송된다(Segementation). 따라서 전송 계층은 이러한 세그먼트를 수신 측에서 다시 조합하여 원래 데이터로 복원하는 역할이 필요함

TCP(Tranmission Control Protocol)

  • 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
  • 데이터의 순차 전송 보장
  • Flow Control(흐름 제어)
  • Congestion Control(혼잡 제어)
  • Error Detection(오류 감지)
  • 양방향 통신(3-way-handshake)
  • PDU: Segment(TCP Header + DATA)

TCP Header

  • 플래그(Flags)
    • ACK: 패킷이 유효하다는 응답
    • SYN: 연결 요청
    • FIN: 연결 종료 요청
      등등

3-WAY-HANDSHAKE

  1. 클라이언트(송신자)가 서버에 접속을 요청하는 SYN 패킷을 보낸다.
  2. 서버(수신자)는 클라이언트의 요청인 SYN패킷을 받고 클라이언트에게 요청을 수락한다는 ACK 패킷과 SYN패킷을 보냄
  3. 이에 클라인트는 다시 ACK 패킷을 보냄
    위의 3번의 패킷 교환 과정을 거쳐 연결을 성립시킴

연결 해제

  1. 클라이언트가 연결을 종료하겠다는 FIN 플래그를 보냄
  2. 클라이언트의 요청(FIN)을 받고 ACK 응답
  3. 데이터를 모두 보낼 때까지 잠시 TIME_OUT(기다림)
  4. 데이터를 모두 보낸 뒤 FIN 플래그를 클라이언트에 보냄
  5. 클라이언트가 FIN 패킷을 확인했다는 ACK를 서버에 보냄
  6. 서버는 ACK를 받고 소켓 연결을 Close하면서 연결 종료

TCP의 문제점

  • 전송의 신뢰성을 보장받는 대신,
    • 매번 Connection을 연결해서 3-way-handshake 만큼의 시간 손실
    • 패킷을 조금만 손실해도 반드시 재전송
      -> UDP의 필요성

UDP(User Datagram Protocol)

  • TCP 보다 신뢰성이 떨어지지만, 전송 속도가 일반적으로 빠른 프로토콜
  • 순차 전송x, 흐름제어x, 혼잡제어x
  • Error Detection
  • 비교적 데이터의 신뢰성이 중요하지 않을 경우 사용 (ex. 영상 스트리밍)
  • PDU: Datagram(UDP Header + DATA)

데이터 전송

  • Best Effort = 결과보장 x
  • 비연결 지향
  • 패킷 기반 전송(데이터그램)
  • 신뢰성 보장 x
    • 오류 검출: 체크섬을 이용한 오류 검출만 수행(무결성 확인)
    • 패킷 손실: 전송 중 데이터그램이 손실되거나, 순서가 바뀌는 경우가 발생 가능
      -> TCP와 달리, 오류 발견시 데이터그램은 폐기되지만 재전송을 요청하거나 복구 불가능

정리 (TCP vs UDP)

profile
주니어개발자(?)

0개의 댓글