VPN에서 TCP 3-way 핸드셰이크가 중요한 이유와 성능 영향
VPN 얘기하다가 왜 갑자기 “TCP 3-way 핸드셰이크”냐고요?
VPN은 한마디로 “내 트래픽을 안전한 터널로 보내는 기술”이잖아요. 근데 그 터널 안에서 실제로 웹서핑, 메신저, 파일 전송 같은 일을 하려면 결국 TCP 연결을 많이 쓰게 됩니다. 그리고 TCP는 연결을 시작할 때 “3-way 핸드셰이크”라는 예절(?)을 꼭 지켜요.
Akamai 자료에 따르면 TCP 3-way 핸드셰이크의 목적은 “안전하고 신뢰할 수 있는 연결을 세팅해서 데이터를 효율적으로 전송”하기 위한 거라고 설명하거든요(아무한테나 문 열어주면 집이 난장판 되잖아요). 이게 VPN 환경에서는 더 중요해집니다. 터널이 하나 더 끼어들면서 지연, NAT, 방화벽 같은 변수가 늘어나니까요.
3-way 핸드셰이크, 진짜로 뭘 주고받는 건데요?
핵심은 “서로 준비됐는지 확인하고, 번호표(시퀀스)를 맞춘 다음, 이제부터 진짜 대화 시작”입니다.
SYN / SYN-ACK / ACK: 3번 인사하는 이유
velog 글 요약에 따르면 3-way 핸드셰이크는 SYN → SYN-ACK → ACK 세 단계로 이뤄지고, 이 과정을 통해 TCP 연결을 설정해요. 쉽게 비유하면 이렇습니다.
SYN: “저기요, 대화(연결) 시작해도 돼요?”
SYN-ACK: “오케이, 나도 준비됐고 너 말 들을게. 너도 내 말 들을 준비 됐지?”
ACK: “응, 준비 완료. 그럼 이제 데이터 주고받자!”
이 과정에서 중요한 포인트가 “시퀀스 번호(Sequence Number)”예요. 택배 송장번호처럼, 데이터 조각들이 섞이거나 빠졌을 때 “어느 게 몇 번인지” 맞추는 기준이 되거든요. TCP가 신뢰성을 갖는 기반이 여기서 깔립니다.
TCP가 “느리지만 믿을 만한” 이유의 출발점
GeeksforGeeks 자료에 따르면 TCP는 확인 응답(ACK)과 재전송 메커니즘으로 신뢰성 있는 통신을 보장해요. 3-way 핸드셰이크는 그 신뢰성 시스템의 “시동 버튼” 같은 거고요. 시동을 제대로 걸어야 차가 덜컹거리지 않잖아요.
VPN 연결에서 3-way 핸드셰이크가 특히 중요한 3가지 이유
여기서부터가 “VPN이랑 무슨 상관인데요?”에 대한 진짜 답이에요. VPN은 보안 터널을 하나 더 얹는 구조라, TCP 연결의 시작/품질이 체감 성능과 장애 포인트에 직결됩니다. (환경마다 다를 수 있어요: 사용하는 VPN 프로토콜, NAT 구조, 방화벽 정책에 따라요.)
1) 지연(레이턴시)이 늘면, 3번 인사가 더 “티”가 납니다
3-way 핸드셰이크는 왕복(RTT, Round Trip Time) 기준으로 최소 1 RTT가 듭니다. VPN을 쓰면 암호화/복호화 처리, 터널 경유, 경로 변화로 RTT가 늘어날 수 있고요. 그러면 “연결 시작” 자체가 느려져서 웹페이지 첫 로딩, 앱 로그인 같은 데서 굼뜬 느낌이 나기 쉬워요.
특히 요즘 서비스들은 한 번에 TCP 연결을 하나만 여는 게 아니라 여러 개를 병렬로 열기도 하잖아요. 그럼 “인사 3번”이 여러 테이블에서 동시에 벌어지는 셈이라, 지연이 커질수록 체감이 확 옵니다.
2) NAT/방화벽이 끼면, SYN이 길을 잃기 쉽습니다
VPN 환경에는 NAT(주소 변환)나 방화벽이 더 자주 등장합니다. 회사/학교/카페 와이파이처럼 “나가는 문”이 빡빡한 곳에서 VPN까지 쓰면 문지기가 두 명인 셈이거든요.
이때 흔한 증상이:
SYN을 보냈는데 SYN-ACK가 안 돌아옴 (중간에서 막힘)
SYN-ACK가 돌아왔는데 마지막 ACK가 누락됨 (세션 상태가 꼬임)
연결은 되는데 자주 끊김 (상태 테이블 타임아웃 등)
3-way 핸드셰이크는 “양쪽이 연결 상태를 기억하는” 과정이라, 중간 장비가 상태를 제대로 추적 못 하거나 정책으로 특정 플래그/포트를 막으면 처음부터 삐끗합니다.
3) “TCP over TCP” 같은 구성은 문제를 더 키울 수 있어요
VPN 자체가 TCP 기반으로 동작하는데(예: 일부 VPN이 TCP로 터널을 만들고), 그 안에서 또 TCP 트래픽(웹, 메신저 등)이 흐르면 “TCP 위에 TCP”가 됩니다. 그러면 재전송/혼잡제어가 겹쳐서, 손실이 생길 때 서로가 서로를 오해하며 더 느려지는 현상이 생길 수 있어요. 사용자는 “VPN 켜면 인터넷이 답답해요”라고 느끼고요.
여기서 3-way 핸드셰이크는 “느려짐의 시작점”으로 체감되기 쉽습니다. 연결을 새로 맺는 순간마다 지연이 누적되니까요.
흔한 오해: “VPN은 암호화만 하니까 TCP랑 별개 아닌가요?”
f-lab 자료에 따르면 3-way 핸드셰이크는 신뢰할 수 있는 연결을 설정하는 데 중요한 역할을 해요. VPN은 “보안 터널”을 제공하지만, 터널 안에서 실제 서비스들이 TCP로 연결을 맺고 데이터를 주고받는 사실은 그대로입니다.
정리하면 이렇습니다.
VPN은 “도로(터널)”를 만드는 기술
TCP 3-way 핸드셰이크는 “차가 출발하기 전 시동 걸고 안전벨트 매는 절차”
도로가 하나 더 생기면(=VPN), 시동 과정에서 영향을 받는 변수가 늘어남
그래서 VPN 장애를 볼 때도 “터널이 연결됐나?”만 볼 게 아니라, 그 위에서 TCP 세션이 정상적으로 맺히는지(SYN/SYN-ACK/ACK 흐름이 막히지 않는지)까지 같이 봐야 현실적인 원인 파악이 됩니다.
마무리: VPN 성능/안정성의 첫 단추가 “3-way”인 이유
TCP 3-way 핸드셰이크는 SYN, SYN-ACK, ACK로 “연결을 신뢰할 수 있게” 만드는 절차입니다(velog 자료 요약에 따르면).
VPN을 쓰면 경로가 길어지고 중간 장비가 늘어, 이 3단계가 더 민감해집니다. 그래서 “연결이 느리다/안 된다/자주 끊긴다”의 출발점이 여기인 경우가 많아요.
특히 NAT/방화벽 환경에서는 핸드셰이크 단계에서 막히면 데이터는 시작도 못 합니다. 터널이 있어도 “문 앞에서 인사하다가 쫓겨나는” 거죠.
원하시면, 실제로 VPN 켰을 때 핸드셰이크가 막히는지 확인하는 방법(예: 패킷 캡처에서 SYN 재전송 패턴 보는 법)도 “일반인 버전”으로 풀어서 이어서 적어드릴게요.