소켓과 포트의 차이점


121

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


9
Port는 물리적 주소이고 socket은 객체입니다.
superM

14
패킷이 포트의 소켓에서 포켓에 닿으면 ...
user16764

답변:


116

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, 해당 프로세스의 하위 프로세스 및 상속 프로세스 또는 해당 프로세스의 소켓 중 하나를 명시 적으로 전달한 프로세스

1
@Useless 응답이 나타내는대로 소켓이 IP 기반 일 필요 는 없습니다 . OP와 정확히 관련이 없지만 소켓 패밀리에 대한 설명은 이 답변을 마무리하는 데 도움이됩니다.
hafichuk

좋은 점-다중 프로세스 서버에 대한 글을 쓰기 시작했을 때 스코프 크리프에 대해 이미 걱정하고있었습니다. 편하게 편집 해 보시고, 그렇지 않은 경우 어느 시점에서 수정 해 드리겠습니다.
쓸모없는

11
이것은 전혀 쓸모가 없습니다
l --''''''--------- '' '' '' '' '' '' ''10

전자 장치의 소켓을 이해하려고합니다. 서버를 소켓에 포트 번호에 바인딩하는 것은 일부 전자 장치가 배터리 충전을 위해 플러그인되기를 기다리는 벽에 소켓을 넣는 것과 같습니다. 그러나 수락되면 새로운 소켓이 반환됩니까? 왜? 새 소켓이 벽에 있습니까? 약간의 비유로 이해할 수 있도록 도와주세요.
Aaron Shen

3
여기서 문제는 당신의 비유가 잘못되었다는 것입니다. 물리적 세계에서 소켓이 무엇을 의미하는지 잊어 버리십시오. 다른 기술에 대한 은유가 아니며 특정 기술 소프트웨어 개념에 대한 기술적 용어 일뿐입니다. 물리적 인 네트워크 포트 나 소켓과도 관련이 없습니다.이 도메인에서 자체 용어의 개념으로 이해하면됩니다.
쓸모없는

49

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

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

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

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


3
나는이 비유를 좋아하지만 지금은 많은 아파트 문이있는 끝없는 복도를보고있는 아파트 안에 있다고 생각하고 있습니다. 나갈 수 없어 나갈 수 없어! :)
Daniel Hollinrake

1
@Caleb A socket is the door of an apartment.그러나 하나의 포트에서 수많은 소켓을 열 수 없었습니까?
Suhail Gupta

3
@suhail 때로는 아파트에 둘 이상의 문이 있습니다. 그들은 모두 같은 아파트 번호를 가지고 있지만 다른 문입니다.
Caleb

45

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

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


소켓은 기본적으로 다음과 같이 구성된 4 개의 튜플입니다. 소스 IP : 포트-대상 IP : 포트.
Tony The Lion

포트가 TCP 및 UDP 프로토콜에만 존재한다는 의미입니까 ??? http 및 기타 프로토콜은 어떻습니까?
H. Aqjn

HTTP는 TCP 또는 UDP와 같은 전송 계층 프로토콜에서 실행되는 응용 프로그램 계층 프로토콜입니다. 자체 포트 개념이 없으며 기본 전송 계층 프로토콜에서 상속합니다.
Dirk Holsopple

8

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


0

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


-1

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.