[네트워크] 3-way handshake

opixxx·2024년 4월 2일
0

네트워트

목록 보기
12/14

이 글은 보초님 깃허브 레포를 참고해서 공부한 글입니다

3-Way Handshake에 대해 설명해 주세요.

3-way Handshake 란?

TCP/IP 프로토콜을 사용하여 네트워크 상에서 데이터를 전송하기 위한 연결을 설정하는 과정이다
TCP 연결을 시작할 때 사용되며, 두 호스트 간의 신뢰할 수 있는 연결을 만들기 위해 필요하다.
3단계로 구성되어 있고, 이를 통해 양방향 통신이 가능한 연결이 성립된다.

연결 과정

  1. SYN 단계 : 클라이언트는 서버에 클라이언트의 ISN(초기 시퀀스 번호) 을 담아 SYN 을 보낸다.
  2. SYN + ACK 단계 : 서버는 클라이언트의 SYN 을 수신하고 서버의 ISN 을 보내며 승인번호로 클라이언트의 ISN + 1 을 보낸다.
  3. ACK 단계 : 클라이언트는 서버의 ISN + 1 한 값인 승인번호를 담아 ACK 를 서버에 보낸다.

ACK, SYN 같은 정보는 어떻게 전달하는 것 일까요?

TCP 헤더 내의 제어 비트를 통해 전달된다.

2-Way Handshaking 를 하지않는 이유에 대해 설명해 주세요.

연결 과정

  1. SYN 단계 : 클라이언트는 서버에 클라이언트의 ISN(초기 시퀀스 번호) 을 담아 SYN 을 보낸다
  2. ACK 단계 : 클라이언트의 SYN 을 받고, 이에 대한 응답으로 ACK 을 클라이언트에게 보낸다.

문제점

양방향 통신 준비 완료 확인을 안한다.

2번 단계에서 서버가 클라이언트로부터 데이터를 수신할 준비가 되었음을 클라이언트에게는 알린다. 하지만 클라이언트가 서버로부터 데이터를 수신할 준비가 되었는지에 대한 확인이 없기때문에 실제 양뱡향 통신의 준비 상태를 확실하게 파악하기 어렵다.

신뢰성 있는 연결의 부족

연결 설정 과정에서 패킷 손실이 발생할 경우, 2-Way Handshake 는 이를 효과적으로 처리하지 못할 수 있다. 이로 인해 연결의 신뢰성이 떨어질 수 있습니다.
예시)
SYN 패킷 손실

  1. 클라이언트가 SYN 을 서버로 보냈다.
  2. SYN 패킷이 어떠한 문제로 인해 손실됐다.
  3. 서버는 클라이언트의 연결 요청을 인지하지 못하고, 클라이언트는 서버의 응답을 기다린다.
    -> 무한 대기 상태에 빠질 수 있다.

ACK 패킷 손실
1. 서버가 클라이언트의 SYN 을 받았고 ACK 로 응답을 했다.
2. 이 ACK 패킷이 손실됐다고 가정해보자
3. 클라이언트는 자신의 SYN 요청에 대한 응답을 받지 못했다고 판단하고 연결이 성공적으로 이루어지지 않았다고 생각할 수 있다.
4. 서버는 ACK 응답을 보냈으니 연결이 성공적으로 생각할 수 있다.
-> 양쪽의 연결 상태가 불일치하게 된다.

두 호스트가 동시에 연결을 시도하면, 연결이 가능한가요? 가능하다면 어떻게 통신 연결을 수행하나요?

두 호스트가 동시에 서로에게 연결을 시도하는 상황을 Simultaneous Open 라고 한다.

Simultaneous Open

각 호스트가 상대방에게 SYN 패킷을 보내 연결을 시도하며, 이 과정에서 각자가 클라이언트와 서버 역할을 동시에 수행한다.

연결 과정

  1. A와 B가 동시에 서로에게 SYN 패킷을 보낸다.
    각 호스트의 SYN 패킷에는 자신의 초기 시퀀스 번호(ISN)가 포함되어 있다. 이는 통상적인 연결 요청과 같으나, 양쪽 모두에서 동시에 발생한다.
  2. A는 B로부터 SYN 패킷을 받고, 이에 대한 응답으로 SYN-ACK 패킷을 보냔다.
    마찬가지로, B도 A로부터 SYN 패킷을 받고, SYN-ACK 패킷으로 응답한다. 이 단계에서 각 호스트는 상대방의 SYN에 대해 ACK를 보내면서 동시에 자신의 SYN에 대한 ACK도 기대한다.
  3. A와 B 모두, 상대방으로부터 받은 SYN-ACK 패킷에 대해 ACK 패킷으로 응답한다.
    이때, 각 ACK 패킷은 상대방의 초기 시퀀스 번호에 1을 더한 값을 포함하여, 상대방의 SYN-ACK를 올바르게 수신했음을 확인한다.

SYN Flooding 에 대해 설명해 주세요.

SYN Flooding 이란?

SYN Flooding 은 DDos 의 공격의 한 형태로, 악의적인 목적으로 네트워크 서비스를 중단시키기 위해 사용된다. 이 공격은 3-way handshake 연결 설정 과정을 악용하여 수행된다.

  1. 공격자는 대량의 SYN 요청을 목표 서버에게 보내어 서버의 연결 대기 큐를 가득 채운다.
  2. 각각의 SYN 요청에 대해 서버는 SYN-ACK 응답을 보내고 클라이언트로부터 ACK 응답을 기다리며 Half-open connection 으로 유지한다.
  3. 공격자는 일부러 최종 ACK 를 보내지 않아, 서버의 자원을 소모시키고 새로운 연결 요청을 처리할 수 없게 만든다.

특징

  • 자원 소진: 서버는 각각의 SYN 요청에 대해 연결 슬롯을 할당한다. 공격으로 인해 이러한 슬롯이 모두 사용되면, 정상적인 사용자의 연결 요청은 서버에 도달할 수 없게 된다.
  • 가짜 IP 주소 사용: 공격자는 대개 가짜 IP 주소를 사용하여 SYN 패킷을 생성한다. 이는 서버가 SYN-ACK 응답을 보낼 때, 응답이 도달할 수 없는 주소로 가게 만들어 서버의 자원을 더욱 낭비하게 한다.
  • 탐지와 차단이 어려움: 가짜 IP 주소의 사용으로 인해 공격자를 추적하고 차단하기 어렵다.
profile
개발공부저장소

0개의 댓글

관련 채용 정보