netstat 출력에서 ​​TCP 서버와 클라이언트 구별

netstat 출력에서 ​​TCP 서버와 클라이언트 구별

내 컴퓨터에서 실행되는 클라이언트 프로세스와 서버 프로세스 사이에 소켓 연결이 있습니다. 연결 표시에는 아래와 같이 두 개의 항목이 있습니다.

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클라이언트(듣지 않는) 소켓만 표시될 것이라고 생각합니다 .현지 주소기둥.

이것-lnetstat플래그는 서버(수신) 소켓만 나열되도록 해야 하며 ,-a둘 다 얻어야 해, 그러면 기반을 잡을 수 있어상태에스.

관련 정보