즉, 많은 수의 요청이 두 번째 핸드셰이크 동안 서버는 이러한 요청을 세미 연결 대기열에 넣습니다. 이러한 악의적인 공격 클라이언트는 세 번째 핸드셰이크를 확인하지 않기 때문에 이러한 세미 연결을 처리할 수 없습니다. 해제하면 서버는 시간 초과될 때까지 대기합니다. 이때 세미 연결 대기열이 채워지고 정상적인 요청 연결에 응답할 수 없습니다.
일반적인 홍수 공격을 해결하는 방법
싱크쿠키 모드가 켜져 있으면 서버는 첫 번째 핸드셰이크 동안 (소스 주소, 소스 포트, 대상 주소, 대상 포트 등)과 난수를 기반으로 해시 값(SHA1)을 계산하고 두 번째 핸드셰이크를 수행합니다. 생성된 싱크쿠키는 클라이언트에 반환됩니다. 클라이언트가 세 번째 핸드셰이크를 확인하면 서버는 싱크쿠키가 이전 것과 일치하는지 확인합니다. 확립된.
이 접근 방식의 장점: 서버가 수신하지 않거나 수신된 싱크쿠키가 일치하지 않는 경우 TCP 연결이 설정되지 않습니다. 그리고 싱크쿠키를 사용하는 경우 서버는 세미 연결 큐를 유지하지 않습니다. 즉, 세미 연결 상태가 없습니다. 비교를 위해 싱크 쿠키를 사용하므로 세미 연결 큐가 필요하지 않으므로 세미 연결 큐를 피합니다. 채워져 새로운 연결이 수신되지 않습니다.
싱크쿠키가 해결할 수 없는 시나리오
다수의 DDOS 공격이 실행되면 싱크쿠키 방식도 마비됩니다. 마비되는 이유는 CPU가 많은 수의 싱크쿠키를 계산해야 하므로 CPU가 죽게 되기 때문입니다. 싱크쿠키를 계산하는 것도 CPU 성능을 소모하기 때문에 CPU가 엄청난 양의 DDOS를 처리할 수 없기 때문에 현재로서는 대역폭을 늘리고 하드캡을 구성하는 방법밖에 없습니다.
기타 솔루션
세미 연결 큐와 전체 연결 큐를 늘립니다. (이 방법은 기본적으로 대규모 공격에는 효과적이지 않습니다.)
SYN+ACK 재전송 횟수를 줄입니다(TCP는 안정적인 연결을 유지하기 위해 재전송에 의존함). 즉, 많은 수의 syn 요청에서 플러드 공격을 받은 경우 서버는 응답을 받을 수 없을 때까지 계속 재시도합니다. 최대 횟수를 줄이면 어느 정도 안심이 될 것입니다.