컴퓨터 네트워크에서 전송 계층(Transport Layer) 은 데이터가 송수신될 때 최종 목적지인 프로세스(프로그램) 에 정확히 전달되도록 관리하는 계층이다.
패킷이 네트워크를 통해 전송될 때, IP 주소와 MAC 주소 를 이용하여 호스트(컴퓨터 또는 네트워크 장치) 를 식별할 수 있다. 하지만 호스트 내에서 실행 중인 특정 프로세스(응용 프로그램) 에 도달하려면 포트 번호(Port Number) 가 필요하다.
| 프로토콜 | 특징 |
|---|---|
| TCP | 신뢰성 높은 데이터 전송 |
| UDP | 빠른 데이터 전송 (비신뢰성) |
TCP는 신뢰할 수 있는 데이터 전송 을 보장하는 연결형 프로토콜 이다. 즉, 데이터가 손실되지 않고, 순서대로 도착하도록 하는 것이 특징이다.

UDP는 빠른 데이터 전송을 위해 신뢰성을 보장하지 않는 비연결형 프로토콜 이다. TCP와 달리 데이터 손실, 순서 보장, 흐름 제어가 없다.

| 특성 | TCP | UDP |
|---|---|---|
| 연결 방식 | 연결형(Connection-Oriented) | 비연결형(Connectionless) |
| 신뢰성 | 신뢰성 보장 (데이터 손실 없음) | 신뢰성 없음 (데이터 손실 가능) |
| 데이터 전송 속도 | 느림 (오버헤드 존재) | 빠름 (오버헤드 없음) |
| 데이터 순서 보장 | O | X |
| 흐름 제어, 혼잡 제어 | O | X |
| 사용 예시 | HTTP, HTTPS, FTP, SMTP | DNS, VoIP, 온라인 게임, 스트리밍 |
| 포트 종류 | 범위 |
|---|---|
| 잘 알려진 포트 (Well-Known Port) | 0 ~ 1023 |
| 등록된 포트 (Registered Port) | 1024 ~ 49151 |
| 동적 포트 (Dynamic Port) | 49152 ~ 65535 |
| 포트 번호 | 설명 |
|---|---|
| 20, 21 | FTP |
| 22 | SSH |
| 23 | TELNET |
| 53 | DNS |
| 67, 68 | DHCP |
| 80 | HTTP |
| 443 | HTTPS |
| 1194 | OpenVPN |
| 1433 | MS SQL Server |
| 3306 | MySQL |
| 6379 | Redis |
| 8080 | HTTP 대체 포트 |
TCP 통신을 시작하기 위해 3-Way Handshake 방식이 사용된다. 클라이언트와 서버가 세그먼트를 주고받으며 연결을 설정한다.

1️⃣ 클라이언트 → 서버 (SYN 전송)
클라이언트는 연결을 요청하는 SYN 세그먼트를 서버에게 보낸다.
2️⃣ 서버 → 클라이언트 (SYN + ACK 전송)
서버는 연결 요청을 수락하며 SYN + ACK 세그먼트를 클라이언트에게 보낸다.
3️⃣ 클라이언트 → 서버 (ACK 전송)
클라이언트는 서버에게 연결을 확인하는 ACK 세그먼트를 보내면서 연결이 확립된다.
📌 이 과정이 완료되면 클라이언트와 서버 간에 데이터 전송이 가능해진다.
TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 오류 제어 기능을 수행한다. 오류 제어 방식에는 재전송과 중복 확인 응답(ACK)이 있다.


📌 타임아웃이란? 송신 측이 일정 시간 내에 ACK을 받지 못하면 데이터가 손실된 것으로 판단하고 재전송하는 메커니즘이다.
🚀 파이프라이닝 (Pipelining) 기법
TCP는 데이터 전송 속도를 높이기 위해 파이프라이닝(Pipelining) 방식을 사용한다.
🔄 파이프라이닝이란?
- 송신 측이 ACK을 기다리지 않고 여러 개의 세그먼트를 연속으로 전송하는 방식이다.
- 확인 응답(ACK)은 누적적으로 응답하여 여러 개의 패킷을 한 번에 확인할 수 있다.
💡 장점: 네트워크의 활용도를 높이고 전송 속도를 향상시킨다.
⚠️ 단점: 손실이 발생하면 해당 구간의 데이터 전체를 다시 전송해야 한다.
💡 예제:
→ 수신 호스트가 3개의 패킷만 수용 가능한 경우, 송신 호스트는 이를 초과하지 않도록 송신 속도를 조절한다.
네트워크에 과부하가 발생하지 않도록 데이터 전송 속도를 조절하는 기법이다.
✅ AIMD(Additive Increase Multiplicative Decrease)
📌 혼잡 윈도우 (Congestion Window)란?
송신 호스트가 네트워크의 상태를 고려하여 스스로 전송 가능한 데이터 크기를 결정한다. 즉, '혼잡 없이 전송할 수 있을 정도의 양'
📌 혼잡 상태를 판단하는 기준
TCP 연결을 종료하는 과정은 4-Way Handshake를 통해 이루어진다.

1️⃣ 클라이언트 → 서버 (FIN 전송)
2️⃣ 서버 → 클라이언트 (ACK 전송)
3️⃣ 서버 → 클라이언트 (FIN 전송)
4️⃣ 클라이언트 → 서버 (ACK 전송)
📌 연결 종료 시 송신 측은 ‘액티브 클로즈’, 수신 측은 ‘패시브 클로즈’ 상태가 된다.
- TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 제공하는 스테이트풀(상태 기반) 프로토콜이다.
- 즉, TCP는 통신 과정에서 특정한 연결 상태를 유지하며, 각 상태에 따라 적절한 처리를 수행한다.
- TCP 상태 관리
- 연결 수립(Connection Establishment),
- 데이터 전송(Data Transmission),
- 연결 종료(Connection Termination)

TCP 연결이 아직 생성되지 않았거나, 종료된 상태이다.
passive open 상태에서만 발생하며, 클라이언트로부터 SYN 패킷을 수신하면 SYN-RECEIVED 상태로 이동.TCP는 3단계 핸드셰이크(Three-Way Handshake)를 통해 신뢰성 있는 연결을 수립한다.
TCP 연결을 종료하기 위해서는 4단계 핸드셰이크(Four-Way Handshake)를 수행한다.
인터넷에서 도메인 네임을 이용해 웹사이트에 접속할 수 있도록 돕는 시스템이다.
google.com)142.250.190.78)📌 DNS 동작 과정
1️⃣ 사용자가 www.example.com 입력
2️⃣ 브라우저가 로컬 DNS 캐시 확인
3️⃣ 캐시에 없으면 ISP(인터넷 서비스 제공자)의 DNS 서버 조회
4️⃣ ISP의 DNS가 루트 네임 서버를 통해 IP 주소 반환
5️⃣ 최종적으로 해당 IP 주소로 접속
URI와 URL은 웹에서 자원을 식별하는 방식이다.
✅ URI: 웹 상의 자원을 식별하기 위한 주소 전체를 의미
✅ URL: URI 중에서도 자원의 위치(Location)를 포함한 것
📌 URL의 구성 요소
https://www.example.com:8080/path/to/resource?query=value#fragment
https:// (HTTP, HTTPS 등)www.example.com:8080 (도메인 + 포트 번호)/path/to/resource (서버 내 자원의 위치)?query=value (추가 정보 전달)#fragment (페이지 내 특정 위치 지정)✅ 1. 요청-응답 기반 프로토콜
클라이언트(브라우저)와 서버가 요청(Request)과 응답(Response)으로 데이터를 주고받는다.
✅ 2. 미디어 독립적
어떤 데이터 유형(HTML, JSON, XML, 이미지 등)도 전송 가능하다.
✅ 3. 스테이트리스(Stateless) 프로토콜
서버는 이전 요청의 상태를 기억하지 않는다.
→ 클라이언트가 매 요청마다 필요한 정보를 전달해야 한다.
✅ 4. 지속 연결(Persistent Connection)

Connection: keep-alive)📌 비지속 연결 vs 지속 연결
HTTP 메시지는 크게 요청(Request) 메시지와 응답(Response) 메시지로 나뉜다.
GET /hello HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
1️⃣ 요청라인(Request Line) → 시작 라인
GET (요청 방식)/hello (요청 경로)HTTP/1.12️⃣ 헤더(Header) → 필드 라인
Host: 요청을 보낼 서버 주소User-Agent: 클라이언트 정보Accept: 받을 수 있는 데이터 타입3️⃣ 본문(Body, 선택적) → POST 요청에서 데이터 포함
HTTP/1.1 200 OK
Date: Tue, 19 Mar 2025 12:00:00 GMT
Server: Apache/2.4.41
Content-Type: text/html
Content-Length: 1234
1️⃣ 상태라인(Status Line) → 시작 라인
HTTP/1.1200OK (성공)2️⃣ 헤더(Header) → 필드 라인
Server: 서버 정보Content-Type: 응답 데이터 유형Content-Length: 데이터 크기3️⃣ 본문(Body, 선택적) → HTML, JSON 등 데이터 포함
| 메서드 | 설명 |
|---|---|
| GET | 리소스 요청 (읽기) |
| HEAD | GET과 동일하지만 본문 제외 |
| POST | 새로운 데이터 전송 (생성) |
| PUT | 기존 데이터 대체 |
| PATCH | 기존 데이터 일부 수정 |
| DELETE | 리소스 삭제 |
| CONNECT | 터널링 요청 (프록시) |
| OPTIONS | 지원하는 메서드 확인 |
| TRACE | 루프백 테스트 |
✅ 1xx (정보성 상태 코드)
| 코드 | 의미 |
|---|---|
| 100 | Continue (계속) |
| 101 | Switching Protocols (프로토콜 변경) |
✅ 2xx (성공 상태 코드)
| 코드 | 의미 |
|---|---|
| 200 | OK (성공) |
| 201 | Created (새 리소스 생성) |
| 204 | No Content (본문 없음) |
✅ 3xx (리디렉션 상태 코드)
| 코드 | 의미 |
|---|---|
| 301 | Moved Permanently (영구 이동) |
| 302 | Found (일시적 이동) |
| 304 | Not Modified (캐시된 리소스 사용) |
✅ 4xx (클라이언트 오류 코드)
| 코드 | 의미 |
|---|---|
| 400 | Bad Request (잘못된 요청) |
| 401 | Unauthorized (인증 필요) |
| 403 | Forbidden (접근 금지) |
| 404 | Not Found (리소스 없음) |
✅ 5xx (서버 오류 코드)
| 코드 | 의미 |
|---|---|
| 500 | Internal Server Error (서버 오류) |
| 502 | Bad Gateway (잘못된 게이트웨이) |
Ref. 📗《이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접》, 강민철