반응형

 

<TCP Header 구조>

  • Source Port : 출발지 포트번호
  • Destination Port : 목적지 포트번호
  • Sequence Number : byte 단위로 순서화되는 번호(TCP 세그먼트의 첫번째 byte에 부여됨)이며 이것을 통해 신뢰성(*3Way Handshake) 및 흐름제어(sliding Window) 기능을 제공하게 됩니다.
  • Acknowledgment Number : 수신하기를 기대하는 다음 byte 번호 (마지막으로 수신에 성공한 번호의 +1)
  • Offset : 헤더 길이 필드이며 IPv4와 마찬가지로 나누기 4 계산 후 2진수로 작성됨
  • Reserved : 예약된 필드, 현재 사용되지 않음
  • Window : 자신의 수신 버퍼 여유용량 크기를 통보하여 얼마만큼의 데이터를 받을 수 있는지 상대방에게 알려주어 흐름제어를 수행하게 되는 필드
  • TCP Flags 

   - U (Urgent) : 긴급 비트, 내가 지금 보내는 데이터가 우선순위가 높음. Urgnet Pointer와 세트
   - A (Ack) : 승인 비트, 물어본거에 대한 응답을 해줄 때 사용됨
   - P (Push) : 밀어넣기 비트, TCP 버퍼가 일정한 크기만큼 쌓여야 하는데 이거 상관없이 데이터를 계속 밀어 넣겠다
   - R (Reset) : 초기화 비트, 상대방과 연결이 되어있는 상태에서 어떤 문제 등이 발생하여 연결 상태를 리셋하게 됨
   - S (Syn) : 동기화 비트, 상대방과 연결을 시작할때 무조건 사용되는 플레그
   - F (Fin) : 종료 비트

  • Urgent Pointer : 어디서부터 긴급 값인지 알려주는 플래그 (TCP Flags의 U와 세트)

 

<3Way Handshake란?>

3Way HandShake는 간단히 말하면 본격적으로 연결 맺기 전에 서로 TCP 연결을 요청/수락 하는 준비 과정입니다.

연결 준비 과정이 정상적으로 끝나면 본격적으로 연결을 맺어 데이터를 주고받기 시작합니다.

 

이 글에서는 정말 간단히 어떻게 연결을 맺는지만 작성 하지만 3Way Handshake 개념을 어느정도 잡기 위해 공부하신다면 TCP의 상태천이도와 Sequence Number, Acknowledgment Number 가 어떤식으로 바뀌는지 정도만이라도 아는게 좋고, 해당 내용은 나중에 올리도록 하겠습니다.

 

조금 벗어난 얘기지만 아래에 작성한 3Way Handshake 과정만 이해 하더라도 DDoS 공격 중에서도 가장 많이 사용되는 Syn Flooding 공격 원리에 대해 이해하실 수 있습니다.

 

3Way Handshake 과정

STEP1) Client  -------------------> Server

                             SYN

STEP2) Client  <------------------- Server

                         SYN+ACK

STEP3) Client  -------------------> Server

                            ACK

 

STEP1)

  - 클라이언트가 서버에 접속을 요청하는 패킷(SYN)을 보냅니다.

 

STEP2)

  - 요청을 받은 서버는 접속을 수락한다는 ACK 패킷과 "이제 접속해" 라며 SYN 패킷을 같이 보내줍니다.

 

STEP3)

  - 서버로부터 연결 수락과 이제 접속하라고 전달받은 클라이언트는 서버에게 최종적으로 ACK 패킷을 보내고 연결을 맺게 됩니다.

반응형

+ Recent posts