이 웹 소켓을 사용하는 것은 무엇입니까?

이 웹 소켓을 사용하는 것은 무엇입니까?

NTP를 사용하여 내 컴퓨터의 시간을 업데이트하려고 합니다. 그러나 오류가 발생합니다.

host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting

"소켓 사용 중" 오류는 무엇을 의미합니까? 이 소켓을 사용하는 것이 무엇인지 어떻게 알 수 있습니까?

이 문제는 내 CentOS 4.x 시스템에서 발생하지만 FreeBSD 7.x, Ubuntu 10.04 및 Solaris 10에서도 나타납니다.

답변1

넌 할 수있어

lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"

모든 수신 포트를 확인하지만 ntpd가 실행 중입니다.

service ntpd status

"사용중인 소켓이란 무엇을 의미합니까?" 몇 가지 문제를 해결한 것에 대해 용서받을 수 있다면(매우 기본적인 설명에 대해 사과드립니다. 대부분의 설명이 도움이 될 것입니다.) TCP/IP(인터넷 언어)는 모든 컴퓨터가 고유하게 식별하는 IP 주소를 갖도록 지정합니다. 이 컴퓨터는 인터넷에 있습니다. 또한 IP 주소당 연결 가능한 포트 수는 65,000개입니다.

웹 서버에 연결하려는 경우 브라우저에서 사이트를 열지만 기본 시스템은 실제로 웹 서버 IP의 포트 80에 연결합니다. 웹 서버의 데몬(포트 80에서 연결을 수신하는 프로그램)은 "소켓"을 사용하여 해당 포트를 열어두고 자체적으로 예약합니다. 동시에 하나의 프로그램만 동일한 포트를 사용할 수 있습니다.

ntpd가 실행 중이므로 해당 포트를 사용하고 있습니다. "ntpdate"가 포트에 액세스하려고 시도하지만 포트가 열려 있으므로 "소켓이 이미 사용 중"이라는 오류가 발생합니다.

편집하다
UDP 계정으로도 변경

답변2

netstat를 사용하여 열린 소켓을 찾을 수도 있습니다. 다른 포스터에서 제안한 것처럼 lsof를 사용하는 것보다 훨씬 깔끔합니다. 루트로 이 명령줄을 사용해 보세요

netstat -lp -u -t

관련 PID 및 프로그램을 포함하여 모든 청취 연결을 봅니다. -l 매개변수는 청취 연결을 지정하고, -p는 PID/이름을 보려는 것을 지정하고, -t 및 -u는 TCP 및 UDP 연결(IPv4 및 IPv6)만 원함을 netstat에 알립니다.

숫자로 된 포트와 호스트 이름(즉, 호스트의 경우 확인되지 않음, 포트의 경우 서비스 이름으로 변환되지 않음)을 보려면 -n위의 명령줄에 추가하면 됩니다.

편집하다:이것은 Linux에서 작동합니다. 주변에 BSD 기반 시스템이 없기 때문에 BSD에서 얼마나 잘 작동하는지 모르겠습니다.

답변3

FreeBSD에서는 lsof가 작동하지 않는 경우(예를 들어 어떤 이유로든 /dev/mem이 없는 가상화된 시스템에서) sockstat를 사용할 수도 있습니다. IPv4 소켓을 수신하는 모든 프로그램 목록을 얻으려면:

sockstat -l4

답변4

lsof를 사용하여 이 소켓을 사용하는 애플리케이션을 찾을 수 있습니다 .

관련 정보