소프트웨어나 특정 패키지를 설치파면서 네트워크 설정을 하다 보면 종종 "해당 프로그램은 TCP 포트를 양방향으로 열어야 한다"라는 요구 사항을 접하게 된다. 얼핏 보면 TCP는 본래 양방향 통신이 가능한 프로토콜인데 왜 굳이 '양방향'을 강조할까? 반면 UDP는 세션이 없어도 양방향 통신이 가능한 것처럼 보이는 경우가 있다. 오늘은 TCP와 UDP의 통신 방식, 방화벽에서의 차이, 그리고 세션(Session)의 개념을 함께 정리해본다.
1. TCP와 UDP의 기본 특성
- 네트워크와 리눅스 등을 공부하며 지겹게 접한 개념이지만, 반복해서 나쁠 것은 없기 때문에 각 프로토콜의 특징을 다시 한 번 정리 하고 숙지한다.
TCP (Transmission Control Protocol)
- 연결 지향적 프로토콜이다. 3-way handshake를 통해 연결을 수립한다.
- 패킷의 순서 보장, 재전송, 흐름 제어 기능을 제공한다.
- 연결이 성립되면 양방향으로 데이터 교환이 가능하다.
- 즉, 한 번 세션을 맺으면 클라이언트와 서버가 서로 자유롭게 데이터를 주고받을 수 있다.
UDP (User Datagram Protocol)
- 비연결 지향적 프로토콜이다. handshake 과정 없이 바로 데이터를 전송한다.
- 순서 보장, 재전송이 없으며, 단순히 "데이터그램을 던지고 받는" 방식이다.
- 세션 개념은 없지만, 상태 기반 방화벽이 패킷 흐름을 추적하여 응답을 일시적으로 허용하기 때문에 마치 세션처럼 동작할 수 있다.
2. 방화벽 설정에서의 양방향 차이
TCP의 경우
TCP 연결은 3-way handshake 과정을 거쳐야 한다.
- 클라이언트 → 서버 : SYN
- 서버 → 클라이언트 : SYN-ACK
- 클라이언트 → 서버 : ACK
이 과정에서 양쪽 방향의 트래픽이 모두 허용되지 않으면 연결 자체가 이루어지지 않는다.
- 상태 기반 방화벽(Stateful Inspection)이 있다면 클라이언트의 요청을 보고 역방향을 자동 허용해주기도 한다.
- 하지만 Stateless 방화벽에서는 반드시 명시적으로 인바운드/아웃바운드 양쪽을 열어줘야 한다.
- 또한 P2P 애플리케이션이나 메시징 시스템처럼 서버와 클라이언트가 모두 능동적으로 연결을 시도하는 경우에는 양방향 설정이 필수이다.
UDP의 경우
UDP는 연결 과정이 없으므로, 클라이언트가 서버에 패킷을 전송하면 방화벽은 이를 보고 “세션 테이블”에 임시 항목을 만든다.
- 이 항목은 일정 시간 동안 유지되며, 서버에서 클라이언트로 응답 패킷을 보낼 때 허용된다.
- 따라서 보안 장비가 상태 기반이라면 굳이 "UDP 양방향"을 명시하지 않아도 양방향 통신이 가능한 것처럼 동작한다.
- 하지만 Stateless 장비에서는 역시 명시적으로 양방향을 열어야 한다.
3. 세션(Session)의 개념
네트워크에서 말하는 세션(Session)이란 두 엔드포인트 간의 통신 상태를 식별하고 유지하는 논리적 연결 단위이다.
- TCP에서는 3-way handshake로 세션이 형성되고, 연결 종료(4-way handshake) 시까지 상태를 유지한다.
- UDP 자체에는 세션 개념이 없지만, 애플리케이션 계층에서 “세션”을 정의하여 관리할 수 있다. 예를 들어 VoIP, RTP, QUIC 같은 프로토콜은 UDP 위에 자체 세션 관리 기능을 둔다.
- 방화벽이나 NAT 장비도 내부적으로 세션 테이블을 만들어, 누가 누구에게 어떤 포트로 패킷을 보냈는지 기록하고 일정 시간 동안 응답을 허용한다. 이 때문에 UDP도 마치 세션이 있는 것처럼 동작한다.
4. 정리
- TCP는 연결 지향적이므로 세션 성립과 유지에 반드시 양방향 통신이 필요하다. 방화벽이 Stateful이라도 일부 환경에서는 명시적인 양방향 설정이 요구된다.
- UDP는 세션이 없지만, Stateful 방화벽에서 세션처럼 관리해 주기 때문에 단방향 설정만으로도 역방향 통신이 가능해 보인다.
- 결국 "TCP 양방향 설정 필요"라는 말은 신뢰성 때문이 아니라, 방화벽/NAT 환경에서 응답 트래픽이 확실히 허용되도록 보장하기 위함이다.
요약하면, TCP와 UDP 모두 양방향 통신이 가능하지만 세션 관리 방식의 차이와 보안 장비의 동작 방식 때문에 운영 환경에서 설정 요구가 다르게 나타나는 것이다.
'CS 공부 > 기타' 카테고리의 다른 글
| [ETC] 방화벽에 대해 자세히 알아보자 (0) | 2025.09.03 |
|---|---|
| [ETC] 다중 인터페이스 환경에서의 라우팅 테이블 설정 (0) | 2025.09.02 |
| [ETC] 카프카 properties 파일 세부 분석 (3) | 2025.08.28 |
| [ETC] ESXi란 무엇인가? (0) | 2025.08.26 |
| [ETC] 두 PC에 Kafka 브로커 분리 설치 및 클러스터 검증 실습 (2) | 2025.08.24 |