AI VIDEO BRIEFING
TCP 동작 원리 쉽게 이해하기 — 3-way 핸드셰이크부터 재전송까지
데이터가 사라지고 순서가 뒤바뀌는 인터넷에서 TCP는 어떻게 신뢰할 수 있는 통신을 만들까요. 3-way 핸드셰이크, 시퀀스·확인 번호, 재전송, 그리고 SYN 플러드 공격까지 컴퓨터파일 영상의 핵심을 정리했습니다.

핵심 메시지
쉽게 이해하기
이 영상은 네트워크 스택을 따라 내려가는 시리즈의 한 편으로, 전송 계층(transport layer)의 핵심인 TCP(전송 제어 프로토콜)를 다룬다. 진행자는 애플리케이션이 네트워크 계층으로 데이터를 내려보내는 과정에서 TCP가 맡는 역할을 설명하며, 앞서 다룬 UDP와 달리 TCP는 너무 복잡해서 전부 설명할 수는 없다고 미리 양해를 구한다. 자세한 규격은 과거의 RFC 793을 2022년에 대체한 RFC 9293에 정리되어 있다.
핵심 아이디어는 '추상화'다. 애플리케이션 입장에서는 바이트를 부어 넣으면 반대편으로 그대로 흘러나오는 깨끗한 파이프가 있었으면 좋겠지만, 실제 그 아래에는 데이터가 손상되고, 사라지고, 순서가 뒤바뀔 수 있는 '새는 파이프'가 있다. 양쪽 끝 장치에만 존재하는 TCP의 임무는 이 엉망인 파이프를 감추고 마치 신뢰할 수 있는 통로가 있는 것처럼 보이게 하는 것이다.
이를 위해 두 가지 장치가 필요하다. 하나는 양쪽 끝에서 지금 어떤 단계에 있는지를 추적하는 상태 기계(state machine)이고, 다른 하나는 데이터를 잘게 쪼갠 뒤 앞에 붙이는 헤더다. 헤더에는 출발지·목적지 포트, 시퀀스 번호와 확인 번호, SYN·FIN 같은 플래그, 그리고 데이터가 손상됐는지 확인하는 체크섬 등이 들어간다.
연결을 세우는 방법이 바로 3-way 핸드셰이크다. 연결을 시작하는 쪽이 SYN 패킷을 보내고, 받는 쪽은 그것을 확인하면서 자신도 연결하고 싶다는 의미로 SYN과 ACK를 함께 돌려준다. 마지막으로 처음 보낸 쪽이 다시 ACK를 보내면 양쪽에 소켓 한 쌍이 만들어진다. 두 번으로는 안 되고 반드시 세 번이 필요하다는 점이 고전적인 포인트다.
신뢰성은 시퀀스 번호와 확인 번호로 확보한다. 받는 쪽은 자신이 다음에 받고 싶은 위치를 ACK로 알려준다. 예를 들어 중간 패킷이 사라지면 받는 쪽은 계속 같은 ACK를 돌려보내고, 같은 ACK가 여러 번(삼중 중복 ACK) 들어오면 보낸 쪽은 그 패킷이 손실됐다고 판단해 다시 보낸다. 또한 일정 시간 안에 기대한 ACK가 오지 않으면 타임아웃으로 보고 재전송한다. 다만 매 패킷마다 일일이 확인을 주고받으면 통신이 너무 느려지므로, 여러 패킷을 한 번에 보내는 '플라이트(flight)'와 네트워크가 감당할 수 있는 양을 가늠하는 윈도(window) 개념이 필요하다.
주요 인사이트
- TCP의 본질은 새로운 통신선을 까는 것이 아니라, 불안정한 네트워크를 신뢰할 수 있는 것처럼 '보이게' 만드는 추상화에 있다. 이 똑똑함은 중간 라우터가 아니라 양쪽 끝 장치에만 존재한다.
- 시퀀스 번호는 사실 패킷 단위가 아니라 바이트 단위로 매겨지며, 보안상의 이유로 1이 아니라 예측 불가능한 임의의 숫자에서 시작한다.
- 확인 번호는 '방금 받은 번호'가 아니라 '다음에 받고 싶은 위치'를 가리킨다. 사라졌던 패킷이 도착하면 그동안 쌓인 것까지 한꺼번에 인정하는 ACK를 보낼 수 있다.
- 아주 단순한 SYN-SYN/ACK-ACK 절차조차 보안 구멍을 만든다. 작은 SYN 패킷을 대량으로 보내 서버가 매번 메모리를 조금씩 예약하게 만들면, 자원이 고갈되는 SYN 플러드 서비스 거부 공격이 된다.
- 신뢰성과 효율은 별개의 문제다. 재전송으로 신뢰성을 얻더라도, 윈도 크기를 잘 조절해 여러 패킷을 한꺼번에 흘려보내야 비로소 빠른 통신이 가능해진다.
자주 묻는 질문
TCP는 왜 연결을 세울 때 패킷을 세 번 주고받나요?
한쪽이 SYN으로 연결을 요청하고, 받는 쪽이 그것을 확인하는 동시에 자신도 연결을 원한다는 SYN-ACK를 돌려보낸 뒤, 다시 처음 보낸 쪽이 ACK로 응답해야 양쪽 모두 상대의 소켓을 확인하고 한 쌍을 완성할 수 있기 때문입니다. 그래서 두 번으로는 부족하고 세 번이 필요합니다.
패킷이 도중에 사라지면 TCP는 어떻게 알아채고 복구하나요?
받는 쪽은 자신이 다음에 필요한 위치를 ACK로 알려주는데, 중간 패킷이 빠지면 같은 ACK를 반복해서 보냅니다. 보낸 쪽은 같은 ACK가 여러 번(삼중 중복) 들어오거나 정해진 시간 안에 기대한 ACK가 오지 않으면(타임아웃) 그 패킷이 손실됐다고 보고 다시 전송합니다.
SYN 플러드 공격이란 무엇인가요?
연결 요청용 SYN 패킷은 매우 작아 거의 데이터가 없지만, 서버는 이를 받을 때마다 소켓과 약간의 메모리를 예약합니다. 공격자가 수많은 SYN 패킷을 쏟아부으면 서버 자원이 조금씩 갉아먹혀 결국 정상 사용자를 응대하지 못하게 되는데, 이것이 SYN 플러드라는 서비스 거부(DoS) 공격입니다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗