CS/네트워크

2-way handshake를 사용하지 않는 이유?

alpacadabra 2023. 4. 18. 13:43

출처: https://www.baeldung.com/cs/handshakes

 

3-way handshake에 대해 알아보다 문득 2-way를 사용하지 않는 이유가 궁금해졌는데,

이에 내가 알아본 바를 간략하게 정리해보려고 한다.

 


  • 위 그림처럼 timeout이 발생하면 isn이 어긋나게 된다

구글에 2-way handshake를 검색하면 바로 나오는 그림인데, 뭔가 그럴듯해 보인다.

그러나 아무리 눈을 씻고 찾아봐도 2-way에 대한 ieee 표준은 찾아볼 수가 없으니...

따라서 저 그림도 표준은 아닐 것이고, 실제로 서버가 ACK+SYN을 보내면 해결되는 문제다.

 


  • 신뢰할 수 없다

호스트의 입장에서 연결을 신뢰하려면 아래 사항이 모두 확인되어야 한다.

 

(1) 상대방에게 패킷을 전달할 수 있다.

(2) 상대방으로부터 패킷을 전달받을 수 있다.

 

그러나 2-way에서는 일부만 확인된다.

클라이언트는 서버의 ACK를 통해 (1)과 (2)를 모두 확인할 수 있다.

하지만, 서버는 클라이언트의 SYN을 통해 (2)를 확인할 수 있어도 자신의 ACK로는 (1)을 확인할 수 없다.

따라서 이는 신뢰할 수 없는 연결이라고 할 수 있다.

 

인터넷에서 찾은 내용인데, 개인적으로 가장 마음에 들었다.

물론 엄밀한 증명은 아닐 테지만... 상식적으로 이해하기 쉬운 내용이므로!

 


  • 공격에 취약하다

2-way에서 서버는 SYN을 받자마자 커넥션을 수립하는데, 이를 악용하여 DOS 공격을 행할 수도 있다는 것이다.

그런데... 3-way에서도 SYN flood가 가능하지 않나?

딱히 2-way만의 문제점은 아닌 듯한데, 근본적으로 커넥션의 수립이 너무 쉽다는 것은 문제로 삼을 수 있겠다.

 


이미 수많은 연구자들이 거쳐간 길일텐데...

그럼에도 2-way를 사용하지 않는 데에는 다 이유가 있을 것이니, 그러려니 하고 넘어가고 싶다. ㅠㅠ