포트와 소켓의 차이점은 무엇입니까?


928

이것은 내 조직의 소프트웨어 엔지니어 중 한 사람이 제기 한 질문이었습니다. 가장 넓은 정의에 관심이 있습니다.


19
다시 말하면 소켓은 네트워크 IO로 제한되지 않습니다. 다양한 애플리케이션간에 데이터를 스트리밍하기 위해 모든 상황에서 사용할 수 있습니다.
Oli

답변:


976

요약

TCP 소켓은 특정 TCP 연결 또는 수신 상태와 관련하여 IP 주소와 포트로 정의 된 엔드 포인트 인스턴스 입니다.

포트는 서비스 엔드 포인트를 정의 하는 가상화 식별자입니다 (서비스 인스턴스 엔드 포인트 또는 세션 식별자).

TCP 소켓은 연결 이 아니며 특정 연결의 끝점입니다.

로컬 및 원격 엔드 포인트에 의해 연결이 식별 되므로 트래픽이 특정 서비스 인스턴스로 라우팅 될 수 있으므로 서비스 엔드 포인트에 대한 동시 연결이있을 수 있습니다 .

주어진 주소 / 포트 조합에 대해 하나의 리스너 소켓 만있을 수 있습니다 .

박람회

이것은 흥미로운 질문이었습니다. 내가 알고 있다고 생각한 많은 것들을 다시 검토해야했습니다. "소켓"과 같은 이름은 설명이 필요하다고 생각할 것입니다. 네트워크 케이블을 연결하는 엔드 포인트의 이미지를 불러 일으키기 위해 선택되었습니다. 그럼에도 불구하고, 네트워크 용어에서 "소켓"이라는 단어는 너무 많은 수하물을 운반하므로 신중한 재검사가 필요합니다.

가장 넓은 의미에서 포트는 진입 지점 또는 발신 지점입니다. 네트워킹 문맥에서 사용되지는 않지만, 프랑스어 단어 porte는 문자 그대로 문 또는 게이트웨이를 의미 하며, 데이터 또는 대형 강철 컨테이너를 선적하든 포트가 운송 종점이라는 사실을 더욱 강조합니다.

이 논의의 목적을 위해 TCP-IP 네트워크의 컨텍스트로 고려를 제한 할 것입니다. OSI 모델은 모두 훌륭하지만 완전히 구현 된 적이 없으며 트래픽이 많은 스트레스가 많은 환경에서 훨씬 덜 널리 배포됩니다.

IP 주소와 포트의 조합은 엔드 포인트라고하며 소켓이라고도합니다. 이 사용법은 원래 TCP 사양 인 RFC793에서 시작됩니다.

TCP 연결소켓 이라고하는 두 개의 엔드 포인트에 의해 정의됩니다 .

엔드 포인트 (소켓)는 네트워크 주소와 포트 식별자 의 조합으로 정의됩니다 . 주소 / 포트가 소켓을 완전히 식별 하지는 않습니다 (나중에 자세히 설명).

포트의 목적은 주어진 네트워크 주소에서 여러 엔드 포인트를 구별하는 것입니다. 포트가 가상화 된 엔드 포인트라고 말할 수 있습니다. 이 가상화는 단일 네트워크 인터페이스에서 여러 동시 연결을 가능하게합니다.

인터넷에서 각 TCP 연결을 고유하게 식별하는 두 개의 엔드 포인트를 지정하는 소켓 쌍 (클라이언트 IP 주소, 클라이언트 포트 번호, 서버 IP 주소 및 서버 포트 번호로 구성된 4 개의 튜플)입니다. ( TCP-IP Illustrated Volume 1 , W. Richard Stevens)

대부분의 C 파생 언어에서 TCP 연결은 Socket 클래스의 인스턴스에서 메소드를 사용하여 설정되고 조작됩니다. 일반적으로 NetworkStream 클래스의 인스턴스 인 높은 수준의 추상화에서 작동하는 것이 일반적이지만 일반적으로 소켓 객체에 대한 참조를 노출합니다. 코더에게이 소켓 객체는 소켓 객체의 메소드를 사용하여 연결이 생성되고 조작되기 때문에 연결을 나타내는 것으로 보입니다.

C #에서 (기존 리스너에 대한) TCP 연결을 설정하려면 먼저 TcpClient 를 작성하십시오 . TcpClient 생성자에 엔드 포인트를 지정하지 않으면 기본값이 사용됩니다. 한 가지 방법으로 로컬 엔드 포인트가 정의됩니다. 그런 다음 생성 한 인스턴스 에서 Connect 메서드 를 호출합니다 . 이 방법에는 다른 엔드 포인트를 설명하는 매개 변수가 필요합니다.

이 모든 것이 약간 혼란스럽고 소켓이 연결이며 믿을 수 없다고 믿게 만듭니다. Richard Dorman이 질문을 할 때까지이 오해를 받고 노력하고있었습니다.

많은 독서와 생각을 한 후에는 LocalEndpointRemoteEndpoint의 두 인수를 취하는 생성자와 TcpConnection 클래스를 갖는 것이 더 합리적이라고 확신합니다 . 로컬 엔드 포인트에 기본값을 사용할 수있는 경우 단일 인수 RemoteEndpoint를 지원할 수 있습니다. 멀티 홈 컴퓨터에서는이 기능이 모호하지만 원격 엔드 포인트에 대한 경로가 가장 짧은 인터페이스를 선택하여 라우팅 테이블을 사용하여 모호성을 해결할 수 있습니다.

다른 측면에서도 선명도가 향상됩니다. 소켓은 IP 주소와 포트의 조합으로 식별 되지 않습니다 :

[...] TCP는 로컬 및 외부 주소를 구성하는 네 가지 값 (대상 IP 주소, 대상 포트 번호, 소스 IP 주소 및 소스 포트 번호)을 모두 사용하여 수신 세그먼트를 역 다중화합니다. TCP는 대상 포트만보고 들어오는 세그먼트를 가져 오는 프로세스를 확인할 수 없습니다. 또한, 들어오는 연결 요청을 수신 할 [주어진 포트 번호]의 [다양한] 엔드 포인트 중 하나만이 수신 상태입니다. (p255, TCP-IP Illustrated Volume 1 , W. Richard Stevens)

보시다시피 네트워크 서비스가 주소 / 포트가 동일한 여러 소켓을 가질 수 있지만 특정 주소 / 포트 조합에 하나의 리스너 소켓 만있을 가능성이 높습니다. 일반적인 라이브러리 구현은 소켓 클래스를 나타내며 인스턴스는 연결을 만들고 관리하는 데 사용됩니다. 혼란을 야기하고 두 개념의 광범위한 혼란을 초래하기 때문에 이것은 매우 불행한 일입니다.

Hagrawal은 저를 믿지 않습니다 (댓글 참조). 웹 브라우저를 http://dilbert.com에 연결 한 다음 실행했습니다 netstat -an -p tcp. 출력의 마지막 6 줄에는 주소와 포트가 소켓을 고유하게 식별하기에 충분하지 않다는 두 가지 예가 포함되어 있습니다. 192.168.1.3 (내 워크 스테이션)과 54.252.94.236:80 (원격 HTTP 서버) 사이에는 두 가지 연결이 있습니다.

  TCP    192.168.1.3:63240      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63241      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63242      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:63243      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:64161      65.54.225.168:443      ESTABLISHED

소켓은 연결의 끝점이므로 주소 / 포트 조합이있는 소켓이 두 개 있고 주소 / 포트 조합이있는 소켓이 두 207.38.110.62:80개 더 54.252.94.236:80있습니다.

Hagrawal의 오해는 "식별하다"라는 단어를 매우 신중하게 사용함으로써 발생한다고 생각합니다. 나는 "완전하고 명확하고 독특하게 식별한다"는 것을 의미한다. 위의 샘플에는 주소 / 포트 조합이있는 두 개의 엔드 포인트가 54.252.94.236:80있습니다. 주소와 포트만 있으면이 소켓을 구별 할 정보가 충분하지 않습니다. 소켓 을 식별하기에 충분한 정보가 없습니다 .

추가

RFC793 섹션 2.7의 단락 2에 따르면

연결은 끝에있는 소켓 쌍으로 완전히 지정됩니다. 로컬 소켓은 다른 외부 소켓에 대한 많은 연결에 참여할 수 있습니다.

이 소켓 정의 는 특정 연결의 끝점 인 소켓 객체 와 동일하지 않으므로 프로그래밍 관점에서 도움이되지 않습니다 . 프로그래머에게는이 질문의 독자 대부분이 프로그래머이며 이는 중요한 기능적 차이입니다.

참고 문헌

  1. TCP-IP는 제 1 권 프로토콜 , W. Richard Stevens, 1994 Addison Wesley를 보여주었습니다

  2. RFC793 , DARPA를위한 남부 캘리포니아 대학의 정보 과학 연구소

  3. RFC147 , 소켓의 정의, Joel M. Winett, 링컨 연구소


6
어쩌면 키워드 소켓 및 포트에 대한 실제 비유가 질문에 대한 투표를 한 사람들에게 도움이 될 것입니다. 여전히 좋은 설명입니다!
rohitverma

5
@rationalcoder-전체 답변을 읽으십시오. 무언가에 의해 정의되는 것과 그것에 의해 식별되는 것에는 차이가 있습니다. 예를 들어 클래스의 인스턴스는 클래스에 의해 정의됩니다. 그것들은 부분적으로는 완전히 식별되지 않았습니다.
Peter Wone

6
이 진술에 동의하지 않기 때문에 투표하지 않았습니다- " 소켓은 IP 주소와 포트의 조합으로 식별되지 않습니다 : ".. TCP RFC-tools.ietf.org/html/rfc793을 읽으십시오 . socket은 IP와 포트의 조합입니다. IP와 포트를 알고 있다면 소켓이나 엔드 포인트를 식별 한 것입니다. 소켓 쌍 (예 : 클라이언트 IP + 포트와 서버 IP + 포트)을 알고 있다면 고유 한 연결을 식별 한 것입니다.
hagrawal

6
"위의 샘플에는 주소 / 포트 조합이 54.252.94.236:80 인 두 개의 엔드 포인트가 있습니다. 주소와 포트만 있으면이 소켓을 구분하기위한 정보가 충분하지 않습니다. 소켓." 3 개의 소켓, 2 개의 로컬 및 1 개의 동일한 서버 소켓이 연결되어있는 두 개의 연결간에 동일한 소켓이 아니라 다른 연결이 아닙니다. 아니면 실제로 두 개의 다른 소켓입니까? 그것들이 동일하기 때문에 구별하지는 않지만 연결을 구별하려면 다른 로컬 소켓이 필요합니다.
Andrew Clavin

6
-1 당신의 대답은 단순히 틀 렸습니다. "TCP 소켓은 ... 특정 연결 의 끝점입니다 ." RFC 793 : " 다중 연결 에서 소켓을 동시에 사용할 수 있습니다 ." 어떤 라이브러리를 사용하고 있는지 잘 모르겠지만 사용한 라이브러리에서 소켓 객체는 IP와 포트로 고유하게 정의되어 있으며 각 원격 소켓에 대한 연결 객체가 생성되었습니다.
Zaz

187

소켓은 세 가지로 구성됩니다.

  1. IP 주소
  2. 전송 프로토콜
  3. 포트 번호

포트는 장치의 논리적 게이트를 나타내는 1에서 65535 사이의 숫자입니다. 클라이언트와 서버 사이의 모든 연결에는 고유 한 소켓이 필요합니다.

예를 들면 다음과 같습니다.

  • 1030은 포트입니다.
  • (10.1.1.2, TCP, 포트 1030)은 소켓입니다.

80
소켓은 {프로토콜, 로컬 주소, 로컬 포트, 원격 주소, 원격 포트} 의 다섯 가지 로 구성됩니다 .
user207421

19
@EJP 아니요. 자세한 내용은 선택한 답변을 참조하십시오.
Kehlan Krumme

2
@KorayTugay IP 헤더에 있습니다. TCP 계층이이를 볼 수없는 이유는 무엇입니까?
user207421

1
위의 가장 많이 투표 된 답변에서 소켓이 연결 자체가 아니라 연결의 끝점이라는 것을 알 수 있듯이 @EJP는 로컬 및 원격 포트와 IP 주소를 모두 포함하는 방법입니다. 소켓은 연결의 한쪽 만 나타냅니다 (예 : 로컬 포트 ​​및 로컬 IP 주소 또는 원격 포트 및 원격 IP 가속). 내가 틀렸다면 친절하게 수정하십시오.
RBT

7
@EJP Still RFC 793 : "한 쌍의 소켓이 각 연결을 고유하게 식별합니다. 즉, 여러 연결에서 소켓을 동시에 사용할 수 있습니다." 소켓이 이미 5 가지로 구성되어 있다면 인용에 어떻게 "한 쌍의 소켓"이있을 수 있습니까?
Gab 是 好人

100

소켓 은 두 네트워크 응용 프로그램 간의 단일 연결을 나타냅니다. 이 두 응용 프로그램은 명목상 서로 다른 컴퓨터에서 실행되지만 소켓은 단일 컴퓨터의 프로세스 간 통신에도 사용될 수 있습니다. 응용 프로그램은 서로 통신하기 위해 여러 소켓을 만들 수 있습니다. 소켓은 양방향이므로 연결의 어느 쪽이든 데이터를주고받을 수 있습니다. 따라서 이론적으로 2 개 이상의 OSI 모델 레벨에서 소켓을 작성할 수 있습니다. 프로그래머는 종종 간접적이지만 네트워크 프로그래밍에 소켓을 사용합니다. Winsock과 같은 프로그래밍 라이브러리는 소켓 프로그래밍의 많은 하위 수준 세부 정보를 숨 깁니다. 소켓은 1980 년대 초부터 널리 사용되었습니다.

포트 는 네트워크 통신을위한 엔드 포인트 또는 "채널"을 나타냅니다. 포트 번호를 사용하면 동일한 컴퓨터의 여러 응용 프로그램이 서로 간섭하지 않고 네트워크 리소스를 활용할 수 있습니다. 포트 번호는 네트워크 프로그래밍, 특히 소켓 프로그래밍에서 가장 일반적으로 나타납니다. 그러나 때로는 포트 번호가 일반 사용자에게 표시됩니다. 예를 들어, 인터넷에서 방문하는 일부 웹 사이트는 다음과 같은 URL을 사용합니다.

http://www.mairie-metz.fr:8080/ 이 예에서 숫자 8080은 웹 서버가 웹 서버에 연결하는 데 사용하는 포트 번호를 나타냅니다. 일반적으로 웹 사이트는 포트 번호 80을 사용하며이 번호는 URL에 포함시킬 필요는 없습니다.

IP 네트워킹에서 포트 번호는 이론적으로 0에서 65535 사이입니다. 가장 많이 사용되는 네트워크 응용 프로그램은 범위의 가장 낮은 포트 번호 (예 : HTTP의 경우 80)를 사용합니다.

참고 : 포트라는 용어는 네트워크 기술의 다른 여러 측면을 나타냅니다. 포트는 직렬, 병렬 및 USB 포트와 같은 주변 장치의 물리적 연결 지점을 나타낼 수 있습니다. 포트라는 용어는 허브, 스위치 또는 라우터와 같은 특정 이더넷 연결 지점을 나타냅니다.

심판 http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm

심판 http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm


2
OSI 모델의 계층 2는 노드 간 연결이며 프로세스를 연결하는 메커니즘이 없습니다. OSI l2에 존재하는 소켓을 고려할 수 있다고 생각하지 않습니다.
안토니오 헤일리

18
회로는 연결이며 소켓은 끝점입니다. 연결은 2 개의 소켓으로 구성됩니다.
Mark Brackett

" 소켓은 두 개의 네트워크 응용 프로그램 사이에 단일 연결을 나타냅니다. "그것은 일치하지 않는 RFC 793을, 전송 제어 프로토콜 설명 : " 동시에 TCP 통신 설비를 사용하는 단일 호스트 내에서 많은 프로세스를 허용하기는 TCP는 주소 세트를 제공합니다 인터넷 통신 계층의 네트워크 및 호스트 주소와 연결되어 소켓을 구성합니다. 소켓 쌍은 각 연결을 고유하게 식별합니다. "
Ron Maupin

84

약간의 비유로

소켓에 대해 많은 기술적 인 것들이 이미 제공되었지만 ... 누군가가 여전히 IP, 포트 및 소켓의 차이점을 느낄 수없는 경우 를 대비하여 답변을 추가하고 싶습니다.

서버 S를 고려 ,

그리고 말 , Y는 Z는 사람 X를 서비스는에서 (채팅 서비스를 말한다) 필요가 서버 S

그때

IP 주소를 알려줍니다 > - 누구? X, Y, Z가 연락하고 싶은 채팅 서버 'S'

좋아, "서버는 누구인가"

그러나 서버 'S'가 다른 사람들에게 다른 서비스를 제공하고 있다고 가정하면 'S'는 개인 A, B, C에게 스토리지 서비스를 제공합니다.

그때

포트는 ---> 어느 것을 알려줍니다 ? 서비스 당신 (X, Y, Z), 즉 스토리지 서비스가 아닌 채팅 서비스가 필요합니다

좋아 .., 당신은 '채팅 서비스'가 당신이 원하는 것이지 스토리지가 아니라는 것을 서버가 알게한다

그러나

당신은 세이고 서버는 세 가지를 모두 다르게 식별하고 싶을 수도 있습니다

소켓 이 온다

이제 소켓은 -> 어느 것을 알려줍니다 ? 특정 연결

즉,

사람 X를위한 소켓 1

사람 Y를위한 소켓 2

사람 Z를위한 소켓 3

나는 그것이 여전히 혼란 스러웠던 누군가를 돕기를 바랍니다 :)


따라서 X, Y, Z는 동일한 포트, 즉 동일한 서비스에 연결되지만 서버 측에 다른 소켓이 있습니까? 따라서 X가 서버에 패킷을 보내면 '프로토콜, X의 IP, X의 포트, S의 IP, S의 포트) 소켓을 찾아 채팅 앱으로 보냅니다. 일부 응용 프로그램 특정 객체와 소켓 객체 사이에 바인딩이 있어야한다고 가정합니까? 예를 들어 socket-1에서 일부 데이터를 가져올 때 사용자 메시지로 표시하려고하지만 응용 프로그램은 소켓 A의 메시지가 User-X의 메시지임을 알아야합니다.
monolith

44

먼저, A에서 B로 패킷을 가져 오는 것이 무엇인지 이해하는 것부터 시작해야한다고 생각합니다.

네트워크에 대한 일반적인 정의는 목적에 따라 네트워크를 여러 계층으로 분리하는 OSI 모델 을 사용 하는 것입니다. 여기서 다루는 몇 가지 중요한 사항이 있습니다.

  • 데이터 링크 층 . 이 계층은 한 네트워크 장치에서 다른 네트워크 장치로 데이터 패킷을 가져 오는 역할을하며 실제로 전송하는 계층 바로 위에 있습니다. MAC 주소에 대해 이야기하고 MAC (하드웨어) 주소를 기반으로 호스트를 찾는 방법을 알고 있습니다.
  • 네트워크 계층은 당신이 기계와 같은 물리적 장치 등을 통해 물리적 경계에 걸쳐 데이터를 전송 할 수있는 계층입니다. 네트워크 계층은 본질적으로 물리적 주소와 관련이있는 추가 주소 기반 메커니즘을 지원해야합니다. 인터넷 프로토콜 (IPv4)을 입력하십시오. IP 주소는 인터넷을 통해 A에서 B로 패킷을 가져올 수 있지만 개별 홉을 통과하는 방법에 대해서는 아무것도 모릅니다. 이것은 라우팅 정보에 따라 위의 계층에 의해 처리됩니다.
  • 수송층 . 이 계층은 정보가 A에서 B로 전달되는 방식과 해당 동작에 대한 제한, 확인 또는 오류를 정의합니다. 예를 들어, TCP는 패킷에 손실 된 정보를 추론 할 수 있도록 추가 정보를 패킷에 추가합니다.

TCP는 무엇보다도 포트 개념을 포함 합니다. 이들은 인터넷 소켓 ( AF_INET)이 바인딩 할 수 있는 동일한 IP 주소에서 사실상 다른 데이터 끝점입니다 .

이와 같이 UDP 및 기타 전송 계층 프로토콜 도 마찬가지 입니다. 그들은 기술적으로하지 않습니다 필요 기능 포트, 외부와 연결을 수신하기 위해 같은 컴퓨터를 사용 (실제로 만들기)에 이상이 포트는 레이어에 여러 응용 프로그램에 대한 방법을 제공 않습니다.

이것은 TCP 또는 UDP 연결의 구조를 제공합니다. 각각에는 소스 포트 및 주소와 대상 포트 및 주소가 있습니다. 이것은 주어진 세션에서 대상 응용 프로그램이 소스로부터 응답 할뿐만 아니라 수신 할 수 있도록합니다.

따라서 포트는 본질적으로 동일한 주소를 공유하는 여러 개의 동시 연결을 허용하는 사양 지정 방식입니다.

이제 우리는 응용 프로그램 관점에서 외부 세계와 어떻게 통신하는지 살펴볼 필요가 있습니다. 이를 위해서는 운영 체제에 친절하게 문의해야하며 대부분의 OS는 Berkeley Sockets 방식의 작업을 지원하므로 다음과 같은 응용 프로그램에서 포트와 관련된 소켓을 만들 수 있습니다.

int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...

큰! 따라서 sockaddr구조에서 포트와 bam을 지정합니다! 작업 완료! 글쎄요, 거의 빼고 :

int fd = socket(AF_UNIX, SOCK_STREAM, 0);

가능합니다. 어, 그 작품에 스패너가 던져졌습니다!

좋아, 실제로 그렇지 않았습니다. 우리가해야 할 일은 적절한 정의를 제시하는 것입니다.

  • 인터넷 소켓은 서비스가 데이터를 제공 할 수있는 IP 주소, 프로토콜 및 관련 포트 번호의 조합입니다. 따라서 TCP 포트 80, stackoverflow.com은 인터넷 소켓입니다.
  • 유닉스 소켓은 파일 시스템에 표현 된 IPC 엔드 포인트입니다 (예 :) /var/run/database.sock.
  • 소켓 API는 애플리케이션이 소켓에서 데이터를 읽고 쓸 수 있도록 요청하는 방법입니다.

짜잔! 정리해 우리 계획에서

  • 포트는 전송 계층 프로토콜의 일부로 지정된 요청에 응답해야하는 서비스 번호를 식별하는 숫자 식별자입니다.

따라서 실제로 포트는 인터넷 소켓을 형성하기위한 요구 사항의 일부입니다. 불행히도 소켓이라는 단어의 의미가 여러 가지 아이디어에 적용되었습니다. 그래서 나는 혼란에 추가하기 위해 다음 프로젝트 소켓의 이름을 진심으로 권고합니다.)


이것이 총알이 떠나지 않고 파워 포인트를 떠나지 않는 이유입니다. 그들은 일한다!
Anurag Kalia

TCP-IP 및 네트워크 통신에 대한 아주 좋은 소개. 초보자는 이것을 먼저 읽으십시오.
Colin

32

소켓 = IP 주소 + 포트 (숫자 주소)이
둘은 머신에서 네트워크 연결의 엔드 포인트를 식별합니다. (방금 네트워크 101을 연결 했습니까?)


7
나는 항구가 당신의 정의보다 더 넓은 의미를 가지고 있다고 생각합니다.
Richard Dorman 2018 년

2
소켓은 TCP / IP 스택에만 종속되지 않습니다. 일반적으로 UNIX 도메인 소켓 또는 프로세스 간 통신 소켓을 참조하십시오.
matthias krull

이 답변에 대해 확실하지 않습니다. 포트를 할당하지 않고 HTTP를 사용하여 소켓을 통해 다른 프로세스와 통신 할 수 있습니다.
SeF

31

일반적으로 이론적으로는 많지만이 두 개념을 구별하는 가장 쉬운 방법 중 하나는 다음과 같습니다.

서비스를 받으려면 서비스 번호가 필요합니다. 이 서비스 번호를 포트라고합니다. 그렇게 간단합니다.

예를 들어, 서비스로서의 HTTP는 포트 80에서 실행 중입니다.

이제 많은 사람들이 서비스를 요청할 수 있으며 클라이언트 서버와의 연결이 설정되었습니다. 많은 연결이있을 것입니다. 각 연결은 클라이언트를 나타냅니다. 각 연결을 유지하기 위해 서버는 연결 당 소켓을 만들어 클라이언트를 유지 관리합니다.


각 소켓에는 자체 포트가 필요합니까?
MondayPaper

대박. 산악 지식을 제시하는 가장 간단한 방법입니다.
Asif Mehmood

5
"서버가 클라이언트를 유지하기 위해 연결마다 소켓을 만듭니다"라는 내용이 올바른지 잘 모르겠습니다.
Agrawal

1
@RushiAgrawal 그런 다음 찾아보십시오. 자세한 내용은 man accept를
user207421

1
이는 클라이언트가 유지 보수하기 위해 서버가 연결마다 작성하는 각 소켓에 대해 동일한 포트 번호 (예 : HTTP 연결 연속을위한 포트 80)를 가질 수 있지만 연결 요청이 전송되는 클라이언트의 다른 IP 주소를 가질 수 있음을 의미합니다. 권리?
Randika Vishman

25

2 PC 사이의 연결과 소켓을 동일시하는 많은 답변이있는 것 같습니다. 소켓은 항상 1 대의 PC 에서 엔드 포인트 였으며, 연결되었거나 연결되지 않았을 수 있습니다. 확실히 모든 지점에서 리스너 또는 UDP 소켓 *을 사용했습니다. 중요한 부분은 주소 지정이 가능하고 활동적이라는 것입니다. 해당 엔드 포인트에 소켓이 정의되어 있지 않으므로 1.1.1.1:1234로 메시지를 보내는 것은 작동하지 않습니다.

소켓은 프로토콜에 따라 다릅니다. 따라서 TCP / IPUDP / IP에서 사용 하는 고유성 구현 * (ipaddress : port)은 IPX (네트워크, 노드 및 소켓 등)와 다르지만 다릅니다. 소켓은 일반적인 "소켓"용어를 의미합니다. IPX 소켓 번호는 IP 포트와 동일합니다. 그러나 모두 고유 한 주소 지정 가능 엔드 포인트를 제공합니다.

IP가 주요 프로토콜이되었으므로 포트 (네트워킹 용어로)는 소켓 주소의 일부인 UDP 또는 TCP 포트 번호와 동의어가되었습니다.

  • UDP는 비 연결형이므로 두 엔드 포인트 사이에 가상 회로가 만들어지지 않습니다. 그러나 여전히 UDP 소켓 을 엔드 포인트라고합니다. API 함수는 둘 다 서로 다른 유형의 소켓임을 분명히합니다. SOCK_DGRAMUDP는 메시지를 보내고 SOCK_STREAMTCP는 가상 회로를 만듭니다.

  • 기술적으로 IP 헤더는 IP 주소를 보유하고 IP (UDP 또는 TCP) 상단의 프로토콜은 포트 번호를 보유합니다. 따라서 다른 프로토콜 (예 : 포트 번호는 없지만 IP 주소 정보가있는 ICMP) 을 가질 수 있습니다.


25

짧은 대답.

포트 같이 표현 내부 어드레스 프로그램 또는 프로세스를 식별하는 호스트 내에.

소켓 A와 기술 될 수 인터페이스 프로그래밍 프로그램이 로컬 인터넷에, 다른 프로그램이나 프로세스와 통신하거나 할 수 있도록.


3
포트 설명에서 '내부'라는 단어는 나에게 '비공개'처럼 들립니다.
Jonas N

우리가 말할 수 있을까요 : 소켓은 포트 내부에서 실행됩니까? 또는 포트는 소켓 내에서 실행됩니까?
Gucho Ca

@GuchoCa 우리는 소켓이나 포트가 전혀 작동하지 않는다고 말할 수는 없습니다. 무엇을 요구하는지 명확하지 않습니다.
user207421

16

'포트'는 TCP / IP 네트워킹의 개념이고 '소켓'은 API (프로그래밍)입니다. '소켓'은 포트와 호스트 이름 또는 네트워크 어댑터를 가져 와서 데이터를 보내거나받는 데 사용할 수있는 데이터 구조로 결합하여 코드로 만들어집니다.


가장 일반적인 대답은 "포트와 호스트 이름 또는 네트워크 어댑터를 가져 와서 결합하여 만든 것"입니다. 예를 들어, UNIX 소켓은 코드에서 데이터를 보내거나받는 데 사용할 수있는 데이터 구조 (또는 개체)입니다.
JosiahYoder-deactive 다음을 제외하고.

14

이것들은 기본적인 네트워킹 개념이므로 상세하면서도 이해하기 쉽고 포괄적 인 방법으로 설명하겠습니다.

  • 소켓 은 전화와 같습니다 (예 : 통신을위한 엔드 투 엔드 장치)
  • IP 는 전화 번호와 같습니다 (예 : 소켓 주소)
  • 포트 는 대화하려는 사람과 같습니다 (예 : 해당 주소에서 주문하려는 서비스).
  • 소켓은 클라이언트 또는 서버 소켓 일 수 있습니다 (예 : 회사에서 고객 지원 전화는 서버이지만 가정의 전화는 대부분 클라이언트 임)

따라서 네트워킹의 소켓은 쌍 (ip, port) = (address, service)에 바인딩 된 가상 통신 장치입니다.

노트 :

  • 컴퓨터, 컴퓨터, 호스트, 모바일 또는 PC에는 여러 개의 주소, 여러 개의 열린 포트 및 여러 개의 소켓이있을 수 있습니다. 사무실 에서처럼 여러 개의 전화 번호와 여러 사람이 대화 할 수있는 여러 개의 전화를 가질 수 있습니다.
  • 열린 / 활성 포트가 있으면 포트에 액세스 할 수있는 소켓이기 때문에 소켓에 ​​바인딩 된 소켓이 있어야합니다. 그러나 당분간 사용하지 않은 포트가있을 수 있습니다.
  • 또한 서버 소켓에서는 전화에서 많은 전화선 (전화 번호)을 연결할 수있는 것처럼 (포트, 컴퓨터의 특정 주소) 또는 (포트, 컴퓨터의 모든 주소)에 바인딩 할 수 있습니다. 전화 또는 하나의 특정 전화선을 전화기에 연결해도이 전화선 또는 특정 전화선을 통해 사람에게 연락 할 수 있습니다.
  • 전화에서와 같이 소켓을 두 개의 포트와 연관 ​​(바인드) 할 수는 없습니다. 일반적으로 항상 같은 전화를 사용하는 두 사람이있을 수는 없습니다.
  • 고급 : 동일한 시스템에서 동일한 유형 (클라이언트 또는 서버)과 동일한 포트 및 IP를 가진 두 개의 소켓을 가질 수 없습니다. 그러나 클라이언트 인 경우 각 클라이언트 소켓의 로컬 포트가 다르므로 두 개의 소켓으로 서버에 대한 두 개의 연결을 열 수 있습니다)

그것은 당신이 의심을 지우고 희망


이 질문에서 소켓 / 포트 / IP 주소에 대한 모든 이해와 유추를 보는 것이 흥미 롭습니다. 그리고 나는이 대답을 좋아한다.
Bloodmoon

12

탁월한 투표 응답을 읽은 후 네트워크 프로그래밍의 새로운 이민자에게 다음 사항이 강조되어야한다는 것을 알았습니다.

TCP-IP 연결은 한 주소 : 포트 조합과 다른 주소 : 포트 조합을 연결하는 양방향 경로입니다. 따라서 로컬 컴퓨터에서 원격 서버의 포트 (예 : www.google.com:80)로 연결을 열 때마다 서버에서 새 포트 번호를 연결과 연결하여 서버에서 다시 돌려받습니다 (예 : 127.0.0.1:65234). netstat를 사용하여 컴퓨터의 연결을 보는 것이 도움이 될 수 있습니다.

> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  192.168.0.6.49871      17.172.232.57.5223     ESTABLISHED
...

12

소켓 주소는 IP 주소 및 포트 번호입니다

123.132.213.231         # IP address
               :1234    # port number
123.132.213.231:1234    # socket address

2 개의 소켓이 서로 바인드되면 연결이 발생합니다.


두 개의 소켓을 묶는 것과 같은 것은 없습니다. '바운드'라는 단어는 포트가있는 다른 것을 의미합니다.
user207421

10

소켓은 프로세스에서 운영 체제에 네트워크 서비스를 요청하는 데 사용되는 특수한 유형의 파일 핸들입니다. 소켓 주소는 트리플 ({protocol, local-address, local-process})이며 로컬 프로세스는 포트 번호로 식별됩니다.

TCP / IP 제품군에서 예를 들면 다음과 같습니다.

{tcp, 193.44.234.3, 12345}

대화는 두 프로세스 간의 통신 링크이므로 두 프로세스 간의 연관성을 나타냅니다. 연결은 연결을 구성하는 두 개의 프로세스 (프로토콜, 로컬 주소, 로컬 프로세스, 외부 주소, 외부 프로세스)를 완전히 지정하는 5 개의 튜플입니다.

TCP / IP 제품군에서 예를 들면 다음과 같습니다.

{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}

유효한 연결이 될 수 있습니다.

반 연결은 {protocol, local-address, local-process}입니다.

또는

{프로토콜, 외부 주소, 외부 프로세스}

연결의 각 반을 지정합니다.

반 연결을 소켓 또는 전송 주소라고도합니다. 즉, 소켓은 네트워크에서 이름을 지정하고 주소를 지정할 수있는 통신의 끝점입니다. 소켓 인터페이스는 통신 프로토콜에 대한 여러 API (Application Programming Interface) 중 하나입니다. 일반적인 통신 프로그래밍 인터페이스로 설계된이 인터페이스는 4.2BSD UNIX 시스템에서 처음 도입되었습니다. 표준화되지는 않았지만 사실상 업계 표준이되었습니다.


이 대답은 나를 위해 한 것입니다. 그 누구도 연관이라는 단어를 언급하지 않았기 때문인 것 같습니다. 좋은 설명입니다.
rationalcoder

귀하의 예제에는 프로세스 번호가 없습니다. 당신이 찾고있는 단어는 '포트'입니다.
user207421

첫 번째 단락을 읽으십시오. 명확하게 언급되어 있습니다. 정확한 문구를 인용하여 모호한 점을 알려주십시오. 즉흥 연주에 도움이 될 것입니다.
크리슈나

7

소켓은 통신 엔드 포인트입니다. 소켓은 TCP / IP 프로토콜 제품군과 직접 관련이 없으며 시스템이 지원하는 모든 프로토콜과 함께 사용할 수 있습니다. C 소켓 API는 먼저 시스템에서 빈 소켓 객체를 가져와 로컬 소켓 주소에 바인딩 할 수 있습니다 (연결없는 프로토콜의 들어오는 트래픽을 직접 검색하거나 연결 지향 된 프로토콜의 들어오는 연결 요청을 수락 할 수 있음). 또는 원격 소켓 주소에 연결할 수 있습니다 (두 종류의 프로토콜 모두). 둘 다 제어하려면 소켓이 바인딩 된 로컬 소켓 주소와 소켓이 연결된 원격 소켓 주소를 모두 제어 할 수 있습니다. 연결없는 프로토콜의 경우 소켓 연결은 선택 사항이지만 그렇게하지 않으면 소켓 이이 데이터를 어디로 보낼지 다른 방법으로 소켓을 통해 보내려는 모든 패킷과 함께 대상 주소를 전달해야합니까? 장점은 단일 소켓을 사용하여 다른 소켓 주소로 패킷을 보낼 수 있다는 것입니다. 소켓을 구성하고 연결했으면 양방향 통신 파이프로 간주하십시오. 이를 사용하여 데이터를 일부 대상으로 전달하고 일부 대상이이 데이터를 사용하여 데이터를 다시 전달할 수 있습니다. 소켓에 쓴 내용은 발송되며 수신 된 내용은 읽을 수 있습니다. 이를 사용하여 데이터를 일부 대상으로 전달하고 일부 대상이이 데이터를 사용하여 데이터를 다시 전달할 수 있습니다. 소켓에 쓴 내용은 발송되며 수신 된 내용은 읽을 수 있습니다. 이를 사용하여 데이터를 일부 대상으로 전달하고 일부 대상이이 데이터를 사용하여 데이터를 다시 전달할 수 있습니다. 소켓에 쓴 내용은 발송되며 수신 된 내용은 읽을 수 있습니다.

반면 포트는 TCP / IP 프로토콜 스택의 특정 프로토콜에만있는 것입니다. TCP 및 UDP 패킷에는 포트가 있습니다. 포트는 단순한 숫자입니다. 소스 포트와 대상 포트의 조합은 두 호스트 간의 통신 채널을 식별합니다. 예를 들어 간단한 HTTP 서버와 간단한 FTP 서버가 될 서버가있을 수 있습니다. 이제 해당 서버의 주소로 패킷이 도착하면 HTTP 또는 FTP 서버의 패킷인지 어떻게 알 수 있습니까? HTTP 서버는 포트 80에서 실행되고 FTP 서버는 포트 21에서 실행되므로 패킷이 대상 포트 80과 함께 도착하면 FTP 서버가 아니라 HTTP 서버를위한 것입니다. 또한 소스 포트가없는 패킷에는 서버가 한 번에 하나의 IP 주소에만 연결할 수 있습니다. 소스 포트를 사용하면 서버가 다른 동일한 연결을 구별 할 수 있습니다. 포트 80, 동일한 대상 IP (서버의 IP) 및 동일한 소스 IP가 있습니다. 동일한 클라이언트이지만 서로 다른 소스 포트가 있으므로 서버는 서로 구별 할 수 있습니다. 그리고 서버가 응답을 다시 보내면 클라이언트는 동일한 서버에서 수신 한 다른 응답을 구별 할 수있는 방식으로 요청의 포트로 전달됩니다.


2
이것은 올바르지 않습니다. 소켓은 엔드 포인트가 아닙니다. 소켓은 두 개의 엔드 포인트로 정의됩니다. 각 엔드 포인트는 네트워크 주소와 포트로 정의됩니다. 포트의 목적은 동일한 네트워크 주소에서 여러 엔드 포인트를 구별하여 여러 개의 동시 소켓을 지원할 수 있도록하는 것입니다.
Peter Wone

1
RFC793 (원래 TCP 사양)은 네트워크 주소와 포트의 조합을 소켓으로 참조 하므로이 위치를 알 수 있지만 소켓이 반드시 두 개의 끝점으로 정의되어있는 것은 잘못된 것입니다.
Peter Wone

2
성찰에 대한 언급은 모순되며 사과드립니다. 네트워크 주소와 포트로 각각 식별되는 두 개의 엔드 포인트 (일명 소켓)간에 TCP 연결이 설정 될 때까지 매우 엄격하게 통신이 이루어지지 않습니다. 나는 포기한다.
Peter Wone September

6

포트는 가장 쉬운 부분으로, 소켓의 고유 식별자 일뿐입니다. 소켓은 프로세스가 연결을 설정하고 서로 통신하기 위해 사용할 수있는 것입니다. Tall Jeff는 완벽하지 않은 훌륭한 전화 비유를 가지고 있었으므로 수정하기로 결정했습니다.

  • IP 및 포트 ~ 전화 번호
  • 소켓 ~ 전화 장치
  • 연결 ~ 전화
  • 연결 설정 ~ 전화 걸기
  • 프로세스, 원격 애플리케이션 ~ 사람
  • 메시지 ~ 연설

좋은 설명 (특히 네트워킹 용어의 기초가되는 전화 교환 기록을 고려할 때 ..)
oɔɯǝɹ

netstat디스플레이를 좀 보세요 . 청취 소켓에서 승인 된 모든 소켓은 동일한 포트를 공유합니다. Ergo 포트는 소켓의 고유 식별자가 아닙니다.
user207421

6

응용 프로그램은 네트워크를 통해 통신하는 프로세스 쌍 (클라이언트-서버 쌍)으로 구성됩니다. 이러한 프로세스는 socket 이라는 소프트웨어 인터페이스를 통해 네트워크와 메시지를주고받습니다 . "컴퓨터 네트워킹 : 하향식 접근"책에 제시된 유추를 고려하십시오. 다른 집과 의사 소통을 원하는 집이 있습니다. 여기서 집은 프로세스와 유사하며 소켓의 문입니다. 송신 프로세스는 데이터를 목적지로 전송하는 인프라가 출입문의 다른쪽에 있다고 가정합니다. 메시지가 다른쪽에 도착하면 수신자의 도어 (소켓)를 통해 집 (프로세스)으로 전달됩니다. 같은 책의이 삽화가 도움이 될 수 있습니다.
여기에 이미지 설명을 입력하십시오
소켓은 전송 계층의 일부이며 응용 프로그램에 논리적 통신을 제공합니다. 즉, 응용 프로그램의 관점에서 두 호스트간에 많은 라우터 및 / 또는 스위치가 있더라도 두 호스트가 서로 직접 연결되어 있습니다. 따라서 소켓은 연결 자체가 아니라 연결의 끝점입니다. 전송 계층 프로토콜은 중간 라우터가 아닌 호스트에서만 구현됩니다.
포트기계에 내부 주소 지정 수단을 제공합니다. 주요 목적은 여러 프로세스가 다른 프로세스 (데이터)를 방해하지 않고 네트워크를 통해 데이터를주고받을 수 있도록하는 것입니다. 모든 소켓에는 포트 번호가 제공됩니다. 세그먼트가 호스트에 도착하면 전송 계층은 세그먼트의 대상 포트 번호를 검사합니다. 그런 다음 세그먼트를 해당 소켓으로 전달합니다. 전송 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업을 디 멀티플렉싱 이라고 합니다 . 세그먼트의 데이터는 소켓에 연결된 프로세스로 전달됩니다.


5

소켓은 소프트웨어의 구조입니다. 그것은 다소 파일입니다. 읽기 및 쓰기와 같은 작업이 있습니다. 그것은 물리적 인 것이 아닙니다. 소프트웨어가 물리적 인 것을 참조 할 수있는 방법입니다.

포트는 장치와 같은 것입니다. 각 호스트에는 하나 이상의 네트워크가 있습니다 (실제). 호스트는 각 네트워크에 주소를 가지고 있습니다. 각 주소는 수천 개의 포트를 가질 수 있습니다.

하나의 소켓 만 주소에서 포트를 사용 중일 수 있습니다. 소켓은 파일 시스템 I / O에 장치를 할당하는 것과 거의 비슷한 포트를 할당합니다. 포트가 할당되면 다른 소켓은 해당 포트에 연결할 수 없습니다. 소켓이 닫히면 포트가 해제됩니다.

TCP / IP 용어를 살펴보십시오 .


3
소켓에 대한이 설명은 기본이 아닙니다. 소켓은 튜플이 IP ADDR & 포트 쌍을 나타내는 튜플 쌍 사이의 연결에 관한 것입니다. 또한 많은 소켓이 동일한 포트에 연결할 수 있습니다. 웹 서버가 포트 80에서 다중 연결을 취하는 방법을 어떻게 생각하십니까? 이것은 잘못된 답변입니다
Tall Jeff

1
죄송합니다. 여러 개의 소켓이 포트 80에 연결되어 있지 않습니다. 하나의 소켓이 연결되어 실제 전송이 발생하는 추가 소켓을 생성합니다. opengroup.org/onlinepubs/009695399/functions/listen.html을 참조하십시오 .
S.Lott

1
실제로 opengroup.org/onlinepubs/009695399/functions/connect.html 의 설명 이 더 좋습니다. 연결에 의해 리턴 된 피어 소켓은 포트 80에 없습니다.
S.Lott

1
이 게시물은 여러 가지 측면에서 부정확하고 여러 측면에서 오해의 소지가 있습니다.
Peter Wone

@ 피터 원 : 어떤 세부 사항? 어떤 측면? 나의 실수로부터 배우기를 바라고있다.
S.Lott

5

에서 오라클 자바 튜토리얼 :

소켓은 네트워크에서 실행되는 두 프로그램 간의 양방향 통신 링크의 한 끝점입니다. 소켓은 포트 번호에 바인드되어 TCP 계층이 데이터를 보낼 애플리케이션을 식별 할 수 있습니다.


그것은 단지 튜토리얼 일 뿐이며 규범적인 참조는 아닙니다.
user207421

"소켓은 양방향 통신 링크의 하나의 엔드 포인트입니다"소켓 정의가 아닌가, 자바 튜토리얼이 아닙니까?
prayagupd 2016 년

@prayagupd 물론 그것은 정의이지만, 사양이 아닌 튜토리얼에서 온 것입니다.
user207421

4

포트와 소켓은 은행 지점과 비교할 수 있습니다.

"은행"의 건물 번호는 IP 주소와 유사합니다. 은행에는 다음과 같은 다른 섹션이 있습니다.

  1. 저축 회계 부서
  2. 개인 대출 부서
  3. 주택 융자 부서
  4. 고충 처리부

따라서 1 (저축 계좌 부서), 2 (개인 대출 부서), 3 (주택 대출 부서) 및 4 (고충 처리 부서)가 항구입니다.

이제 저축 예금 계좌를 개설하고 은행 (IP 주소)으로 이동 한 다음 "저축 계좌 부서"(포트 번호 1)로 이동 한 다음 "저축 계좌 부서"에서 근무하는 직원 중 한 명을 만납니다. ". 계좌 개설을 위해 SAVINGACCOUNT_EMPLOYEE1에게 전화하겠습니다.

SAVINGACCOUNT_EMPLOYEE1은 소켓 설명자이므로 SAVINGACCOUNT_EMPLOYEE1 대 SAVINGACCOUNT_EMPLOYEEN이있을 수 있습니다. 이들은 모두 소켓 설명자입니다.

마찬가지로, 다른 부서들도 그 아래에서 일하고 있으며 소켓과 유사합니다.


3

소켓은 데이터 I / O 메커니즘입니다. 포트는 통신 프로토콜계약 개념입니다 . 소켓은 포트없이 존재할 수 있습니다. 포트는 특정 소켓없이 존재할 수 있습니다 (예 : 동일한 포트에서 여러 개의 소켓이 활성화 된 경우 일부 프로토콜에 허용 될 수 있음).

포트는 많은 프로토콜을 사용하여 수신자가 패킷을 라우팅해야하는 소켓을 결정하는 데 사용되지만 항상 필요한 것은 아니며 다른 방법으로 수신 소켓을 선택할 수 있습니다. 포트는 전적으로 프로토콜 처리기에서 사용하는 도구입니다. 네트워크 서브 시스템. 예를 들어, 프로토콜이 포트를 사용하지 않으면 패킷은 모든 청취 소켓 또는 소켓으로 이동할 수 있습니다.


3

내가 생각하는 상대 TCP / IP 용어는 질문에 암시됩니다. 평신도의 관점에서 :

PORT는 특정 우편 번호에있는 특정 집의 전화 번호와 같습니다. 도시의 우편 번호는 도시 및 해당 도시의 모든 집의 IP 주소로 생각할 수 있습니다.

반면에 소켓은 서로 대화하는 한 쌍의 집 전화 사이에 설정된 전화 통화와 비슷합니다. 이러한 전화는 같은 도시의 주택 또는 다른 도시의 두 주택 사이에서 이루어질 수 있습니다. SOCKET 인 서로 통화하는 전화 쌍 사이에 임시로 설정된 경로입니다.


2
소켓은 엔드 포인트입니다. 연결이 설정되기 전에 (TCP) 또는 연결이없는 경우 (UDP) 존재합니다. Ergo 자체는 연결이 아닙니다.
user207421

2

넓은 의미에서 소켓-은 전기, 케이블 또는 전화 소켓과 같은 소켓입니다. "필수 사항"(전력, 신호, 정보)이 나가고 나올 수있는 지점. "필수 항목"을 사용하는 데 필요하지 않은 많은 세부 항목을 숨 깁니다. 소프트웨어 관점에서 두 엔티티 사이의 통신 메커니즘을 정의하는 일반적인 방법을 제공합니다 (이 엔티티는 두 개의 애플리케이션, 두 개의 물리적으로 분리 된 디바이스, OS 내의 사용자 및 커널 공간 등일 수 있음).

포트는 엔드 포인트 판별 자입니다. 엔드 포인트를 다른 엔드 포인트와 차별화합니다. 네트워킹 수준에서는 네트워킹 스택이 정보를 적절한 응용 프로그램으로 전달할 수 있도록 한 응용 프로그램과 다른 응용 프로그램을 구분합니다.


2

이 질문에 이미 이론적 인 답변이 주어졌습니다. 소켓과 포트에 대한 이해를 돕기 위해이 질문에 대한 실제적인 예를 드리고자합니다.

여기서 찾았어요

이 예는 Wiley와 같은 웹 사이트에 연결하는 과정을 안내합니다. 웹 브라우저 (예 : Mozilla Firefox)를 열고 주소 표시 줄에 www.wiley.com을 입력하십시오. 웹 브라우저는 DNS (Domain Name System) 서버를 사용하여 www.wiley.com이라는 이름으로 IP 주소를 식별합니다. 이 예에서 주소는 192.0.2.100입니다.

Firefox는 192.0.2.100 주소와 응용 프로그램 계층 웹 서버가 작동하는 포트에 연결합니다. Firefox는 잘 알려진 포트이기 때문에 어떤 포트를 기대해야하는지 알고 있습니다. 웹 서버의 잘 알려진 포트는 TCP 포트 80입니다.

Firefox가 연결을 시도하는 대상 소켓은 socket : port 또는이 예에서 192.0.2.100:80으로 작성됩니다. 이것은 연결의 서버 측이지만 서버는 Mozilla Firefox에서 보려는 웹 페이지를 보낼 위치를 알아야하므로 연결의 클라이언트 측에도 소켓이 있습니다.

클라이언트 쪽 연결은 192.168.1.25와 같은 IP 주소와 임의로 선택된 동적 포트 번호로 구성됩니다. Firefox와 관련된 소켓은 192.168.1.25:49175와 같습니다. 웹 서버는 TCP 포트 80에서 작동하기 때문에이 두 소켓은 모두 TCP 소켓이지만 UDP 포트에서 작동하는 서버에 연결하는 경우 서버와 클라이언트 소켓은 모두 UDP 소켓이됩니다.


인용 품질이 매우 낮습니다. 세 번째 단락은 '소켓'이라는 단어를 'IP 주소'를 의미하는 것처럼 잘못 사용합니다. 그렇지 않습니다.
user207421

2

소켓은 커널이 데이터 I / O를 위해 사용자 응용 프로그램에 제공하는 추상화입니다. 소켓 유형은 프로토콜의 처리, IPC 통신 등으로 정의됩니다. 따라서 누군가가 TCP 소켓을 작성하는 경우, 간단한 방법으로 TCP 소켓 변환 및 패킷을 낮은 수준의 네트워크 프로토콜로 전달하는 것은 커널의 특정 소켓 구현에 의해 수행됩니다. 장점은 사용자가 프로토콜 특정 위생 처리에 대해 걱정할 필요가 없으며 일반 버퍼처럼 소켓에서 데이터를 읽고 쓸 수 있다는 것입니다. IPC의 경우에도 마찬가지입니다. 사용자는 소켓에서 데이터를 읽고 쓰기 만하면 커널은 작성된 소켓 유형에 따라 모든 하위 레벨 세부 사항을 처리합니다.

IP와 함께 포트는 소켓에 주소를 제공하는 것과 같지만 반드시 필요한 것은 아니지만 네트워크 통신에 도움이됩니다.


2

단일 포트에는 여러 개의 전기 콘센트와 같은 다른 외부 IP에 연결된 하나 이상의 소켓이있을 수 있습니다.

  TCP    192.168.100.2:9001     155.94.246.179:39255   ESTABLISHED     1312
  TCP    192.168.100.2:9001     171.25.193.9:61832     ESTABLISHED     1312
  TCP    192.168.100.2:9001     178.62.199.226:37912   ESTABLISHED     1312
  TCP    192.168.100.2:9001     188.193.64.150:40900   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.23.194.149:43970   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.49.73.11:38842     ESTABLISHED     1312

2

소켓은 네트워킹 엔드 포인트의 SW 추상화로 애플리케이션에 대한 인터페이스로 사용됩니다. Java에서는 C #으로 객체로 표시되고 Linux에서는 Unix로 파일입니다.

포트는 통신을 설정하려는 경우 지정한 소켓의 속성입니다. 소켓에서 패킷을 수신하려면 특정 로컬 포트 ​​및 NIC (로컬 IP 주소 사용) 또는 모든 NIC (INADDR_ANY가 바인드 호출에 지정됨)에 바인딩해야합니다. 패킷을 보내려면 원격 소켓의 포트와 IP를 지정해야합니다.



1

포트:

포트는 직렬, 병렬 및 USB 포트와 같은 주변 장치의 물리적 연결 지점을 나타낼 수 있습니다. 포트라는 용어는 허브, 스위치 또는 라우터의 특정 이더넷 연결 지점을 가리 킵니다.

소켓:

소켓은 두 네트워크 응용 프로그램 간의 단일 연결을 나타냅니다. 이 두 응용 프로그램은 명목상 다른 컴퓨터에서 실행되지만 소켓은 단일 컴퓨터의 프로세스 간 통신에 사용될 수도 있습니다. 응용 프로그램은 서로 통신하기 위해 여러 소켓을 만들 수 있습니다. 소켓은 양방향이므로 연결의 어느 쪽이든 데이터를주고받을 수 있습니다.


TCP 또는 UDP 포트는 물리적 또는 이더넷 연결 지점을 참조하지 않습니다. 당신은 질문에 대답하지 않았습니다.
user207421

1

포트는 IP 네트워크 프로토콜에 대한 TCP 및 UDP 전송의 통신 끝점을 나타냅니다. 소켓은 이러한 프로토콜 (소켓 API) 구현에 일반적으로 사용되는 통신 엔드 포인트에 대한 소프트웨어 추상화입니다. 대체 구현은 XTI / TLI API입니다.

또한보십시오:

Stevens, WR 1998, UNIX 네트워크 프로그래밍 : 네트워킹 API : 소켓 및 XTI; 프렌 티스 홀 1 권.
Stevens, WR, 1994, TCP / IP Illustrated, Volume 1 : The Protocols, Addison-Wesley.

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