Computer System/네트워크

[네트워크] 10강 전송 프로토콜: UDP와 TCP

쥥이 2025. 1. 3. 02:31
출처  성균관대학교 안성진 교수님, [KMOOC 강의] 네트워크의 기초, "10. 전송 프로토콜"

 

전송 계층

전송 계층은 프로세스와 프로세스간 통신을 관장하는 계층이다.

*데이터 링크 계층: 노드와 노드의 통신 node-to-node delivery (MAC 주소, 프레임 전달)
 - 노드간 데이터 전송 시 오류 제어가 핵심
*네트워크 계층: 모든 노드를 거친 최종 송신자와 수신자 사이의 통신 host-to-host delivery (IP 주소, 패킷 전달)
 - 패킷 전달의 라우팅(경로 설정)이 핵심
*전송 계층: 호스트 안 프로세스간 메시지 전달 process-to-process delivery (포트 번호, 세그먼트 전달)
 
네트워크 계층을 통해 호스트에 정보를 전달했다면, 전송 계층을 통해 포트 번호를 확인하여 호스트 내 특정 프로세스로 정보를 보낸다.
 

클라이언트-서버 구성

프로세스간 통신은 클라이언트-서버 구성을 통해 이루어진다.

 
포트 번호는 전송 계층에서 사용하는 주소이다. 특정 호스트에서 실행되는 프로세스를 구분하기 위해 사용한다.
포트 번호는 16비트 정수로서 0~65535 사이의 값을 가진다.
 
클라이언트 프로그램의 포트 번호

  • 운영체제에 의해 선택됨
  • 일시적으로 할당되고 사라짐
  • 임시 포트 번호 ephemeral port number라고 함

서버 프로그램

  • 인터넷에서 식별을 위해 고정적으로 할당되고 모두 알고 있는 포트 번호르 ㄹ가짐
  • 알려진 포트 번호 well-known port numbers라고 함

포트 번호

IANA (Internet Assigned Numbers Authority)는 포트번호를 3개의 영역으로 구분

 
Well-known-ports

  • 0~1023이 할당됨
  • 인터넷 서비스를 위해 사용됨

Registered ports

  • 1024~49151의 범위를 가짐
  • 특정 응용을 위해 (포트 번호의 중복을 방지하기 위해) 기업이 사용함

Dinamic ports

  • 49152~65535의 범위를 가짐
  • 등록되거나 통제되지 않음
  • 임시 포트로 이용됨

UDP (User Datagram Protocol)

UDP는 비연결형, 비신뢰성 전송 프로토콜이다.

  • 전송하던 패킷에 문제가 생기면 바로 폐기한다.
  • 흐름제어나 에러제어가 없다.
    -> 수신자는 수신 메시지로 오버플로우될 수 있다.
    -> 송신자는 메시지가 유실되거나 중복되는지 알 수 없다.
  • 연결 설정이나 종료 과정이 없다.
  • 데이터그램들 사이에 서로 관련이 없고 번호가 붙지 않는다.
  • 각 UDP 데이터그램은 서로 다른 경로로 전달된다.

장점
오버헤드가 작아서 효율적이다.
 
UDP를 사용하는 프로토콜

UDP 헤더
UDP 헤더는 8바이트의 고정된 크기를 가진다. 

 
체크섬의 계산은 선택 사항이다. 값이 계산되지 않으면 해당 필드의 값은 0이 된다.
체크섬은 UDP 헤더 8바이트로 계산하는 것이 아니다. 가상 헤더를 만들어서 계산하는 것이다. 가상 헤더는 IP 프로토콜 헤더에서 몇 개를 빼서 만든 것이다. - 송신자 IP 주소, 목적지 IP 주고, 프로토콜 필드, 전체 길이 필드
IP 헤더가 잘못되면 잘못된 호스트나 잘못된 전송 계층 프로토콜로 전달되므로 한 번 더 검사하는 것이다.
 
UDP 세그먼트
 

 
UDP의 사용

  • UDP는 간단한 요청-응답 서비스에 적합하다. 연결 설정/해제 과정의 오버헤드가 없기 때문이다.
  • 응용 프로그램이 자체적으로 내부 흐름제어와 에러제어를 하는 경우에 전송 계층에서 중복 검사할 필요 없기 때문에 적합하다.
  • 멀티캐스팅에 적합하다. 그룹에 속한 모든 시스템과 연결 설정할 필요가 없다.
  • SNMP와 같은 관리 시스템에서도 사용한다. UDP는 RIP에서 사용된다.

TCP (Transport Control Protocol)

TCP는 연결 지향 서비스, 신뢰성 있는 서비스를 제공한다.
아래에 있는 계층 인터넷 프로토콜에서 사용하는 IP 프로토콜이 비신뢰 프로토콜이라면, 전송 계층의 TCP 프로토콜은 오류가 나거나 손실이 난 패킷을 복구해준다. 순서 제어도 해준다.

  • 연결 지향 서비스: 연결 설정과 해제 과정이 존재한다.
  • 신뢰성 있는 서비스: 데이터의 안전한 도착을 확인한다. ACK를 받음으로써 확인한다.
  • 전이중 통신 (Full duplex): 보내고 받고가 동시에 됨
  • 스트림 전달 서비스: TCP는 데이터를 바이트의 나열로 전달한다. 

TCP를 사용하는 프로토콜
 

 
원격 접속 시 로컬에서 입력한 내용이 원격 서버에도 똑같은 순서로 가야하기 때문에 TELNET은 TCP를 사용한다.
이메일도 패킷화돼서 보내진 것이 순서대로 가야되기 때문에 SMTP는 TCP를 사용한다.
DNS는 UDP를 먼저 써보고 잘 안 되면 TCP를 쓴다.
 
스트림 전달 서비스
TCP는 효율성을 위해 여러 바이트를 블록으로 구성된 세그먼트로 만들어 전송한다.
TCP는 바이트들이 바이트 순서대로 물 흐르듯이 가게 해준다.

 
TCP 특징

  • 흐름 제어에러 제어를 위해 모든 바이트에 번호를 부여한다.
  • 세그먼트의 순서 번호는 해당 세그먼트가 나르는 데이터의 첫 번째 바이트 번호이다.
  • ACK 번호는 누적 값으로 수신해야 할 다음 바이트 번호이다. 이전의 모든 바이트를 안전하게 받았음을 의미한다.

TCP 세그먼트

 
TCP 헤더는 20바이트이며, 옵션이 있으면 60바이트까지 늘어날 수 있다. 4바이트 단위로 표현한다.
제어 필드는 이 TCP 세그먼트가 어떤 세그먼트인지 표현한다.동시에 여러 비트가 설정될 수 있다.
 
URG

  • Urgent pointer (TCP 데이터 중 어디까지 급한 데이터인지 표시) is valid
  • 해당 세그먼트에 우선순위를 부여준다.
  • ACK: Acknowledgement is valid - 수신 잘 받았음

PSH

  • Request for push
  • 송신 TCP가 수신 TCP에게 버퍼링을 하지 말고 즉시 데이터를 응용 프로그램에게 전달할 것을 요구하는 것.
  • 지연된 전송은 대화식 응용 (Interactive applications)에서 바람직하지 않음. Telnet처럼 바로바로 데이터를 주고받아야 하는 상황에서 사용함.

RST

  • Reset the connection - 연결 재설정
  • 비정상적인 상황이나 오랫동안 통신이 없으면 현재의 연결을 끊는다.
  • 데이터에 대한 오류를 검사하여 재전송을 통해 복구를 수행한다.
  • TCP에서 체크섬은 강제사항이다. UDP에서와 같은 가상헤더 + TCP 전체 헤더를 대상으로 체크섬을 계산한다.

 
SYN

  • Synchronize sequence numbers - 연결 설정

FIN

  • Terminate the connection - 연결 종료

 
TCP의 연결 설정: 3단계 메시지 교환 Three-way handshake

  • 1단계: 클라이언트는 연결을 요청하는 SYN 세그먼트를 전송한다.
  • 2단계: 서버는 SYN과 ACK를 포함하는 세그먼트로 응답한다.
  • 3단계: 클라이언트는 ACK를 보낸다.

TCP의 연결 해제: 3단계/4단계 메시지 교환
제어필드의 FIN을 사용하여 연결을 해제한다.
4단계 메시지 교환을 통한 연결 해제는 half-close 상태를 만들어 수신은 가능하게 만든다. 아직 보낼 데이터가 남아 있을 수 있는 경우를 대비한 것이다.

3단계 메시지 교환을 통한 연결 해제는 즉시 연결을 종료한다.

 
TCP의 흐름 제어 Flow Control
수신 호스트에 데이터를 너무 많이 보내면 버퍼 오버플로우가 일어날 수 있다. 수신 호스트는 바이트 단위의 윈도우 크기 (수신 가능한 데이터 양)을 송신 호스트에게 보낸다. 윈도우 크기는 시간에 따라서 변할 수 있다. TCP는 슬라이딩 윈도우 프로토콜을 이용한다.