서버가 SNK + ACK 를 보내지 않은 이유
1. 클라이언트가 요청한 포트로 LISTEN 하고 있는 프로세스가 존재하지 않을 때
즉, 해당 포트에서 돌아가고 있는 프로세스가 없다.
따라서 서버가 80 포트를 열어두지 않은 상태에서 클라이언트에서 80포트로 SYN 패킷을 보낼 경우,
SNK + ACK 를 보낼 프로세스가 없으니 아무런 응답을 보내지 않는다.
지금과 같이 LISTEN 하고 있지 않은 포트로 요청이 들어 온 경우,
OS 단에서 RESET 패킷을 응답으로 보내주기도 함.
하지만, 해킹에 악용될 수 있어 보통은 RESET 패킷조차 보내지 않도록 OS 설정을 함. (포트 스캐닝 등)
2. 방화벽과 같은 네트워크 상의 문제
방화벽에서 80 포트로 요청이 오면 DENY 시키도록 RULE 이 걸려있으면, SYN 패킷은 방화벽에 의해 DROP 된다.
보통 방화벽은 DROP만 시키지, 따로 RESET 패킷을 응답으로 보내지 않기에, SYN 패킷을 보낸 클라이언트는 기다리다가
CONNCETION TIMEOUT 에 의해 일정 시간 후에 소켓을 종료시킨다.
위 2가지의 경우는 netstat 결과 값으로는 알 수 없으며, 서버 담당자에게 서비스가 해당 포트로 잘 동작하고 있는 건지,
그리고 네트워크 담당자에게 방화벽 설정값을 확인한 후 명확히 알 수 있다고 한다.
정리 (from. GPT)
- telnet이 사용하는 특정 **포트(기본적으로 23번 포트)**에 대한 접근을 제한하거나, telnet 명령어 자체를 차단할 수 있습니다. (telnet 프로토콜을 차단하거나 telnet 명령 자체를 차단)
- 방화벽은 포트만을 차단하거나 서비스 프로토콜을 식별하여 차단하는 방식으로 동작할 수 있습니다.
- socket.connect() 메서드는 프로그램적으로 연결을 시도하기 때문에 특정 포트를 지정할 수 있고, 이 방식은 애플리케이션 레벨에서 차단되지 않도록 설정될 수 있습니다.
방화벽은 TCP 연결을 일반적인 연결로 처리하고, **telnet**과 같은 특정 애플리케이션 프로토콜은 식별 후 필터링할 수 있습니다. 이를 통해 방화벽은 어떤 프로토콜이 사용되는지에 따라 다르게 처리할 수 있는 능력을 갖추게 됩니다.
보통 서비스 보안 및 점검 시, 특정 프로토콜을 식별하여 차단하는 방식이 보편적이라고 한다.
출처
서버 관리자를 위한 TCP 지식 - SYN_SENT, ESTABLISHED, TIME_WAIT
TCP 가 뭔가요? 라고 누군가가 묻는다면 3 way handshaking 으로 연결을 맺고 송신 데이터에 대해 잘 받았다는 응답을 전달함으로써 신뢰성있는 전송이 가능한 프로토콜이다. 정도는 대답할 수 있을
semtul79.tistory.com