카테고리 없음

3주차 면접 스터디

미네구스 2024. 9. 4. 13:45

3-way handshake와 4-way handshake를 설명해주세요.

3-way handshake에 대해서 설명해주세요

TCP/IP 과정에서 패킷의 유실 없는 안전한 통신을 위하서 통신 하기전에, 서버가 데이터를 받을 준비가 되어있나 사전 체크를 진행합니다. 클라이언트와 서버는 3번의 패킷을 주고받으며 체크를 하기 때문에 3-way handshake라고 합니다.

 

과정에 대해 설명해주세요.
  • 처음에 서버는 LISTEN 상태로 대기해서 클라이언트의 요청을 받을 준비를 합니다.
  • 클라이언트는, 서버쪽으로  Syn 패킷을 전달하고 이를 받은 서버는 다시 Syn, Ack를 클라이언트에게 전달합니다.
  • 무사히 전달받은 클라이언트는 Establish 상태로 전환하고, 그 응답을 서버쪽에도 전달해 서버도 Establish상태로 전환해 서버와 클라이언트 간에 데이터를 전송할 준비가 되었음을 알려줍니다. 
2-way handshake를 하지 않는 이유가 뭘까요?

TCP의 핵심은 서버와 클라이언트간의 양방향 connection인데, 클라이언트가 서버에게 Syn을 전달하고, 서버가 다시 Syn, Ack를 클라이언트에게 전달하고 끝난다면 서버는 데이터를 전송할 준비가 되었는지 알 수 없기 때문에 2-way handshake는 하지 않습니다.

 

syn flood attack에 대해 설명해주세요.

공격자는 서버에게 엄청나게 많은 Syn 패킷을 보냅니다. 그러면 서버는 각 connection에 대해서 Syn,Ack를 클라이언트 쪽에 보내주고Ack를 기다리는 half-open 상태로 돌입하는데, 이 때 공격자가 다시 무수히 많은 Syn 패킷을 보내면 서버쪽엔 다시 포트를 열게되고 가용한 모든 포트가 열리게 된다면, 서버는 정상적으로 작동하지 않습니다.

half-open: 서버는 connection을 열어뒀지만, 클라이언트는 닫혀있는 상태를 말합니다. 디도스 공격같은 경우 서버는 open connection을 열어 클라이언트에게 응답을 받을 준비를 하지만, 서버가 최종 ACK응답을 받지 못하기 때문에 계속해서 포트만 열리게 됩니다. 

 

해결방법?

  • Backlog 큐 사이즈를 증가시키기
    • 많은 양의 Syn 패킷이 전송되더라도 저장이 가능하지만, 시스템이 메모리가 충분하지 않을 때는 불가능하고 결국 속도가 느려지기 때문에 이 부분을 고려해야합니다.
  • 오래된 Half-Open TCP 연결을 재활용하기
    • 백로그가 꽉 찬 경우, 오래된 커넥션에 덮어씌우는 것을 말합니다. 하지만, 이 방법은 공격 volume이 증가하거나, 백로그의 사이즈가 너무 작다면 실패할 수 있습니다.
  • Syn Cookie
    • 서버가 SYN-ACK 패킷 요청을 보낼 때, 백로그에서 SYN 요청을 끊어 메모리에서 제거하고, 포트를 open 상태로 두어 새 connection을 만들 준비를 합니다. 연결이 올바르고 최종 ACK 패킷이 서버로 전송될 떄, 서버는 SYN 백로그 큐를 다시 만듭니다. 위 방법은 TCP 연결 과정에서 일부 정보가 유실될 수 있다는 단점이 있습니다.

 

4-way handshake에 대해 설명해주세요

4-way handshake header

3-way handshake가 연결을 하기 위한 동작이라면, 4-way handshake는 데이터를 주고 받은 뒤 연결을 끊기 위해 사용합니다. 

  1. 클라이언트가 서버에게 연결 종료를 의미하는 FIN 세그먼트를 전송합니다. 클라이언트는 전송 후에 FIN_WAIT_1 상태가 됩니다.
  2. 서버는 FIN을 받고, 다시 클라이언트에게 ACK를 전송합니다. 클라이언트는 서버가 FIN 패킷을 보낼 때 까지 대기하는데, 이 때 FIN_WAIT_2 상태가 됩니다.
  3. 서버가 데이터를 모두 보냈다면, 연결 종료의 의미인 FIN 패킷을 클라이언트에게 전송합니다. 이 때 클라이언트는 ACK를 받을때 까지 대기하는 LAST_ACK 상태가 됩니다.
  4. 클라이언트는 FIN을 받고, 응답 ACK를 서버에게 전송합니다. 이 떄, 아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT 상태를 통해 대기합니다. 
  5. 서버는, ACK를 받고 나서 소켓을 닫고, 클라이언트 역시 TIME_WAIT 시간이 끝나면 소켓을 닫습니다. 
패킷이 4-way handshake 목적인지 어떻게 파악할 수 있을까요?

TCP의 헤더에 FIN 플래그가 존재하는데, 이 플래그가 설정되어 있는 패킷이 연결 종료를 요청하는 패킷임을 알 수 있습니다.

 

빨리 끊어야 할 경우엔, (즉, 4-way Handshake를 할 여유가 없다면) 어떻게 종료할 수 있을까요?

TCP 헤더에 존재하는 RST(reset) 패킷을 사용하여 연결을 즉시 종료할 수 있습니다.

 

4-Way Handshake 과정에서 중간에 한쪽 네트워크가 강제로 종료된다면, 반대쪽은 이를 어떻게 인식할 수 있을까요?

 

 

왜 종료 후에 바로 끝나지 않고, TIME_WAIT 상태로 대기하는 것 일까요?

아직 서버로 부터 받지못한 지연된 패킷이 있을 수 있으므로 TCP 연결이 종료된 이후에도 TIME_WAIT 상태로 대기합니다. 그리고, TIME_WAIT 상태는 의도치 못한 에러로부터 데드락에 빠지는 상태를 방지합니다.

 

+) 왜 데드락이 발생할까요?

 

 

 

 

https://monicareport.tistory.com/656

 

CS스터디 6주차 - 네트워크1(TCP~CORS)

5주차 후기 스터디원이 바빠서 어제 2명이서 진행했다..ㅎㅎ 그래도 유익하고 재미있었다..! TCP 3-way Handshake 에 대해 설명해 주세요. 3-way Handshake은 TCP/IP 프로토콜에서 사용되는 연결 설정 과정으

monicareport.tistory.com

 

https://www.cloudflare.com/learning/ddos/syn-flood-ddos-attack/

 

 

세션, JWT

JWT가 세션에 비해서 가지는 이점이 뭘까요?