TCP 3방향 핸드셰이크(SYN, SYN-ACK,ACK)

⚡ 스마트 요약

TCP 3방향 핸드셰이크는 모든 TCP 세션이 시작될 때 수행되는 연결 설정 절차입니다. 클라이언트와 서버는 SYN, SYN-ACK, ACK 패킷을 교환하여 시퀀스 번호를 동기화하고 애플리케이션 데이터의 단일 바이트를 전송하기 전에 양측이 준비되었는지 확인합니다.

  • 📨 메시지 유형 네 가지를 알아두세요: SYN 패킷은 TCP 연결을 시작하고, ACK 패킷은 연결을 확인하며, SYN-ACK는 SYN과 ACK를 결합하고, FIN 패킷은 TCP 연결을 종료합니다.
  • 🔁 다음 세 단계를 따르세요: 클라이언트 SYN 패킷 → 서버 SYN-ACK 패킷 → 클라이언트 ACK 패킷 순으로 전송되며, 세 번째 패킷이 도착한 후에야 세션이 설정됩니다.
  • 🔢 순번은 중요합니다: 각 측은 초기 순번을 선택하고, 상대방은 이에 1을 더하여 바이트 스트림의 순서를 유지합니다.
  • 🚪 철거 계획: 데이터 전송이 완료되면 TCP는 FIN/ACK 쌍을 사용하여 연결을 닫고 양쪽 끝의 소켓을 해제합니다.
  • 🤖 패킷 분석에 AI를 활용하세요: AI 비서가 설명합니다 Wireshark 패킷을 캡처하고, 누락된 ACK를 표시하고, SYN 플러드 또는 반개방 연결을 강조 표시합니다.

TCP 3방향 핸드셰이크

TCP 3방향 핸드셰이크란 무엇인가요?

The TCP XNUMX방향 핸드셰이크 클라이언트와 서버가 사용하는 절차입니다. TCP/IP 네트워크 애플리케이션 데이터 교환 전에 안정적인 연결을 설정하기 위한 절차입니다. 이름에서 알 수 있듯이, 이 절차는 양측이 동기화(SYN) 패킷과 확인 응답(ACK) 패킷을 교환하고 사용할 초기 시퀀스 번호를 합의하는 세 단계로 구성됩니다.

핸드셰이크는 양쪽 종단점이 TCP 소켓을 대칭적으로 시작, 협상 및 종료할 수 있도록 설계되었습니다. 핸드셰이크가 완료되면 연결은 전이중 방식으로 작동하며, 어느 한쪽이 세션 종료를 알리는 FIN 신호를 보낼 때까지 양쪽에서 병렬로 데이터를 송수신할 수 있습니다.

TCP 메시지 유형

핸드셰이크 및 종료 과정에서 4개의 제어 플래그가 반복적으로 나타납니다.

메시지 기술설명
SYN 장치 간 연결을 시작하고 순번을 동기화합니다.
ACK 이전 부분이 수신되었음을 상대방에게 확인시켜 줍니다.
동기화 ACK 결합된 메시지 — 로컬 장치의 SYN 메시지와 상대방의 이전 SYN 메시지에 대한 ACK 메시지.
END 연결을 정상적으로 종료하는 데 사용됩니다.

TCP XNUMX방향 핸드셰이크 프로세스

TCP 트래픽은 항상 3방향 핸드셰이크로 시작됩니다. 클라이언트는 서버에 세션 요청을 함으로써 통신을 시작합니다.

TCP 3방향 핸드셰이크 다이어그램

3자 악수 다이어그램.

  • 1단계 — SYN: 클라이언트는 SYN 플래그가 설정된 세그먼트를 전송합니다. 이는 서버에 "통신을 시작하고 싶습니다"라는 메시지와 함께 초기 시퀀스 번호를 제안하는 것입니다.
  • 2단계 — SYN-ACK: 서버는 SYN 및 ACK 플래그가 모두 설정된 세그먼트로 응답합니다. ACK는 클라이언트의 SYN에 대한 확인 응답이고, SYN은 서버 자체의 초기 시퀀스 번호를 제안합니다.
  • 3단계 — 확인: 클라이언트는 서버의 SYN-ACK에 대한 응답으로 최종 ACK를 보냅니다. 이제 연결이 설정되었으며 양측 모두 작업을 시작할 수 있습니다. transmit팅 애플리케이션 데이터.

실제 사례

TCP 3방향 핸드셰이크 실제 사례

다음은 구체적인 수열을 사용한 예시입니다.

  • 호스트 X는 서버로 TCP SYN 패킷을 전송하여 연결을 시작합니다. 이 패킷에는 임의의 초기 시퀀스 번호가 포함되어 있습니다(예: ). 4321 — 이는 호스트 X가 전송할 바이트 스트림의 시작을 나타냅니다.
  • 서버는 SYN 패킷을 수신하고 SYN-ACK로 응답합니다. ACK 번호는 호스트 X의 시퀀스 번호에 1을 더한 값입니다.4322), 그리고 SYN 패킷은 서버 자체의 초기 순번을 제안합니다.
  • 호스트 X는 서버의 순번에 1을 더한 값을 승인 번호로 하는 최종 ACK를 회신합니다.

데이터 교환이 완료되면 TCP는 4방향 FIN/ACK 시퀀스를 사용하여 연결을 종료하므로 양쪽 끝점이 소켓을 깔끔하게 해제할 수 있습니다.

TCP에 3자 핸드셰이크가 필요한 이유

핸드셰이크는 단순한 형식적인 절차가 아니라, 안정적인 바이트 스트림 전송과 관련된 세 가지 구체적인 문제를 해결합니다.

  • 순번 동기화: 양쪽 피어는 상대방의 초기 시퀀스 번호를 알게 되는데, TCP는 이 번호를 사용하여 손실되거나 순서가 잘못된 세그먼트를 감지합니다.
  • 연결 상태 일치: 세 번째 ACK는 서버의 SYN-ACK가 도착했음을 확인하는 것이므로, 양측 모두 ACK를 수신할 때까지 데이터 전송을 시작하지 않습니다. 설립 (주).
  • 중복 패킷 보호: 무작위 초기 시퀀스 번호와 시간 기반 핸드셰이크 상태는 이전 세션의 오래된 세그먼트가 실수로 수락되는 것을 방지합니다.

TCP 핸드셰이크 시 흔히 발생하는 문제점

핸드셰이크는 안정적이지만, 식별 가능한 방식으로 오류가 발생하기도 합니다. 네트워크 엔지니어는 일반적으로 다음과 같은 오류 중 하나를 발견합니다.

  • SYN 플러드 공격: 악의적인 클라이언트가 SYN-ACK에 응답하지 않고 수천 개의 SYN 패킷을 전송하여 서버의 연결 테이블을 고갈시킵니다. SYN 쿠키는 이러한 공격에 대한 표준적인 방어 수단입니다.
  • 반개방형 연결: 세 번째 ACK가 손실되면 연결은 반쯤 열린 상태로 유지되다가 결국 타임아웃으로 인해 연결이 해제됩니다.
  • 방화벽 또는 NAT로 인해 전송 중 연결이 끊어짐: 상태를 유지하는 미들박스가 상태를 잃어버리면 SYN-ACK 패킷을 드롭하여 클라이언트가 재시도를 하게 될 수 있습니다.
  • RST 재설정: 서버가 요청된 포트에서 수신 대기 중이 아니면 SYN 패킷에 RST 패킷으로 응답하여 즉시 연결 시도를 종료합니다.

자주 묻는 질문

두 개의 메시지만으로는 양측이 초기 시퀀스 번호에 동의했고 전송 준비가 완료되었음을 증명할 수 없습니다. 세 번째 ACK는 서버의 SYN-ACK가 도착했음을 확인하여 데이터 전송 전에 양쪽 엔드포인트가 ESTABLISHED 상태에 도달했는지 확인합니다.

SYN은 통신을 시작하고 초기 시퀀스 번호를 제안하는 단일 플래그입니다. SYN-ACK는 SYN과 상대방의 이전 SYN에 대한 확인 응답을 결합하여 하나의 패킷으로 동기화를 완료합니다.

SYN 플러드 공격은 핸드셰이크를 완료하지 않고 수많은 SYN 패킷을 전송하여 서버에 과부하를 일으킵니다. 불완전한 연결은 백로그 큐를 가득 채워 정상적인 사용자의 접속을 차단합니다. SYN 쿠키는 이러한 공격을 완화하는 표준적인 방법입니다.

TCP는 FIN 및 ACK 교환으로 이루어진 4방향 핸드셰이크를 통해 연결을 종료합니다. 각 방향은 독립적으로 종료되므로 한쪽에서 데이터 전송을 완료한 후에도 다른 쪽에서 연결을 종료할 수 있습니다.

초기 시퀀스 번호는 각 엔드포인트가 자체 바이트 스트림에 대해 임의로 선택하는 32비트 값입니다. 이 값은 누락되거나 중복된 세그먼트를 감지하고 스푸핑된 패킷을 방어하는 데 사용되는 카운터의 초기값으로 사용됩니다.

아니요. UDP는 비연결형 프로토콜로, 핸드셰이크 과정 없이 데이터그램을 전송합니다. 이 때문에 TCP보다 빠르고 가볍지만, 애플리케이션에서 안정성, 순서 유지, 혼잡 제어 등을 직접 처리해야 합니다.

AI 어시스턴트는 패킷 캡처에 주석을 달고 재분류를 수행합니다.transmits와 RST를 분석하고 SYN 플러드를 감지합니다. 이들은 번역 기능을 제공합니다. Wireshark 필터링된 결과를 이해하기 쉬운 영어로 변환하고 연결 문제에 대한 다음 진단 단계를 권장합니다.

네. AI 코딩 도우미는 평범한 영어 요청을 구체적인 코드로 변환합니다. Python Scapy 또는 3방향 핸드셰이크를 트리거하고 검사하는 netcat 스크립트를 작성하고, 엔지니어가 실행하기 전에 검토할 수 있도록 각 줄을 설명하십시오.

이 게시물을 요약하면 다음과 같습니다.