Network

[컴퓨터 네트워킹 하향식 접근] 3-1. 트랜스포트 계층: 개요

noahkim_ 2025. 3. 27. 18:00

이석복 님의 KOCW 강의 "컴퓨터 네트워크"를 정리한 글입니다.

* James F. Kurose님과 Keith W. Ross 님의
"컴퓨터 네트워킹 하향식 접근" 책을 교제로 한 강의입니다. (책의 내용은 포함되지 않았습니다)


1. 트랜스포트 계층 서비스 및 개요

트랜스포트 계층

  • 호스트 간의 데이터 전송을 관리하는 역할

 

기능
기능 설명
신뢰성 있는 데이터 전송
- 데이터 전송 중 오류를 검사하고 재전송을 처리하여 신뢰성 있는 통신을 보장합니다.
(underlying network 계층의 부족한 신뢰성 보완)
흐름 제어 및 혼잡 제어
- 네트워크 혼잡과 수신자의 처리 능력에 맞게 데이터 전송 속도를 조절합니다.
다중화 및 역다중화
- 여러 애플리케이션이 하나의 네트워크 연결을 공유할 수 있도록 데이터를 분리하고 재조합합니다.

 

 

세그먼트

  • 트랜스포트 계층에서 전송되는 데이터 단위
  • 애플리케이션 계층에서 보낸 데이터를 세그먼트로 나누어 전송함

 

2. 신뢰성 있는 데이터 전송의 원리

알고리즘

항목 Stop-and-Wait Go-Back-N
Selective Repeat
슬라이딩 윈도우 크기 1
(한 번에 하나의 세그먼트만 전송)
N
(여러 개의 세그먼트를 한 번에 전송)
N
(여러 개의 세그먼트를 한 번에 전송)
세그먼트 전송 방식 한 번에 하나의 세그먼트 전송하고 ACK를 기다림 윈도우 크기만큼 세그먼트를 한 번에 전송하고 ACK를 기다리지 않음
윈도우 크기만큼 세그먼트를 전송하되
ACK에 따라 각 세그먼트를 독립적으로 처리
ACK 처리 방식 각 세그먼트에 대해 개별 ACK 응답 누적 ACK
(현재까지 모든 세그먼트에 대한 ACK)
개별 ACK
(각각의 세그먼트에 대해 ACK 처리)
(SACK 옵션으로 효율적으로 처리)
오류 발생 시 동작 오류 발생 시 해당 세그먼트만 재전송 오류가 발생한 세그먼트부터 뒤의 모든 패킷 재전송 (buffer에 있는 세그먼트 모두 재전송) - 오류가 발생한 세그먼트만 재전송
- receiver는 buffer에 재전송 세그먼트 보관
효율성 비효율적
(세그먼트마다 ACK 응답 대기)
상대적으로 효율적
(여러 세그먼트 동시에 전송)
매우 효율적
(세그먼트별로 처리되어 재전송 최소화)
네트워크 대역폭 사용 낮음
(한 번에 하나의 세그먼트만 전송)
상대적으로 높음
(여러 세그먼트을 한 번에 전송)
높음
(재전송 최소화로 효율적인 대역폭 사용)
복잡성 간단한 구현
(직관적으로 동작)
복잡한 구현
(윈도우 크기 관리 및 누적 ACK)
가장 복잡한 구현
(독립적인 ACK 및 재전송 관리 필요)
타임아웃 및 재전송 타임아웃 발생 시 해당 세그먼트만 재전송 타임아웃 발생 시 문제 세그먼트 이후 모든 세그먼트 재전송
타임아웃 발생 시 문제 있는 세그먼트만 재전송

 

1 sender   seq=42, ack=79, data='C'
2 receiver seq=79, ack=43, data='C'
  • 송신자가 42번 바이트부터 시작하는 데이터 'C'를 보내면서, 수신자가 79번 바이트를 기대하고 있음 (78까지 OK)
  • 수신자가 79번 바이트부터 시작하는 데이터 'C'를 보내면서, 송신자가 43번 바이트를 기대하고 있음 (42까지 OK)

 

신뢰성이 깨지는 경우

문제 유형 설명 수신 측 동작 송신 측 동작
세그먼트
에러 
전송 도중 비트 손상 등으로 세그먼트가 변형됨 - 체크섬 오류 확인 시 세그먼트 폐기
- 이전에 잘 받은 ACK 번호 재전송
- ACK 미수신 시 타이머 만료 후 재전송
- ACK 번호가 다르면 재전송
세그먼트 
유실
네트워크 문제로 세그먼트 또는 ACK이 손실됨 - 데이터 수신 실패 (세그먼트 안 옴)
- 아무 행동 없음 (ACK도 없음)
- 타이머 만료 후 해당 Sequence Number로 재전송
중복 세그먼트  ACK 유실 또는 손상 등으로 송신자가 동일 패킷을 다시 전송하는 경우 - Sequence Number 중복 여부 확인
-> 이미 받은 세그먼트 버림
- 재전송받은 세그먼트에 대해 ACK 응답
- ACK 응답 수신 시, 다음 Sequence Number로 전송 (정상 통신)

 

3. 혼잡 제어의 원리

  • 송신자는 수신 버퍼 상태와 네트워크 대역폭을 고려하여 전송 속도를 조절해야 함

 

속도 조절 요소

요소 설명
수신 버퍼 상태 receive window 필드를 통해 확인 가능
네트워크 대역폭
상태 파악이 어려움 (여러 단말의 전송량에 의해 결정됨)
  • 둘 중 작은 값을 기준으로 전송 속도를 맞춤

 

혼잡 제어의 필요성

  • 인터넷 네트워크는 공유 자원이며, 단말들이 속도를 높이기 위해 많은 데이터를 전송하면 병목 현상이 발생함
  • 네트워크가 막히면, 패킷 유실 및 타임아웃 증가 -> 재전송 발생
  • 재전송이 많아지면 네트워크 혼잡이 가중되어 전송 속도가 더욱 느려짐

 

해결책
  • TCP는 네트워크 상태가 나쁘면 속도를 늦추고, 좋으면 속도를 높임

 

혼잡 상태 감지 방법

  • 네트워크 상황을 파악하고, 혼잡이 발생하면 속도를 조절해야 함
  • 누가 혼잡 상태 정보를 제공할 것인가?
방식 설명
End-to-End Congestion Control (현재 방식)
단말들이 네트워크 상태를 유추하여 서로 공유함.
Network-Assisted Congestion Control
네트워크 라우터가 혼잡 정보를 직접 제공함 (비현실적).

 

혼잡 제어 방법

  • 송신자의 윈도우 크기를 조절하여 전송량 조절

 

Congestion Window
  • 송신자가 네트워크 혼잡을 방지하기 위해 설정하는 전송 제한 크기

 

4. 다중화와 역다중화

구분 다중화(Multiplexing) 역다중화(Demultiplexing)
정의 애플리케이션 간 통신에서 동일한 클라이언트가 여러 애플리케이션에 대해 하나의 TCP 연결을 재사용함 하나의 연결로 받은 데이터를 적절한 애플리케이션에 전달하는 과정
단계 송신 측에서 발생 수신 측에서 발생
목적 네트워크 리소스를 효율적으로 사용 수신한 데이터를 올바른 애플리케이션 프로세스로 전달
작동 방식 - 각 애플리케이션은 고유의 포트 번호를 사용
- 송신 측에서 여러 애플리케이션의 데이터를 해당 포트 번호와 함께 패킷에 포함하여 전송
- 수신 측은 각 세그먼트의 목적지 포트 번호를 확인
- 해당 포트 번호에 맞는 애플리케이션에 데이터를 전달
세부 구현 - 애플리케이션은 각자의 포트 번호를 할당받음
- TCP 헤더에 포함된 포트 번호를 기준으로 다중화
- 수신된 TCP 세그먼트에서 목적지 포트 번호를 확인
- 포트 번호에 맞는 애플리케이션에 데이터 전달
예시 여러 웹 브라우저 탭이나 이메일 클라이언트가 하나의 IP 주소와 포트를 공유하면서도 독립적으로 데이터를 전송
수신 측에서 웹 브라우저와 이메일 클라이언트가 데이터 패킷을 받아 각각의 애플리케이션에 전달
관련 포트 - 송신 측에서 Source Port와 Destination Port 설정 - 수신 측에서 Destination Port를 확인하여 데이터 전달

 

 

출처