풀스택서비스네트워킹
[풀스택서비스네트워킹] - 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 컴퓨터 내에서 어떤 프로그램이 이 메시지를 받을지 결정.
- A 컴퓨터의 카카오톡 앱이 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
→ 클라이언트의 통신을 위해 임시로 랜덤 할당하는 포트
- Well-known Ports (0 ~ 1,023)
소켓 주소 (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 Address로 컴퓨터(호스트)까지만 도착할 수는 있지만,
- 즉, 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)
- 실시간 스트리밍