computer_science/network

[컴퓨터네트워크] 06. 전송 계층 (TCP·UDP)

렁치 2026. 8. 12. 16:16

네트워크 계층(IP)은 패킷을 목적지 컴퓨터까지 보내주지만, "도착했는지, 순서가 맞는지"는 보장하지 않는다. 그 신뢰성을 책임지고, 데이터를 어느 프로그램에 전달할지 정하는 것이 전송 계층(4계층)이다. 대표 프로토콜이 TCPUDP다.


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는 연결 지향형이다. 데이터를 보내기 전에 먼저 연결을 맺고, 보낸 뒤 잘 받았는지 확인하며, 빠진 게 있으면 다시 보낸다.

3-way 핸드셰이크 (연결 확립)
  1. 송신 → 수신: SYN (연결 요청)
  2. 수신 → 송신: SYN + ACK (요청 수락 + 자신도 연결 요청)
  3. 송신 → 수신: ACK (수락 응답) → 연결 완료

세 번 주고받는 이유는 양쪽 모두 "보내고 받을 수 있음"을 서로 확인하기 위해서다. 처음엔 두 번이면 충분할 것 같았는데, "양쪽이 서로의 송수신 능력을 확인하려면 세 번이 필요하다"는 걸 따져보고 납득됐다. 연결을 끊을 땐 FIN을 주고받는 4-way 과정을 거친다.

TCP의 신뢰성은 두 가지 번호로 구현된다.

  • 순서 번호(Sequence): 보낸 데이터의 순서를 매겨, 받는 쪽이 뒤바뀐 패킷을 제대로 재조립한다.
  • 확인 응답 번호(ACK): "여기까지 잘 받았으니 다음 것을 보내라"고 알린다.
흐름 제어와 슬라이딩 윈도우
받는 쪽이 처리할 수 있는 양보다 빨리 보내면 데이터가 넘친다. 그래서 "확인 응답 없이 한 번에 보낼 수 있는 양"인 윈도우 크기를 정해 조절한다. ACK를 받으면 윈도우를 다음 위치로 밀며 연속 전송하는 방식이 슬라이딩 윈도우다. 매번 하나 보내고 하나 확인하는 것보다 훨씬 효율적이다.

3. UDP: 빠른 비연결 전송

UDP는 TCP의 반대다. 비연결형이라 연결 과정도, 재전송도, 흐름 제어도 없다. 그냥 보낸다. 신뢰성은 낮지만 그만큼 빠르고 가볍다.

구분 TCP UDP
연결 연결 지향 비연결
신뢰성 높음 (재전송) 낮음
속도 상대적으로 느림 빠름
용도 웹·메일·파일 전송 실시간 스트리밍, DNS, 방송
왜 실시간 영상은 UDP를 쓸까?
화상 통화나 생중계에서는 잃어버린 프레임을 재전송받아 봐야 이미 늦었다. 끊긴 한 장면을 다시 받느라 전체가 밀리느니, 그 장면은 버리고 다음 것을 제때 보는 게 낫다. "정확함보다 제때"가 중요한 곳에서는 신뢰성을 포기하고 속도를 택한 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냐"의 이분법을 넘어, 둘의 장점을 조합하려는 시도다.