청취 소켓을 생성하면 설명자(루트 설명자라고 가정)를 반환하고 이 설명자를 주소에 바인딩합니다. 새로운 클라이언트 연결이 가능할 때마다 루트 설명자는 우리에게 이를 알리고 우리는 새로운 연결을 수락하고 각 클라이언트에 대한 고유한 설명자(클라이언트 설명자라고 가정)를 받습니다. 이제부터 해당 설명자를 사용하여 해당 클라이언트와 통신할 수 있습니다. 클라이언트 정보는 클라이언트 설명자가 가리키는 별도의 inode에 저장됩니다. 이로 인해 Linux는 해당 클라이언트 데이터를 해당 설명자에 전달할 수 있었습니다.
위에서 언급한 내용이 정확하다면(제가 이해한 내용이 틀렸다면 정정해 주시기 바랍니다) 의심스러운 것입니다. inode에 저장된 클라이언트 정보는 무엇입니까? Linux는 클라이언트를 어떻게 고유하게 식별합니까?
답변1
TCP/IP 및 UDP/IP 프로토콜은 로컬 및 원격 IP 주소와 포트 [1]로 정의되는 "세션"을 알고 있습니다. 예를 들어 TCP/IP 패키지에는 소스 및 대상 IP 주소와 포트 [2]가 포함됩니다. 둘 이상의 연결이 열려 있는 서버나 클라이언트(예: Firefox)는 OSI [3] 세션 계층에서 주소와 포트로 구별됩니다.
웹 브라우저를 사용하는 동안 쉘을 열고 루트로 실행하십시오.
netstat -tulpan
현재 및 활성 연결을 보려면 [4].
예제 출력:
# netstat -tulpan
Active Internet connections (servers and established)
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 1966/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1902/cupsd
tcp 0 0 192.168.1.16:57374 172.217.23.165:443 ESTABLISHED 4730/firefox-bin
tcp 0 0 192.168.1.16:55478 104.26.11.30:443 ESTABLISHED 4730/firefox-bin
udp 0 0 127.0.0.1:53 0.0.0.0:* 1996/named
이 줄은 Firefox가 어떤 패킷이 어떤 요청에 대한 응답인지 인식할 수 있도록 서로 다른 로컬 포트를 사용하여 Firefox에 의한 "ESTABLISHED" 연결을 표시합니다.
LISTEN 상태의 다른 라인은 sshd
(Secure Shell Server), cupsd
(프린터 데몬) 및 named
(바인드 이름 서버)를 포함하여 서버 프로세스로 실행되는 로컬 프로그램입니다. 그러면 들어오는 연결이 허용됩니다.
자세히 알아보기 위한 참고 자료:
[1]https://en.wikipedia.org/wiki/Port_(컴퓨터_네트워킹)
[2]https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure게다가https://en.wikipedia.org/wiki/IPv4_header#Header
답변2
listen
포트를 잘 알고 있어야 하므로 포트를 지정합니다 . 이 쪽에는 IP(또는 둘 이상)와 포트가 있습니다.
이를 수행할 때 connect
원격지의 IP와 포트를 지정합니다 listen
. 로컬 IP는 OS에 의해 결정되며 포트는 할당됩니다(임의의 숫자일 수 있음).
연결은 ( (remote IP, remote port), (local IP, local port) )
하나의 IP 주소에서 각 원격 포트에 대한 최대 64K 연결로 식별할 수 있습니다.