TCP와 UDP

parkrootseok·2024년 12월 18일

네트워크

목록 보기
2/10
post-thumbnail

들어가며

TCP/IP의 전송 계층은 두 응용 계층 사이에서 Process-To-Process 통신을 제공하는데, 이때 사용하는 프로토콜인 TCP와 UDP에 대해 알아보겠습니다. 아래 그림을 참고하면 좋을 것 같습니다.

TCP

TCP는 연결 지향성과 신뢰성 있는 전송이라는 특징을 가진 프로토콜로 전이중과 점대점 방식으로 동작합니다.

  • 전이중 (Full-Duplex)
    • 전송이 양방향으로 동시에 발생 가능
  • 점대점 (Point to Point)
    • 각 연결이 정확히 2개의 종단점을 보유

연결 지향

TCP 프로토콜은 다음과 그림과 같이 데이터를 전송합니다.

3-Way-HandShaking

TCP는 연결 지향형 프로토콜로 데이터를 전송하기 전 논리적 연결 과정이 필요합니다. 이를, Connection Set Up 이라고 부르며 다음과 같이 수행합니다.

  1. SYN (클라이언트 -> 서버)
    • SYN 플래그가 설정된 패킷 전송 (시퀀스 번호 포함)
  2. SYN + ACK (서버 -> 클라이언트)
    • SYN, ACK 플래그 설정
    • 시퀀스 번호화 응답 번호를 포함 후 응답
  3. ACK (클라이언트 -> 서버)
    • 응답 확인 후 ACK 패킷 전송

4-Way-HandShaking

연결 지향형인 TCP 프로토콜은 Connection Set Up 과정에서 수행한 연결을 종료해야 할 필요가 있습니다. 이를 4-Way-HandShaking 방법을 통해 다음과 같이 수행합니다.

  1. FIN (클라이언트 -> 서버)
    • FIN 플래그가 설정된 패킷 전송
  2. ACK (서버 -> 클라이언트)
    • 아직 남은 데이터가 존재할 때 ACK 플래그가 설정된 패킷 전송
  3. FIN (서버 -> 클라이언트)
    • 모든 데이터 전송이 끝난 후 FIN 플래그가 설정된 패킷 전송
  4. ACK (클라이언트 서버)
    • ACK 플래그가 설정된 패킷을 보낸 후 연결 종료

신뢰성 있는 전송

신뢰성 있는 전송을 위해 TCP Header의 Checksum, 확인 응답, 타임 아웃 등을 통해 오류 제어, 흐름 제어, 혼잡 제어를 수행합니다. 각 제어들은 다음과 같은 역할을 수행합니다.

  • 오류 제어
    • 훼손(손실)된 세그먼트의 감지 및 재전송
    • 순서에 따라 세그먼트 정렬
    • 중복 세그먼트 감지 및 폐기
  • 흐름 제어
    • 데이터를 보내는 속도와 데이터를 받는 속도의 균형 조절
  • 혼잡 제어
    • 네트워크의 혼잡 상황을 감지하고 이를 완화하기 위해 데이터 전송 속도를 조절

UDP

UDP는 연결 지향성을 갖지 않으며 신뢰성을 낮다는 특징을 가진 프로토콜입니다. TCP와 달리 논리적 연결을 설립하지 않고, 각각의 패킷은 독릭접인 관계를 가집니다. 이러한 단순성은 적은 양의 오버헤드를 가지기 때문에 속도가 매우 빠른 특징을 가지고 있습니다.

UDP는 완전히 신뢰성을 보장하지 않나요?
UDP의 경우 CheckSum 필드를 통해 최소한의 오류 검출은 수행합니다. 이에 따라, 신뢰성이 낮다고 하는 것이 정확한 표현합니다.

예상 질문

TCP란 무엇인가요?

전이중과 점대점 방식

  • 전이중
    • 송수신 동시에 수행 가능
  • 점대점
    • 하나의 연결은 2개의 종단점 보유

연결 지향성

  • 3-Way-HandShaking
    • 논리적 연결 수립
    • SYN -> SYN/ACK -> ACK
  • 4-Way-HandShaking
    • 논리적 연결 종료
    • FIN -> ACK(TIME_WAIT) -> FIN -> ACK

신뢰성 보장

  • Header의 CheckSum, 확인 응답, 타임 아웃
    • 오류 제어
      • 세그먼트 재정렬, 훼손된 세그먼트 재전송
    • 흐름 제어
      • 데이터 송수신 속도의 균형 조절
    • 혼잡 제어
      • 네트워크 상황에 맞는 데이터 전송 속도 제어

UDP란 무엇인가요?

비연결성

  • 패킷은 독립적인 관계를 유지
  • 물리적인 연결은 필요

신뢰성 낮음

  • Header의 Checksum만 확인

TCP, UDP 차이

신뢰성

  • TCP : 높음
  • UDP : 낮음

연결성

  • TCP : 연결 지향
  • UDP : 비연결 지향

전송 순서

  • TCP : 보장함
  • UDP : 보장하지 않음

재전송 여부

  • TCP : 수행
  • UDP : 미수행

통신 방식

  • TCP : 전이중, 점대점(1:1)
  • UDP : 1:1, 1:N, N:N 등

TCP, UDP는 각각 어느 상황에 사용하나요?

성능이 중요한 경우

  • UDP
    • 비디오 스트리밍, 실시간 데이터 전송

안정성이 중요한 경우

  • TCP
    • 파일 전송
profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글