회사에서 개발한 웹 서비스의 내부 테스트 버전을 배포하고, 다음과 같은 질문을 받았다. 박대리님, 서버에서 클라이언트가 몇 명이 접속 중인지 알 수 있는 방법이 있을까요? 사실 여러 사람을 대상으로 하는 웹 서비스를 개발하고 배포하는 건 처음이라, 이걸 어떻게 알 수 있는지 궁금하긴 했다. 그래서, 여기 나오는 문서들 중에서 가장 많이 언급되는 유틸리티가 netstat의 사용법은, 모든 리눅스 명령어가 마찬가지겠지만 man page에서 확인할 수 있다.
( 터미널에서 (명령을 실행한 시점에 따라 연결된 클라이언트의 정보가 달라질 수도 있다.) 여기서 볼 수 있는 정보는 다음과 같다. (grep을 하지 않고 보면 헤더가 들어가므로 이 부분을 참고해 보자.)
netstat의 옵션에 대한 설명그러면 앞에서 쓴 명령 중, netstat에 사용한 옵션은 무엇을 의미하는지 알아보자.
그리고 다른 옵션도 한 번 살펴보자.
그냥 간단하게 개수만 알 수는 없나요?다 필요 없고, 위에서 설명한 명령 끝에 wc는 파일에서 줄바꿈 개수나 파일의 바이트 수, 문자 수를 알려주는 명령이다.
덤: ss는 또 뭐야? ip route는 또 뭐지?netstat의 man page에 보면 다음과 같은 내용을 확인할 수 있다.
여기서 netstat은 mostly obsolete, 즉, 거의 시대에 뒤처진 프로그램이라고 설명하고 있다.
ss의 사용법터미널에서 여기서 우리가 주목해 볼 만한 것은 다음과 같다.
특정한 경우만 필터링해서 보고 싶다면 다음 옵션을 사용하면 된다. 물론 여러 옵션을 같이 쓸 수도 있다.
netstat : 네트워크 접속, 라우팅 테이블, 네트워크 인터페이스의 통계 정보 사용 방법: netstat [옵션] [| grep 포트 번호 or 서비스 명] option: -l (listen) : 연결 가능한 상태 -n (number port) : 포트 넘버 -t (tcp) : tcp -u (udp) : udp -p : 프로그램 이름 / PID -a : 모두 -i : 이더넷 카드별 정상/에러/드랍 송수신 패킷 수 확인 -r : 라우팅 테이블 -s : 네트워크 통계 --help : 옵션 정보 보기 자주 사용 하는 옵션 netstat -nap : 연결을 기다리는 목록과 프로그램을 보여준다 netstat -an | grep 포트번호 : 특정 포트가 사용 중에 있는지 확인 netstat -nlpt : TCP listening 상태의 포트와 프로그램을 보여준다 netstat 상태 값 SYN_RECV 상태로 유입이 있는 경우 웹서버에 요청을 하고 연결을 끊어버리는 공격을 당하면 웹서버는 이에 대한 대기 상태로 남아있게 된다. 웹서버의 자원이 무한대로 지원이 되지 않기 때문에 이런 상태가 늘어나게 되면 웹서버 자원 부족으로 인한 웹서비스 지연 및 기타 서비스들에 대한 자원 부족 문제로 hang 상태로 빠지게 되는 상황까지 이를 수 있다. 특히 동일 IP에 대한 유입이 과다한 상태인경우 해당 IP를 차단한다. |