만일 웹 서버를 생성하고, 데몬(Daemon)프로세스로 실행하여 웹 서비스를 개시하려고 할때, 현재 시스템의 네트워크 포트 상태를 확인할 필요가 있다.
(만약 서버의 포트로 지정된 번호가 이미 사용중인 포트라면, 지정한 포트를 변경하거나, 현재 해당 포트를 사용하는 프로세스를 종료시켜야 한다.)
현재 사용하고 있는 TCP포트(Port)를 조회하는 리눅스 명령어는 netstat이다. netstat 명령어로 TCP 통신을 진행중인 서비스의 연결 상태를 확인할 수 있다. (netstat은 Network Statistics의 약자로, 네트워크의 문제를 찾아내고 성능 측정으로서 네트워크상의 트래픽(Traffic)양을 결정하기 위해 사용한다. )
netstat 옵션:
a
|
모든 소켓을 출력
|
-l
|
listen 상태인 소켓 만 출력
|
-n
|
서비스 이름 확인 생략(호스트 이름과 포트가 숫자 형식으로 표시)
|
-p
|
PID 와 프로세스 명을 출력
|
-t
|
TCP 소켓만 출력
|
-u
|
UDP 소켓만 출력
|
netstat -nltp
위 명령어의 실행 결과는 아래와 같다.
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 :::5432 :::* LISTEN -
시스템 콘솔에 표시되는 네트워크 정보의 항목은 아래와 같다.
Proto(Protocol)
|
프로토콜의 종류, TCP 또는 UDP
|
Local Address
|
자기 자신의 IP 주소와 포트(Port) 번호, 0.0.0.0은 특정 IP와 연결되어 있지 않다는 뜻
|
Foreign Address
|
상대방 측의 IP 주소와 포트(Port) 번호, 0.0.0.0은 아직 통신이 시작되지 않았다는 뜻
|
State
|
현재 서비스의 연결 상태(State)
|
PID/Program name | 현재 포트를 사용하고있는 프로세스 정보 |
또한, 위의 "State" 항목에 표시되는 상태는 아래와 같다.
ESTABLISHED
|
연결 성립 상태
|
SYN_SENT
|
Server 에서 Client 로 연결 요청을 시도한 후 기다리는 상태
|
SYN_RECV
|
Client 에서 연결 요청을 받은 상태
|
FIN_WAIT1
|
소켓이 닫치고, 연결은 차단되고 있는 상태
|
FIN_WAIT2
|
연결이 닫치고, 소켓은 Client 에서 차단되는 걸 기다리는 상태
|
TIME_WAIT
|
네트워크가 패킷을 처리하기 위해 소켓이 닫힌 후에도 대기중인 상태
|
CLOSE
|
소켓이 사용되지 않는 상태
|
CLOSE_WAIT
|
Client 에서 종료되고 소켓이 닫힐 때까지 대기하는 상태
|
LAST_ACK
|
Client 가 종료되고 소켓도 닫친 후 확인을 기다리는 상태
|
LISTEN
|
소켓에 들어오는 연결 요청을 대기 중인 상태
|
CLOSING
|
Client 에서 연결 종료 요청 확인을 기다리는 상태
|
UNKNOWN
|
상태 확인 불가
|
사용하고자 하는 포트 번호를 이미 사용하고 있는 경우, 해당 포트 번호를 사용중인 프로세스를 아래와 같이 조회하고
ps -ef | grep {프로세스 이름}
프로세스를 종료할 수 있다.
kill -9 {프로세스 ID}
kill 옵션
-9: 강제 종료
-15: 정상 종료
#References
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=anysecure3&logNo=221594360583
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pxkey&logNo=221276188823
'Server > Linux' 카테고리의 다른 글
visudo와 vi /etc/sudoers 의 차이점 (0) | 2021.12.23 |
---|---|
특정 유저로 sudo명령어가 안될때 (XXX is not in the sudoers file.) (0) | 2021.12.22 |
라우팅(Routing)이란?, 리눅스 라우팅 설정 (0) | 2021.12.13 |
리눅스 에러 Could not get lock /var/lib/dpkg/lock-frontend (0) | 2021.12.07 |
루트 권한 사용 - sudo와 su의 차이점 (0) | 2021.08.01 |