Terriermon - Digimon

3 way handshake

2021. 8. 27. 22:00네트워크

TCP에서 연결지향적인 특성을 갖게 해주는 과정, 방법이 바로 3 Way-Handshake 방식이다.

* TCP의 3-way Handshaking 과정

 SYN 은 synchronize sequence numbers ACK는 acknowledgements 의 약자.

 

[STEP 1]

 A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태  가 되는 것이다.

 

[STEP 2] 

 이때 서버는 Listen 상태로 포트 서비스가 가능한 상태여야 한다. (Closed :닫힌상태) B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.

 

[STEP 3]

 A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다.

 위와 같은 방식으로 통신하는것이 신뢰성 있는 연결을 맺어 준다는 TCP의 3 Way handshake 방식이다.

 

이렇게 3번의 신호를 주고받는다 해서 3-way Handshaking 이다.

 

                             과정

 1번에 seq넘버를 보내고

 2번에 ack로 1번인 넘버에 1이 추가되었음을 알 수 있다.

 동시에 서버역시 seq넘버를 보낸다

 3번 클라이언트의 ack도 서버가 보낸 seq넘버에 1이 더해졌다

 

 이런식으로 랜덤한 숫자를보내고 잘받았다는 ack로 1을 더해주는 방식을 사용한다.

 

 

이 3way handshaking의 취약점을 이용해 서버를 공격 하는 방법이 있는데 이를 SYN Flooding 이라한다

 

 3way handshaking 과정중 서버는 2단계 에서 (클라이언트로 부터 요청을받고 응답을 하고난후 다시 클라이언트의 응답을 기다리는 상태)  이 연결을 메모리 공간인 백로그큐(Backlog  Queue) 에 저장을 하고 클라이언트의 응답 즉 3단계를 기다리게 되고 일정 시간 (default 로 UNIX/LINUX : 60초 , Windows : 256초 , Apache : 300 초이며 수정 가능) 동안 응답이 안오면 연결을 초기화한다.

 

 바로 이 점을 이용한 공격법이다.

 

 악의적인 공격자가 실제로 존재하지 않는 클라이언트IP로 응답이 없는 연결을 초기화 하기전에 또 새로운 연결 즉 1단계 요청만 무수히 많이 보내어 백로그 큐를 포화 상태로 만들어 다른 사용자로 부터 더이상에 연결 요청을 못 받게 하는 공격 방법이다.

반응형

'네트워크' 카테고리의 다른 글

MPLS란  (0) 2021.12.07
tcp란  (0) 2021.08.27
NAT(Network Address Translation)  (0) 2021.01.19
VRRP(HSRP)  (0) 2021.01.19
ARP는 매우매우 중요하다!  (0) 2020.10.21