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에 대해 설명해주세요

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

- 클라이언트가 서버에게 연결 종료를 의미하는 FIN 세그먼트를 전송합니다. 클라이언트는 전송 후에 FIN_WAIT_1 상태가 됩니다.
- 서버는 FIN을 받고, 다시 클라이언트에게 ACK를 전송합니다. 클라이언트는 서버가 FIN 패킷을 보낼 때 까지 대기하는데, 이 때 FIN_WAIT_2 상태가 됩니다.
- 서버가 데이터를 모두 보냈다면, 연결 종료의 의미인 FIN 패킷을 클라이언트에게 전송합니다. 이 때 클라이언트는 ACK를 받을때 까지 대기하는 LAST_ACK 상태가 됩니다.
- 클라이언트는 FIN을 받고, 응답 ACK를 서버에게 전송합니다. 이 떄, 아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT 상태를 통해 대기합니다.
- 서버는, 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가 세션에 비해서 가지는 이점이 뭘까요?