풀스택서비스네트워킹

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

utf-8 2025. 3. 17. 15:01

Process-to-Process Delivery

  • Transport Layer(4계층)의 역할은,
    • Network Layer 위에서 동작하는 프로그램(Process)데이터 전달을 담당.
    • 에러 처리, 순서 정렬, 흐름 제어 기능
  • 예시:
    • A 컴퓨터의 카카오톡 앱이 B 컴퓨터로 메시지를 보낼 때,
      B 컴퓨터 내에서 어떤 프로그램이 이 메시지를 받을지 결정.
  • 하위 계층과 비교:
    • 2계층 (Data Link Layer): Node to Node (물리적으로 연결된 노드 간 프레임 전달)
    • 3계층 (Network Layer): Host to Host (서로 다른 호스트 간 데이터그램 전달)
    • 4계층 (Transport Layer): Process to Process (프로세스 간 데이터 전달)

Client-Server Paradigm

  • Client:
    • 로컬 장비(Localhost)에서 요청하는 프로세스.
  • Server:
    • 원격 장비(Remotehost)에서 요청에 응답하는 프로세스.
  • 프로세스 간 통신을 위해 정의해야 할 것:
    • Localhost (자기 컴퓨터)
    • Local Process (요청하는 프로세스)
    • Remotehost (상대방 컴퓨터)
    • Remote Process (응답하는 프로세스)

포트 번호의 필요성

  • Network Layer에서는 IP Address를 통해 호스트(컴퓨터)를 식별.
  • 하지만, 하나의 호스트 안에는 여러 애플리케이션(프로그램)동시에 실행 중.
  • 따라서, 어떤 프로그램과 통신할지를 구분하기 위해 Transport Layer에서는 Port Number를 사용.

포트 번호 (Port Number)

  • 범위 : 0 ~ 65,535 (16비트 정수)
  • 구분:
    • Well-known Ports (0 ~ 1,023)
      → 서버가 고정적으로 사용하는 포트 (예: HTTP 80, HTTPS 443)
    • Ephemeral Ports
      → 클라이언트의 통신을 위해 임시로 랜덤 할당하는 포트

소켓 주소 (Socket Address)

  • IP Address + Port Number 조합을 Socket Address라고 부름.
  • 통신 식별은 소켓 주소 쌍으로 관리:
    • (클라이언트 IP : 클라이언트 포트) ↔ (서버 IP : 서버 포트)

Multiplexing (다중화)

  • 송신 측(보내는 쪽)에서 여러 개의 프로세스(프로그램)로부터 데이터를 받아서
    하나의 네트워크 연결로 합치는 과정.
  • 즉, 여러 애플리케이션 데이터 → 하나의 전송 경로로 보내기.
  • Transport Layer에서 각 데이터에 포트 번호를 붙여 구분.

Demultiplexing (역다중화)

  • 수신 측(받는 쪽)에서 네트워크로 받은 데이터를 각 프로세스로 나누어주는 과정.
  • 수신한 데이터의 포트 번호를 보고, 어느 프로세스로 보내야 할지 결정.

Connectionless (비연결형, Unreliable)

  • 대표 프로토콜: UDP (User Datagram Protocol)
  • 특징:
    • 데이터를 보내기 전에 연결 설정을 하지 않음.
    • 패킷에 번호 부여 없이 전송 → 순서가 뒤바뀔 수 있음.
    • 패킷 손실/지연/중복 가능성 존재.
    • 흐름 제어(Flow Control), 오류 복구(Error Recovery) 기능 없음.
  • 사용 사례:
    • 일부 데이터 손실이 크게 문제가 되지 않는 서비스 (예: 실시간 스트리밍).
    • 빠르고 단순한 전송이 필요한 서비스

왜 UDP를 사용하는가?

  • UDP는 흐름 제어나 오류 복구를 하지 않는다.
  • 그런데도 사용하는 이유는:
    • IP Address로 컴퓨터(호스트)까지만 도착할 수는 있지만,
      "어떤 프로그램(프로세스)한테 보내야 할지" 구분해야 하기 때문.
    • 프로그램 구분을 포트 번호(Port Number) 로 해결한다.
  • 즉, IP 주소 + 포트 번호 조합을 통해
    특정 프로그램에 데이터 전송이 가능하게 만들어준다.

Connection-Oriented (연결형, Reliable)

  • 대표 프로토콜: TCP (Transmission Control Protocol)
  • 특징:
    • 데이터를 보내기 전에 3-way Handshake를 통해 연결 설정.
    • 패킷에 번호 부여 → 수신 측에서 순서 복원 가능.
    • 흐름 제어, 오류 검출 및 복구(재전송) 지원.
    • 데이터 전송 후 연결을 명시적으로 종료(Release).
  • 사용 사례:
    • 데이터의 정확성과 순서 보장이 필수적인 서비스(예: 파일 전송)

왜 Transport Layer에서 또 흐름/오류 제어를 하나?

  • Data Link Layer(2계층)에서도 흐름 제어와 오류 복구를 하지만,
    이는 "두 노드(장치)" 간에만 보장된다.
  • 그러나 전체 네트워크 경로(여러 라우터, 다양한 네트워크 환경)는
    여전히 불안정하기 때문에 Transport Layer(4계층)에서 종단 간(end-to-end) 신뢰성을 다시 확보해야 한다.
  • 특히 인터넷은 "Best Effort Delivery" → 네트워크 계층은 패킷 손실이나 순서를 신경 안씀.

User Datagram Protocol (UDP)

1. 개념

  • 비연결형(Connectionless), 비신뢰성(Unreliable)
  • 흐름 제어(Flow Control)오류 복구(Error Control) 없음
  • 단순하게 프로세스 간 통신(Process-to-Process Communication) 을 제공
  • Encapsulation/Decapsulation:
    • 애플리케이션 데이터를 UDP 헤더(8바이트)와 함께 캡슐화 → 3계층(IP)에 전달
    • UDP 헤더에는 Source Port Number, Destination Port Number 등.

2. 작동 방식

  • 클라이언트 측:
    • 프로세스가 OS에 포트 번호 요청 → 임시 포트 할당
    • 프로세스는 데이터를 출력 큐(Outgoing Queue)에 쌓음
    • UDP가 출력 큐에서 데이터를 꺼내 UDP 헤더 추가 후 IP에 전달
  • 서버 측:
    • 서버는 Well-known Port 번호로 입력/출력 큐 생성 요청
    • UDP는 서버에 도착한 데이터그램의 Destination Port Number를 확인
    •  만약 해당하는 포트 번호의 입력 큐가 있다면, 데이터를 입력 큐에 저장
    • 서버가 입력 큐에서 데이터를 읽어감.

3. UDP 사용 사례

  • 적은 양의 데이터, 간단한 요청/응답 통신 (빠른 반응이 중요, 데이터 신뢰성 덜 중요)
  • TFTP (Trivial FTP – 자체 흐름/오류 제어 있음)
  • 멀티캐스팅 (Multicasting 전송에 적합)
  • 라우팅 프로토콜 (예: RIP – Routing Information Protocol)
  • 네트워크 관리 프로토콜 (예: SNMP – Simple Network Management Protocol)
  • 실시간 스트리밍