이중 채널 아키텍처
OpenVPN의 핵심 설계는 제어 채널(Control Channel)과 데이터 채널(Data Channel)의 분리에 있습니다. 단일 TCP 또는 UDP 연결에서 두 채널을 동시에 다중화(Multiplex)하여, 인증 및 키 교환(TLS 핸드셰이크)과 실제 암호화된 터널 데이터를 구분하여 처리합니다. 제어 채널은 신뢰성 계층으로 구현된 확인응답(ACK) 및 재전송 모델을 사용하며, 데이터 채널은 UDP의 비신뢰성을 그대로 유지합니다.
패킷 구조와 메시지 타입
OpenVPN 패킷은 패킷 헤더에 5비트 opcode와 3비트 key_id를 담습니다. 제어 채널 메시지(P_CONTROL_*, P_ACK_*)는 TLS 암호문 형태로 encapsulation되며, HMAC 서명(tls-auth 사용 시)으로 초기 핸드셰이크 단계에서도 위조된 패킷을 조기에 필터링합니다. 데이터 채널 메시지(P_DATA_V1/V2)는 payload를 암호화하며, V2 형식에서는 24비트 peer-id를 추가하여 다중 클라이언트 서버 모드에서 피어 식별을 지원합니다.
세션 관리와 키 재협상
제어 채널은 64비트 session_id로 TLS 세션을 식별하고, 데이터 채널은 3비트 key_id로 효율성을 확보합니다. TLS 세션 재협상 시 새로운 key_id를 사용하여 seamless 전환을 구현하며, 두 채널은 독립적인 packet-id 수열과 HMAC 키를 유지하여 신뢰도와 성능 사이의 균형을 맞춥니다.