이석복 님의 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를 확인하여 데이터 전달 |
출처
'Network' 카테고리의 다른 글
[컴퓨터 네트워킹 하향식 접근] 3-3. 트랜스포트 계층: UDP (1) | 2025.03.28 |
---|---|
[컴퓨터 네트워킹 하향식 접근] 3-2. 트랜스포트 계층: TCP (1) | 2025.03.28 |
[러닝 HTTP/2] 1. HTTP의 진화 (0) | 2025.03.28 |
[컴퓨터 네트워킹 하향식 접근] 2. 애플리케이션 계층 (1) | 2025.03.27 |
[컴퓨터 네트워킹 하향식 접근] 1. 컴퓨터와 네트워크 인터넷 (0) | 2025.03.27 |