968. TCP 쓰리웨이 핸드셰이크 (3-Way Handshake) - 연결 지향형 신뢰성 통신망 접속 확립 세션 생성 SYN ACK 패킷 포트 닫힘 보안 위협 SYN Flooding 공격 방어

핵심 인사이트: 무책임한 택배 기사(UDP)는 현관문에 택배를 훅 던지고 그냥 도망간다. 깨지든 말든 알 바 아니다. 하지만 은행 돈을 다루는 꼼꼼한 VIP 택배 기사(TCP)는 절대 그냥 문을 열지 않는다. 1. (기사) "똑똑! 계십니까? 택배 열어도 됩니까?" 2. (고객) "네 여기 있어요! 문 엽니다. 들어오실 준비됐죠?" 3. (기사) "네, 확인했습니다! 지금 들어갑니다!" 데이터 한 조각을 보내기 전에, 송신자와 수신자가 3번의 인사를 거치며 서로의 존재와 전송 준비(시퀀스 번호)를 완벽하게 일치시키는 절대 신뢰의 의식, 3-Way Handshake다.

Ⅰ. TCP (전송 제어 프로토콜)의 연결 지향성 🌟

  • 개념: TCP는 데이터를 보내기 전, 반드시 출발지와 목적지 컴퓨터 사이에 가상의 터널(논리적 세션 연결)을 먼저 튼튼하게 뚫어놓고 통신을 시작하는 연결 지향형(Connection-oriented) 프로토콜입니다.
  • 이 터널을 뚫는 작업이 바로 3번 악수하기(3-Way Handshake)이며, 연결을 끊고 터널을 폭파할 때는 4번 악수(4-Way Handshake)를 합니다.

Ⅱ. 3-Way Handshake의 3단계 동작 (무조건 암기) 🌟

클라이언트(내 PC)가 네이버 서버 접속 시의 핑퐁 과정입니다. 이 단계에서 헤더의 깃발(Control Flag: SYN, ACK)이 미친 듯이 활약합니다.

1단계: SYN (클라이언트 ➜ 서버) - "똑똑! 연결해도 됩니까?"

  • 내 PC가 네이버 웹서버(80번 포트)로 첫 패킷을 쏩니다.
  • 깃발(Flag): SYN (Synchronize, 동기화) 비트를 1로 켭니다.
  • 상태 전달: "나 패킷 번호표(Sequence Number) 100번부터 시작할 테니까 문 열 준비해 줘!"
  • 내 PC 상태: SYN_SENT (보내놓고 콩닥콩닥 기다림)

2단계: SYN + ACK (서버 ➜ 클라이언트) - "오케이 들어와! 넌 준비됐니?" 🌟

  • 네이버 서버가 문 두드리는 소리를 듣고 반갑게 응답합니다.
  • 깃발(Flag): SYN 비트 1, ACK(응답) 비트 1을 둘 다 켜서 보냅니다.
  • 상태 전달: "네가 보낸 100번 잘 받았어(ACK 101). 내 쪽에서도 너한테 데이터 보낼 건데, 내 번호표는 300번부터 시작할게(SYN 300). 알겠지?"
  • 서버 상태: SYN_RECEIVED (반쪽짜리 연결 완료)

3단계: ACK (클라이언트 ➜ 서버) - "네! 저도 준비됐습니다! 통신 시작!"

  • 내 PC가 서버의 응답을 최종 확인 사살합니다.
  • 깃발(Flag): ACK 비트만 1로 켜서 쏩니다.
  • 상태 전달: "네가 말한 300번 잘 알겠어!(ACK 301) 이제 양쪽 다 뚫렸다!"
  • 양쪽 컴퓨터 상태: ESTABLISHED (연결 확립 완벽 완료) 🌟
  • 이 순간부터 진짜 데이터(HTTP, 웹페이지 등)가 쏟아져 나오기 시작합니다.

Ⅲ. 해커의 악용: SYN Flooding (플러딩) 공격과 방어 🌟

이 완벽하고 꼼꼼한 인사가 해커들에게 최악의 무기로 둔갑합니다.

  • 해커의 약점 찌르기 (반쪽짜리 연결 상태 고갈):

    • 해커(좀비 PC)가 네이버 서버로 1단계 SYN(똑똑!) 패킷만 1초에 1,000만 개를 무식하게 던집니다.
    • 착한 네이버 서버는 2단계 SYN+ACK를 돌려보내고, 3단계 ACK가 오기를 메모리 방 하나를 파놓고(SYN_RECEIVED 상태) 가만히 하염없이 3분 동안 기다립니다.
    • 하지만 해커는 3단계 ACK를 절대 보내주지 않고 도망가버립니다.
    • 네이버 서버는 빈방을 계속 잡고 기다리다가(백로그 큐 꽉 참) 램 메모리가 터져버려, 나중에 쳐들어온 진짜 착한 손님의 SYN 접속을 거부해 버립니다(서버 다운). 이게 바로 전설적인 디도스(DDoS)의 원조, SYN Flooding 공격입니다.
  • 방어책 (SYN Cookie): 서버가 "야, 3단계 대답(ACK) 확실히 오기 전까지는 내 소중한 메모리 빈방(상태 정보) 절대 내어주지 마!"라며 암호화된 쿠키만 던져주고 메모리를 아예 안 쓰는 꼼수(방화벽 차단망 설정)로 공격을 무력화시킵니다.

📢 섹션 요약 비유: TCP의 3-Way Handshake는 무전기로 대화를 시작하는 **'군대의 삼중 암구호 통신 의식'**입니다. 김 병장(클라이언트)이 사령부(서버)에 다짜고짜 보고를 때리지 않습니다. 1단계(SYN): "사령부, 여기는 김 병장, 내 무전기 주파수 100번 맞췄다, 송신하라 오버!" 2단계(SYN+ACK): 사령부가 응답합니다. "김 병장, 100번 수신 양호하다. 나도 주파수 300번 맞췄다, 300번 들리는지 넌 확인하라 오버!" 3단계(ACK): 김 병장이 마지막 쐐기를 박습니다. "사령부, 300번 쩌렁쩌렁하게 잘 들린다 오버! 양방향 통신 준비 완료(ESTABLISHED)!" 이 숨 막히게 답답한 3번의 암구호 교환(왕복 핑퐁)을 완벽하게 끝낸 뒤에야 비로소 진짜 기밀문서(데이터)를 입 밖으로 내뱉는, 속도보다는 100% 생존율(신뢰성)에 영혼을 바친 통신계의 절대 헌법입니다.