소켓이란?


49

누군가 소켓이 무엇인지 설명해 줄 수 있습니까? SSL 등의 맥락에서 많은 약어로 볼 수 있습니다.

또한 왜 소켓이라고 불리는가? 그들이 발명 한 이름 이었기 때문에 순수합니까? 아니면 처음 등장한 이름입니까?


9
평신도의 관점에서 소켓은 전화입니다. 손에 쥐고있는 것은 다른 전화와 대화 할 수 있도록하는 것입니다. 비유는 조금씩 나뉩니다. 대부분의 전화 대화는 P2P입니다. 소켓 연결은 클라이언트에서 서버로입니다. 클라이언트 (예 : 브라우저와 같은 워크 스테이션 소프트웨어)는 서버 (예 : 웹 서버, 파일 서버, 인증 서버 또는 기타)에 연결합니다. 비유의 또 다른 결함 : 소켓 연결을 닫으면 소켓이 손상되고 새 연결을 설정하기 전에 새 소켓을 만들어야합니다.
G-Man

비유에는 그렇게 나쁘지 않습니다. 서버는 콜센터 일 뿐이며 한 번에 수백 개의 활성 통화를 할 수 있습니다.
MSalters

답변:


42

소켓은 통신을위한 논리적 끝점입니다. 이들은 전송 계층에 존재합니다. 소켓에서 물건을주고받을 수 있으며 소켓을 바인딩하고들을 수 있습니다. 소켓은 프로토콜, 시스템 및 포트에 따라 다르며 패킷 헤더에서와 같이 주소가 지정됩니다.

네트워크 프로그래밍프로세스 간 통신 에 대한 Beej의 안내서 에는 소켓 사용 방법에 대한 유용한 정보가 있으며이 정확한 질문에 대한 답변도 제공 합니다.


64

가장 간단한 용어로 소켓은 네트워크 연결을 나타내는 의사 파일입니다. 소켓이 작성되면 (적절한 기본 요소와 다른 호스트를 식별하기위한 적절한 매개 변수를 사용하여) 소켓에 대한 쓰기가 전송되는 네트워크 패킷으로 전환되고 네트워크에서 수신 된 데이터를 소켓에서 읽을 수 있습니다.

어떤 점에서, 소켓은 파이프와 매우 유사합니다. 소켓을 사용하는 프로그램의 파일처럼 보이지만 디스크에 읽거나 쓰지 않습니다. 오히려 다른 프로그램 (파이프의 경우 로컬, 소켓의 경우 원격)과 통신 할 수 있습니다. 또한 언급했듯이 양방향 통신을 제공합니다 (한 쌍의 올바르게 연결된 파이프와 유사).

마지막으로 단일 시스템의 프로그램이 TCP와 같은 표준 네트워크 프로토콜을 사용하여 통신하는 것이 일반적입니다. 같은 호스트로 돌아 가기 위해 네트워크 하드웨어 (있는 경우), 컴퓨팅 체크섬 등으로가는 것은 낭비 일 것입니다. 원격 프로세스가 아닌 동일한 호스트에서 프로세스를 연결하고 네트워크 리소스를 전혀 사용하지 않습니다. 이런 방식으로 프로세스 간 통신 매체입니다.

트리플 리가 언급했듯이 BSD의 역사에서 파이프는 소켓보다 먼저 도입되었으며 소켓이 있으면 소켓을 사용하여 다시 구현되었습니다. 동일한 참조 인 FreeBSD 운영 체제의 설계 및 구현은 파이프가 성능상의 이유로 소켓이 아닌 구현으로 되돌아 갔다고 언급합니다. 이는 파이프가 유사성을 공유한다는 사실을 분명히 강조합니다.


3
파이프가 소켓보다 오래되었다고 언급 할 수도 있지만 일단 소켓 인터페이스가 Unix에 추가되면 로컬 소켓을 사용하여 파이프를 다시 구현하는 것이 좋습니다.
tripleee

@tripleee : 그것은 위대한 역사적 포인트입니다. 참조를 제공 할까?
dhag

빠른 인터넷 검색은 FreeBSD 운영 체제의 설계 및 구현 에서 40 페이지 를 나타냅니다 . 이 텍스트는 4.2BSD에서 이러한 변경 사항을 언급하지만 성능상의 이유로 더 이상 수행되지 않는 방법을 설명합니다.
tripleee

훌륭합니다. 나는 이것을 내 대답에 추가 할 것입니다.
dhag

최고의 테크노 답변
chaosguru

7

소켓 추상화. 응용 프로그램이 운영 체제가 여러 응용 프로그램에 의해 제한된 리소스 사용을 중재하고 구성 할 수 있도록 시스템 리소스 (이 경우 네트워크 연결)를 활용할 수있는 인터페이스를 제공합니다.

소켓을 통해 전송되는 데이터가 메일 봉투로 생각 될 수 있으면 소켓이 메일 박스가됩니다. 집 (프로그램)에 우편함 (소켓)을 부착하고 발송 우편물 (데이터)을 넣습니다. 예정된 시간에 우체부 (운영 체제)가 와서 나가는 메일을 집어 들고 같은 사서함에있는 들어오는 메일을 제거합니다. 발신 우편물은 귀하를 대신하여 모든 이웃 우편물과 함께 우체부 트럭 (네트워크 연결)을 통해 수취인에게 전달됩니다. 이를 통해 서신을 직접 전달하는 데 드는 비용, 시간, 어려움 등이 없어도 멀리있는 사람들과 연락 할 수 있습니다.

왜 그들이 '소켓'이라고 불렀는지에 관해서는, 발명가가 원하는 것을 무엇이든 부르는 개념이 거기에서 큰 역할을한다는 개념. 내 의견으로는 나쁜 이름은 아니지만 :)


7

이제 무엇입니까?

소켓 또는 "소켓"은 여러 가지가 될 수 있습니다.

우선, 사고 모델과 API (Application Programming Interface) 입니다. 즉, 정확하게 규정 된 계약에 따라 따라야 할 규칙 세트와 무언가를 수행하는 프로그램을 작성하는 데 사용할 수있는 기능 세트가 있습니다. 이 특정한 경우에, 뭔가 다른 프로그램과 데이터 교환을 의미한다.

소켓 API는 일반적으로 "통신"의 세부 사항을 광범위하게 추상화합니다. 그것은 당신이 누구와 대화하고 어떻게 (거의) 일관성 있고 동일한 쿠키 커터 형태를 통해 캡슐화합니다.
다른 "도메인"(예 : "유닉스 소켓"또는 "인터넷 소켓")과 다른 유형의 통신 (예 : "데이터 그램"소켓 또는 "스트림"소켓)에 소켓을 만들고 다른 수신자와 대화 할 수 있습니다. 모든 것이 정확히 동일하게 작동합니다 (99 %, 분명히 고려해야 할 미세한 차이가 있습니다).

같은 컴퓨터 나 다른 컴퓨터에서 다른 프로그램과 대화하는지, 또는 해당 컴퓨터간에 또는 다른 컴퓨터간에 IPv4 또는 IPv6 네트워크가 있는지 여부를 알 필요가 없습니다 (그리고 알고 싶지도 않습니다!). 당신이 들어 본 적이없는 프로토콜.

socket또한 특수한 종류의 파일 인 " 소켓 " 을 작성하는 라이브러리 함수 (또는 syscall)의 이름입니다 (Unix의 모든 파일은 파일 임).

그것은 어떻게 비교합니까 ...

소켓은 파이프 및 네임 파이프와 같은 범주에 속합니다

파이프는 동일한 컴퓨터에서 리더와 라이터 (프로그램) 사이의 단방향 통신 수단입니다 . TCP와 같이 데이터 스트림 을 시뮬레이트합니다 .
즉, 파이프의 관점에서 개별 "메시지"또는 "데이터 블록"이 존재하지 않습니다. 많은 양의 데이터를 "한쪽 끝"에 복사 할 수 있으며, 다른 사람이 "다른 쪽 끝"에서 동일한 바이트 순서로 모든 양의 데이터를 읽을 수 있습니다. 그것을 밀어 넣었다.

명명 된 파이프는, 음, 단순히 파이프되는 파일 시스템에 이름을 소유 . 즉, 파일처럼 보이고 작동하는 것입니다. 디렉토리 목록에 나타나서 파일을 열고 쓸 수있는 등의 작업을 수행 할 수 있습니다. 소켓 특수 파일 (명명 된 소켓)을 작성할 수도 있습니다. .

소켓은, 다른 한편으로는,의 수단으로 이 방법은 당신이 작성하고 같은 소켓에서 읽을 수 있다는 것을 의미합니다 ( "이중") 통신, 당신은 양방향 통신을위한 두 개의 소켓이 필요하지 않습니다.
또한 소켓은 스트림 (파이프와 동일)으로 작동하거나 불연속적이고 신뢰할 수없는 메시지를 보내거나 불연속적이고 정렬 된 메시지를 보낼 수 있습니다 (처음 두 개는 모든 도메인에서 작동하며 마지막은 "유닉스 도메인"에서만 작동 함) ). 완전히 다른 컴퓨터에있는 사람에게 메시지를 보내거나 스트림을 시뮬레이션 할 수 있습니다. 소켓은 일부 조건에서 일대 다 통신 (멀티 캐스트) 형식을 수행 할 수도 있습니다.

이를 염두에두고 소켓은 파이프보다 훨씬 더 복잡하고 일반적으로 파이프보다 오버 헤드가 더 많다는 것이 분명합니다 (기본적으로 memcpy버퍼와 간단하지 않습니다 ). 운영 체제는 일반적으로 크게 최적화 된 빠른 경로를 적용하므로 실제로 큰 차이는 없습니다.

네트워크와 관련하여 때때로 언급되는 프로세스 간 통신

예, 소켓은 프로세스 간 통신의 가능한 방법 중 하나입니다 (공유 메모리 및 파이프가 대안의 예입니다). 동시에 위에서 설명한 것처럼 "네트워킹"에 사용되고 있습니다.


1

udp 또는 tcp over IP의 경우

소켓 주소는 IP 주소와 포트 번호의 조합입니다.

IP 주소는 인터넷에있는 기계의 주소입니다. 예 : unix.stackexchange.com has address 198.252.206.140

그러나 각 머신은 하나 이상의 서비스를 제공 할 수 있어야하므로 대부분의 머신은 포트 80에서 http (웹 페이지)를, 포트 22에서 ssh 등을 제공합니다.

따라서 (소켓) unix.stackexchange.com:80포트 80unix.stackexchange.com이 웹 사이트의 액세스 포인트입니다.

그러나 다른 유형의 소켓이 있습니다. 아래 주석을 참조하십시오.


5
tcp / ip는 한 종류의 소켓입니다. tcp / ip와 관련이없는 다른 것들이 있습니다.
psusi

얼마나 많은 다른 종류의 소켓이 있습니까?
Abdul Al Hazred

1
@ AbdulAlHazred, ip 네트워킹에 사용되는 4 가지 일반적인 유형, ip6와 동일, 2는 유닉스, 2는 IPX를 알고 있습니다. 나는 ax25, atm 또는 appletalk를 보지 않았다. 리눅스에서 지원되는 다른 프로토콜이 있으며 리눅스가 지원하지 않는 프로토콜이 있습니다. 대부분의 경우 각 프로토콜에는 stream (tcp) 및 datagram (udp) 소켓이 있습니다. 원시 소켓도 일반적이며 imcp에도 소켓 인터페이스가있을 수 있습니다.
hildred

요점은이 답변은 한 유형의 소켓 만 포함한다는 점에서 불완전하며 일반적으로 소켓이 항상 네트워크 소켓, 특히 IP ( AF_INET) 소켓 인 것처럼 소켓을 나타냅니다 .
tripleee

0

나는 당신이 네트워킹에 대해 물었다 고 생각합니다. 따라서 TCP 서비스는 소켓을 통신 지점으로 사용하며 IP 주소, 프로토콜 및 포트 번호로 구성됩니다.

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