네트워크 계층(IP)은 패킷을 목적지 컴퓨터까지 보내주지만, "도착했는지, 순서가 맞는지"는 보장하지 않는다. 그 신뢰성을 책임지고, 데이터를 어느 프로그램에 전달할지 정하는 것이 전송 계층(4계층)이다. 대표 프로토콜이 TCP와 UDP다.
1. 전송 계층의 역할과 포트
전송 계층은 두 가지를 한다. 데이터를 신뢰성 있게 전달하고(오류 점검·재전송), 그 데이터를 어느 애플리케이션에 줄지 식별한다(포트 번호). 데이터 단위는 세그먼트다.
IP 주소가 "어느 컴퓨터"라면, 포트 번호는 그 컴퓨터의 "어느 프로그램"인지를 가리킨다(0~65535). 그래서 한 컴퓨터에서 웹·메일·게임이 동시에 통신해도 섞이지 않는다. 0~1023은 잘 알려진 포트(well-known port)로 주요 서비스에 미리 배정돼 있다.
| 포트 | 프로토콜 |
|---|---|
| 22 | SSH |
| 25 | SMTP (메일 전송) |
| 53 | DNS |
| 80 | HTTP |
| 443 | HTTPS |
IP 주소와 포트 번호를 합친 것을 소켓 주소라 하며, 통신의 양 끝점을 정확히 가리킨다. 한 컴퓨터에서 여러 프로그램이 동시에 통신해도 안 섞이는 이유가 포트라는 걸 알고, 평소 쓰던 :80, :443 같은 숫자의 정체가 잡혔다.
2. TCP: 신뢰성 있는 연결
TCP는 연결 지향형이다. 데이터를 보내기 전에 먼저 연결을 맺고, 보낸 뒤 잘 받았는지 확인하며, 빠진 게 있으면 다시 보낸다.
- 송신 → 수신: SYN (연결 요청)
- 수신 → 송신: SYN + ACK (요청 수락 + 자신도 연결 요청)
- 송신 → 수신: ACK (수락 응답) → 연결 완료
세 번 주고받는 이유는 양쪽 모두 "보내고 받을 수 있음"을 서로 확인하기 위해서다. 처음엔 두 번이면 충분할 것 같았는데, "양쪽이 서로의 송수신 능력을 확인하려면 세 번이 필요하다"는 걸 따져보고 납득됐다. 연결을 끊을 땐 FIN을 주고받는 4-way 과정을 거친다.
TCP의 신뢰성은 두 가지 번호로 구현된다.
- 순서 번호(Sequence): 보낸 데이터의 순서를 매겨, 받는 쪽이 뒤바뀐 패킷을 제대로 재조립한다.
- 확인 응답 번호(ACK): "여기까지 잘 받았으니 다음 것을 보내라"고 알린다.
받는 쪽이 처리할 수 있는 양보다 빨리 보내면 데이터가 넘친다. 그래서 "확인 응답 없이 한 번에 보낼 수 있는 양"인 윈도우 크기를 정해 조절한다. ACK를 받으면 윈도우를 다음 위치로 밀며 연속 전송하는 방식이 슬라이딩 윈도우다. 매번 하나 보내고 하나 확인하는 것보다 훨씬 효율적이다.
3. UDP: 빠른 비연결 전송
UDP는 TCP의 반대다. 비연결형이라 연결 과정도, 재전송도, 흐름 제어도 없다. 그냥 보낸다. 신뢰성은 낮지만 그만큼 빠르고 가볍다.
| 구분 | TCP | UDP |
|---|---|---|
| 연결 | 연결 지향 | 비연결 |
| 신뢰성 | 높음 (재전송) | 낮음 |
| 속도 | 상대적으로 느림 | 빠름 |
| 용도 | 웹·메일·파일 전송 | 실시간 스트리밍, DNS, 방송 |
화상 통화나 생중계에서는 잃어버린 프레임을 재전송받아 봐야 이미 늦었다. 끊긴 한 장면을 다시 받느라 전체가 밀리느니, 그 장면은 버리고 다음 것을 제때 보는 게 낫다. "정확함보다 제때"가 중요한 곳에서는 신뢰성을 포기하고 속도를 택한 UDP가 맞다.
"정확함 vs 제때"라는 기준으로 TCP와 UDP의 용도가 갈린다는 게 명쾌했다. 영상 통화가 끊겨도 다시 안 받고 넘어가는 이유를 이제 안다.
오늘 느낀 점
- 포트가 "한 컴퓨터의 어느 프로그램"을 가리킨다는 걸 알고, 동시에 여러 통신이 안 섞이는 이유와 :80·:443 같은 숫자의 정체가 한 번에 풀렸다.
- 3-way 핸드셰이크가 왜 두 번이 아니라 세 번인지를 "양쪽 송수신 능력 상호 확인"으로 따져보니, 외우는 대신 이해하게 됐다.
- TCP(정확함)와 UDP(제때)의 선택이 용도에 따른 trade-off라는 점에서, 신뢰성과 속도 중 무엇을 택할지가 늘 상황의 문제라는 걸 다시 느꼈다.
한 걸음 더
- TCP의 3-way 핸드셰이크는 보안 공격에도 악용된다. SYN만 잔뜩 보내고 마지막 ACK를 보내지 않아, 서버가 "연결 대기" 자원을 소진하게 만드는 SYN 플러딩(DoS 공격)이 그것이다. 정상 동작의 빈틈이 공격 표면이 되는 사례다.
- "신뢰성은 양 끝(TCP)이 책임지고, 중간(IP)은 단순하게"라는 구조가 인터넷 설계의 핵심 철학이다(end-to-end 원칙). 중간 라우터가 복잡한 보장을 안 해도 되니 네트워크가 단순하고 확장 가능해진다. 똑똑함을 가장자리로 밀어낸 이 결정이 인터넷을 거대하게 키웠다.
- 요즘은 UDP 위에 신뢰성을 직접 구현한 새 프로토콜(QUIC)이 뜨고 있다. 구글이 만들어 HTTP/3의 토대가 됐는데, TCP의 느린 연결 수립을 개선하면서도 신뢰성은 챙긴다. "TCP냐 UDP냐"의 이분법을 넘어, 둘의 장점을 조합하려는 시도다.
'computer_science > network' 카테고리의 다른 글
| [컴퓨터네트워크] 05. 네트워크 계층 (IP) (0) | 2026.08.05 |
|---|---|
| [컴퓨터네트워크] 04. OSI 참조 모델 (0) | 2026.07.29 |
| [컴퓨터네트워크] 03. 네트워크 통신 (0) | 2026.07.22 |
| [컴퓨터네트워크] 02. 네트워크의 구성 (0) | 2026.07.14 |
| [정보통신개론] 01. 정보통신과 네트워크 기초 (0) | 2026.07.03 |