소켓과 포트의 차이점 역할을하고 응용 프로그램 프로세스가 주어진 포트

누군가 포트와 소켓의 차이점을 명확하게 설명해 주시겠습니까? 포트가 응용 프로그램 프로세스의 네트워크에 대한 문 역할을하고 응용 프로그램 프로세스가 주어진 포트 번호에 대한 소켓 연결을 사용하여 네트워크 통신을 처리한다는 것을 알고 있지만 단일 포트 번호에서 여러 프로세스가 수신 대기하는 경우 소켓과 포트의 차이점과 이들이 서로 어떻게 맞는지 이해하기가 어렵습니다.



답변

S는 서버 프로그램입니다 :의는 HTTP 서버 말할 수 있도록, 그래서 잘 알려진 포트 번호를 사용합니다 HTTP 나 IP 주소를 가진 호스트에서 실행 80입니다, 10.0.0.4그것은에 연결을 수신 할 수 있도록, 10.0.0.4:80(때문에 모든 사람들이 그것을 찾을 것으로 예상됩니다).

내부 S , 내가 만들거야 소켓결합 그 주소로 지금의 OS는 연결이 들어오는 것을 알고 10.0.0.4:80내 라우팅되어야 S의 특정 소켓을 통해 공정.

  • 소켓이 바인드되면 netstat 출력 :

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    

    NB. S 는 클라이언트가 어떻게 접근하는지 신경 쓰지 않기 때문에 로컬 주소는 모두 0입니다.

일단 S가 이 소켓이 바인드 한, 그것은 것입니다 동의를 연결 – 새로운 클라이언트가 연결될 때마다, accept반환 새로운 해당 클라이언트에 고유 한 소켓을,

  • 연결이 승인되면 netstat 출력 :

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    tcp        0      0 10.0.0.4:80                 10.0.0.5:55715             ESTABLISHED
    
    • 10.0.0.4:80연결의 S 끝을 나타내며accept
    • 10.0.0.5:55715클라이언트의 연결 끝이며 클라이언트가 connect에 전달한 소켓과 연결 됩니다. 클라이언트의 포트는이 TCP 연결의 패킷을 올바른 프로세스로 라우팅하는 것 외에는 사용되지 않습니다. 임시 포트 범위에서 클라이언트의 커널에 의해 임의로 할당됩니다.

이제 S 는 더 많은 클라이언트 연결을 받아 들일 수 있습니다 … 각 소켓마다 고유 한 소켓이 있고 각 소켓은 고유 한 TCP 연결과 연결되며 각 연결에는 고유 한 원격 주소가 있습니다. S 는 소켓과 연관시켜 클라이언트 상태 (있는 경우)를 추적합니다.

대략적으로 :

  • IP 주소는 네트워크의 호스트 간 라우팅을위한 것입니다
  • 포트는 호스트의 올바른 소켓으로 라우팅하기위한 것입니다
    • 나는 거의 올바른 프로세스 를 말했지만 실제로는 동일한 소켓에서 여러 (보통 자식) 프로세스를 허용하는 것이 가능합니다 …
    • 그러나 동시 accept호출 중 하나 가 리턴 할 때 마다 하나의 프로세스 에서만 수행됩니다. 각 수신 연결 소켓은 서버의 한 인스턴스에 고유합니다.
  • 소켓은 프로세스가 파일 디스크립터와 같이 특정 연결에 대해 OS와 통신하는 데 사용하는 객체입니다.
    • 주석에서 언급했듯이 포트를 전혀 사용하지 않는 소켓에는 다른 용도가 많이 있습니다. 예를 들어 socketpair 는 주소 지정 체계 가 없는 소켓 쌍을 서로 연결하여 만듭니다. 호출 한 프로세스 socketpair, 해당 프로세스의 하위 프로세스 및 상속 프로세스 또는 해당 프로세스의 소켓 중 하나를 명시 적으로 전달한 프로세스

답변

기계를 아파트 건물로 생각하십시오.

  • 항구는 아파트 번호입니다.

  • 소켓은 아파트의 문입니다.

  • IP 주소는 건물의 주소입니다.


답변

포트는 TCP 및 UDP 프로토콜에서 주소의 일부입니다. OS가 어떤 데이터를 수신해야하는지 식별하는 데 도움이됩니다. 포트는 TCP 및 UDP의 본질적인 부분이므로 OS는 TCP 및 UDP를 지원하기 위해 포트를 지원해야합니다.

소켓은 OS가 네트워크 데이터를 보내고받을 수 있도록 응용 프로그램에 제공하는 인터페이스의 일부입니다. 대부분의 소켓 구현은 TCP 및 UDP 이외의 많은 프로토콜을 지원하며 일부 프로토콜에는 포트 개념이 없습니다. OS는 TCP 또는 UDP를 지원하기 위해 소켓을 지원하지 않아도됩니다. 응용 프로그램에서 사용할 수있는 다른 인터페이스를 제공 할 수 있습니다. 소켓은 단순히 특정 포트에서 데이터를 송수신하는 한 가지 방법입니다.


답변

컴퓨터에는 네트워크에서 별도의 엔티티로 식별하는 IP 주소가 있습니다. 해당 컴퓨터에 대한 연결을 구별 할 수 있도록 추가 번호를 추가합니다. 포트 번호입니다. 연결의 OS 측에는 버퍼, 연결 상태 등이 필요합니다.이 논리 오브젝트는 소켓입니다.


답변

소켓은 포트로의 통신 경로입니다. 프로그램이 네트워크를 통해 통신하도록하려면 포트 주소 지정 방법을 제공했으며 소켓을 작성하여 포트에 연결하여 수행합니다. 기본적으로 소켓 = IP + 포트 소켓은 포트 + IP에 대한 액세스를 제공합니다


답변

IP 주소는 장치를 식별합니다. 즉, IP를 사용하여 시스템에 도달했을 때 포트는 해당 시스템에서 통신 할 프로세스를 정의합니다.

따라서 실제로 통신하려면 소켓이라는 포트 + IP가 모두 필요합니다.


답변