Front-End/네트워크(브라우저)

2. TCP 연결 — 3-way handshake

isTrue 2026. 3. 31. 23:28
반응형

DNS로 IP를 알아냈으면, 이제 그 서버와 실제로 연결을 맺어야 해요.

TCP는 데이터를 주고받기 전에 "우리 연결됐어?" 하고 서로 확인하는 악수 과정을 거치는데, 이걸 3-way handshake라고 해요.

 

왜 3번이냐면 — 양방향 통신이 가능한지 확인해야 하기 때문이에요.

클라이언트→서버 방향,

서버→클라이언트 방향,

두 방향 모두 문제없다는 걸 확인하고 나서야 데이터를 보내요.

 

 

 

각 단계에서 무슨 일이 일어나는지:

SYN — 클라이언트가 서버에 "나 연결하고 싶어, 내 시작 번호는 0이야"라고 보내요.

seq(sequence number)는 이후 패킷 순서를 맞추기 위한 번호예요.

 

SYN-ACK — 서버가 "좋아, 받았어(ACK). 나도 연결 준비됐어(SYN), 내 시작 번호는 0이야"라고 응답해요.

ACK는 "네 seq+1번 패킷부터 기다릴게"라는 의미예요.

 

ACK — 클라이언트가 "알겠어, 확인했어"라고 마지막 확인을 보내면 양쪽 모두 ESTABLISHED 상태가 되고, 본격적으로 데이터를 주고받을 수 있어요.

 

 

왜 2-way가 아닌 3-way냐면, 2번만 하면 서버→클라이언트 방향이 실제로 잘 되는지 클라이언트가 확인할 수 없어요.

3번째 ACK로 비로소 양방향 확인이 완성돼요.

HTTPS라면 이 TCP 연결 위에 TLS handshake가 추가로 올라가요.

그래서 첫 연결은 왕복이 여러 번 일어나고, 이게 초기 로딩이 느린 이유 중 하나예요. (HTTP/2, HTTP/3에서는 이걸 줄이는 최적화가 들어가 있어요.)

반응형