내 컴퓨터에서 실행되는 클라이언트 프로세스와 서버 프로세스 사이에 소켓 연결이 있습니다. 연결 표시에는 아래와 같이 두 개의 항목이 있습니다.
sudo netstat -ntp | grep 56442
tcp 1 0 127.0.0.1:56442 127.0.0.1:8002 CLOSE_WAIT 8276/python
tcp 0 0 127.0.0.1:8002 127.0.0.1:56442 FIN_WAIT2 -
이 경우 서버가 무엇인지 어떻게 알 수 있습니까?
나는 TCP 서버가 포트에서 실행되고 8002
있고 클라이언트가 포트에서 수신 서버로 연결된다는 것을 알고 있습니다 56442
.
netstat
출력 항목을 보고 서버와 클라이언트를 구별하는 방법을 알아내려고 합니다 .
FIN_WAIT2
소켓이 상태에 있을 때 프로세스 ID/설명이 표시되지 않는 이유는 무엇 입니까?
답변1
netstat
을 사용하지 않고 실행하면 grep
가운데 왼쪽 열에 "로컬 주소"와 같은 헤더가 있고 가운데 오른쪽 열에 "외부 주소"와 같은 헤더가 있는 것을 볼 수 있습니다. 서버 포트 번호가 포함된 로컬 주소를 표시하는 행이 서버입니다.
두 클라이언트 프로세스를 동시에 시작한 다음 다음을 실행하면 이에 대해 더 잘 느낄 수 있습니다.
sudo netstat -ntp | grep -E "Address|8002"
소켓이
FIN_WAIT2
상태에 있을 때 프로세스 ID/설명이 표시되지 않는 이유는 무엇입니까?
아마도 프로세스가 종료되었기 때문일 것입니다. 이는 결국 FIN
"완료" 또는 "최종"을 의미합니다. FIN 패킷 및 FIN_
상태는 TCP 연결 닫기(닫기)와 관련이 있으며, 이는 일반적으로 프로세스가 완료될 때만 발생합니다(프로세스 중 하나 또는 둘 다 종료되면 자동으로 발생함). 소켓을 연 프로세스가 사라진 후에도 소켓은 일정 시간 동안 시스템에 남아 있을 수 있습니다. 다시 말하지만, netstat
두 프로세스를 모두 잘 실행한 다음 종료 시 어떻게 변하는지 관찰하면 이를 더 잘 이해할 수 있습니다 .
답변2
netstat -ntp
클라이언트(듣지 않는) 소켓만 표시될 것이라고 생각합니다 .현지 주소기둥.
이것-l
netstat
플래그는 서버(수신) 소켓만 나열되도록 해야 하며 ,-a
둘 다 얻어야 해, 그러면 기반을 잡을 수 있어상태에스.