전송 계층
고친 사람 github-actions[bot]
전송 계층은 통신하는 두 프로그램 사이에서 데이터를 정확한 상대에게 배달하는 일을 맡습니다. 컴퓨터 한 대 안에서 여러 프로그램이 동시에 통신하므로, 도착한 데이터를 어느 프로그램에 넘길지부터 정해야 합니다. 전송 계층은 이 구별과 함께, 데이터가 빠지거나 순서가 뒤섞이지 않게 챙기는 일도 맡습니다.
쉽고 빠른 이해
전송 계층은 도착한 데이터를 올바른 프로그램에 넘기는 일을 합니다. 웹 브라우저와 메일 프로그램이 같은 컴퓨터에서 동시에 통신 중이어도, 각자 자기 데이터만 받습니다.
이게 없으면 컴퓨터가 데이터를 받아도 어느 프로그램 것인지 알 방법이 없습니다. 모든 프로그램이 서로의 데이터를 뒤섞어 받게 됩니다.
전송 계층은 이렇게 돕습니다:
- 프로그램마다 번호를 매겨 구별합니다
- 필요하면 데이터를 작은 조각으로 나눠 보냅니다
- 정확한 전달이 필요하면 빠진 조각을 다시 보내고 순서를 맞춥니다
대가는 조각을 나누고 다시 맞추는 만큼 시간과 처리량이 듭니다. 정확한 전달까지 챙기면 그 비용이 더 커집니다.
상세
아파트에 편지가 오면 먼저 몇 동인지를 보고 건물을 찾습니다. 건물 앞에 닿은 뒤에는 몇 호인지 봐야 정확한 우편함에 넣을 수 있습니다. 네트워크에서 건물을 찾는 일은 아래 계층인 인터넷 계층이 IP(Internet Protocol, 인터넷 프로토콜) 주소로 합니다. 전송 계층은 그다음 단계인 호수, 즉 포트 번호를 보고 정확한 프로그램에 데이터를 넣습니다.
전송 계층(transport layer)은 통신하는 두 프로그램(정확히는 두 프로세스) 사이의 데이터 전달을 책임지는 계층입니다. 상대 컴퓨터까지 데이터를 옮기는 일은 아래 계층이 이미 끝냈다고 보고, 그 컴퓨터 안에서 어느 프로그램에 넘길지만 마저 정합니다.
이 계층에서 일하는 대표 프로토콜이 TCP(Transmission Control Protocol, 전송 제어 프로토콜)와 UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)입니다.
위아래에 있는 계층
네트워크 소프트웨어는 통신을 여러 층으로 나눠 각 층이 한 가지 일만 맡습니다. 전송 계층은 가운데에 있습니다. 위에는 응용 계층이 있고, 아래로는 인터넷 계층과 링크 계층이 있습니다.
flowchart TD
A["응용 계층 · 브라우저·메일 프로그램"] --> B["전송 계층 · 프로그램 구별"]
B --> C["인터넷 계층 · 목적지 컴퓨터까지 경로"]
C --> D["링크 계층 · 케이블·전파로 신호 전송"]
이 그림의 네 계층은 인터넷에서 실제로 쓰는 TCP/IP 모델입니다. 대학 교재가 함께 가르치는 OSI(Open Systems Interconnection, 개방형 시스템 상호연결) 7계층 모델에서는 같은 역할이 4번째 계층에 놓입니다. 이름과 층 수는 다르지만, 전송 계층이 인터넷 계층과 응용 계층 사이에 낀다는 사실은 두 모델에서 같습니다.
포트 번호로 프로그램을 구별합니다
한 컴퓨터 안에는 웹 서버·메일 서버·채팅 프로그램처럼 동시에 통신하는 프로그램이 여럿 있을 수 있습니다. 전송 계층은 프로그램마다 포트 번호를 매겨 이 문제를 풉니다. 포트 번호는 0부터 65535까지의 정수입니다.
데이터가 도착하면 컴퓨터는 그 안에 적힌 포트 번호만 보고 정확한 프로그램에 건네줍니다. IP 주소와 포트 번호를 묶은 것을 소켓이라고 부릅니다. 한 컴퓨터가 여러 통신을 동시에 처리하는 이 방식을 다중화라고 합니다.
정확한 전달이냐 빠른 전달이냐
전송 계층에서 일하는 프로토콜은 크게 두 갈래로 나뉩니다. 한쪽은 정확함을 우선하고, 다른 쪽은 속도를 우선합니다. 어느 쪽을 고를지는 이 뒤에 붙는 애플리케이션이 무엇을 더 중요하게 보는지에 달려 있습니다.
| TCP | UDP | |
|---|---|---|
| 연결 | 통신 전에 상대와 연결 지향으로 약속을 맺습니다 | 약속 없이 바로 보냅니다 |
| 순서 | 뒤섞여 도착해도 순서를 맞춰 넘깁니다 | 도착한 순서 그대로 넘깁니다 |
| 빠진 데이터 | 재전송으로 다시 보내 채웁니다 | 빠져도 다시 보내지 않습니다 |
| 속도 | 확인과 재전송 때문에 더 걸립니다 | 확인 절차가 없어 더 빠릅니다 |
TCP 는 확인과 재전송에 더해 흐름 제어(받는 쪽이 감당 못 할 속도로 보내지 않게 조절하는 장치)와 혼잡 제어(네트워크가 막히면 보내는 속도를 줄이는 장치)까지 갖춰 데이터가 빠짐없이 순서대로 도착하게 합니다. 웹 페이지나 파일처럼 한 글자도 빠지면 안 되는 데이터가 TCP 를 씁니다. UDP 는 이런 장치를 빼서 가볍습니다. 실시간 영상 통화처럼 몇 조각 빠져도 계속 이어지는 편이 나은 데이터가 UDP 를 씁니다.
계층을 지날 때 데이터가 잘리고 이름을 얻습니다
애플리케이션이 보내려는 데이터가 크면 전송 계층이 이를 작은 조각으로 나눕니다. TCP 가 나눈 조각은 세그먼트, UDP 가 나눈 조각은 데이터그램이라고 부릅니다. 각 조각 앞에는 보내는 쪽과 받는 쪽의 포트 번호 같은 정보를 담은 꼬리표가 붙습니다. 이렇게 계층마다 자기 정보를 담은 꼬리표를 씌우는 일을 캡슐화라고 합니다.
이 조각은 다음 계층인 인터넷 계층으로 내려가면서 패킷이라는 더 큰 꾸러미 안에 담깁니다. 전달이 끝나면 받는 쪽 컴퓨터가 반대 순서로 꼬리표를 하나씩 벗겨 원래 데이터를 복원합니다.
언제 이 계층을 신경 쓰나
대부분의 백엔드 코드는 소켓 API(Application Programming Interface, 응용 프로그램 인터페이스) 위에서 돌아가므로 전송 계층을 직접 다루지 않습니다. 다만 어떤 프로토콜을 쓸지 고르는 순간에는 이 계층의 성질이 그대로 결과에 드러납니다. 결제나 로그인처럼 한 건도 놓치면 안 되는 요청은 TCP 위에서 도는 HTTP(HyperText Transfer Protocol, 하이퍼텍스트 전송 프로토콜)를 씁니다. 실시간 스트리밍이나 온라인 게임처럼 최신 값만 중요한 요청은 UDP 위에 자체 프로토콜을 얹기도 합니다.
로드 밸런서와 방화벽도 이 계층의 정보를 봅니다. 포트 번호만 보고 트래픽을 분배하는 로드 밸런서를 흔히 L4(Layer 4, 4계층) 로드 밸런서라고 부릅니다. 응용 계층 내용까지 들여다보는 L7(Layer 7, 7계층) 로드 밸런서와 대비됩니다.
경로 중간의 장비는 대개 전송 계층 헤더까지만 보고 그 위 응용 계층 내용은 건드리지 않습니다. 끝에서 끝까지의 데이터 전달과 확인은 중간 장비가 아니라 통신하는 두 프로그램 자신이 책임진다는 생각을 종단 간 원칙이라고 부릅니다.
관련 항목
전송 계층 위아래에 있는 계층
응용 계층 · 인터넷 계층 · 네트워크 계층 · 링크 계층
전송 계층을 실제로 구현하는 프로토콜
전송 계층의 동작 방식을 이루는 개념
포트 · 소켓 · 다중화 · 연결 지향 · 종단 간 원칙
정확한 전달을 위해 쓰는 장치
흐름 제어 · 혼잡 제어 · 재전송 · 체크섬 · 신뢰성
전송 계층이 만들어 내는 데이터 단위
이 계층의 정보를 들여다보는 실무 장비
다른 이름: transport layer · OSI 4계층 · L4 · 4계층