소켓이란 무엇입니까?

소켓이란 무엇입니까?

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

또한 소켓이라고 불리는 이유는 무엇입니까? 순전히 그들이 이름을 발명했기 때문일까요? 아니면 그들이 생각해낸 이름이었나요?

답변1

소켓은 네트워크 연결을 나타내는 의사 파일입니다. 소켓이 생성되면(다른 호스트 및 포트 식별) 소켓에 대한 쓰기는 전송된 네트워크 패킷으로 변환되고, 네트워크에서 수신된 데이터는 소켓에서 읽을 수 있습니다.

소켓은 파이프와 유사합니다. 둘 다 이를 사용하는 프로그램에서는 파일처럼 보입니다. 둘 다 프로세스 간 통신을 용이하게 합니다. 파이프는 로컬 프로그램과 통신합니다. 언급한 대로 소켓은 양방향 통신도 제공합니다(제대로 연결된 한 쌍의 파이프와 마찬가지로).


마지막으로, 단일 시스템의 프로그램은 일반적으로 표준 네트워크 프로토콜(예: TCP)을 사용하여 통신합니다. 네트워크 하드웨어가 있는 경우 체크섬을 계산하는 등의 작업을 수행하는 것은 낭비입니다. 동일한 호스트에. Unix 도메인 소켓은 이러한 상황을 처리합니다. 원격 프로세스가 아닌 동일한 호스트의 프로세스를 연결하기 위해 네트워크를 우회합니다.

Tripleee가 언급했듯이 파이프는 BSD 역사상 소켓보다 먼저 소개되었으며 일단 존재한 후에는 소켓을 사용하여 다시 구현되었습니다. 같은 참조,FreeBSD 운영 체제의 설계 및 구현, 성능상의 이유로 파이프가 이후에 비소켓 구현으로 되돌아갔다고 언급했습니다.

답변2

소켓은 단지 통신을 위한 논리적 종점일 뿐입니다. 전송 계층에 존재합니다. 소켓에서 콘텐츠를 보내고 받을 수 있으며, 소켓을 바인딩하고 수신할 수 있습니다. 소켓은 프로토콜, 시스템 및 포트별로 다르며 패킷 헤더에 주소가 지정됩니다.

Beej의 가이드네트워크 프로그래밍그리고프로세스 간 통신둘 다 소켓 사용 방법에 대한 좋은 정보를 가지고 있습니다.이 정확한 질문에 대답하세요.

답변3

자, 이것은 무엇입니까?

소켓 또는 "소켓"은 다양한 의미를 가질 수 있습니다.

첫째, 정신모델이다.API(응용 프로그래밍 인터페이스). 이는 따라야 할 일련의 규칙과 정확하게 지정된 계약에 따라 작업을 수행하는 프로그램을 작성하는 데 사용할 수 있는 일련의 기능이 있음을 의미합니다. 이 특별한 경우에는무엇다른 프로그램과 데이터를 교환하는 것을 의미합니다.

소켓 API는 "통신"의 일반적인 세부 사항을 광범위하게 추상화합니다. 이는 당신이 누구와 대화하고 어떻게 대화하는지를 (거의) 일관되고 동일한 진부한 형식으로 요약합니다.
다양한 "도메인"(예: "유닉스 소켓" 또는 "인터넷 소켓") 및 다양한 유형의 통신(예: "데이터그램" 소켓 또는 "스트림" 소켓) 단어로 소켓을 생성하고 다양한 수신자와 통신할 수 있으며 모든 것이 정확히 작동합니다. 동일합니다(음, 99%, 분명히 고려해야 할 약간의 사소한 차이가 있습니다).

같은 컴퓨터나 다른 컴퓨터에 있는 다른 프로그램과 통신하고 있는지, 아니면 이들 컴퓨터 사이에 IPv4 또는 IPv6 네트워크가 있는지 알 필요가 없습니다(알고 싶지도 않습니다!). 과거 계약에 대해 들어본 적이 없는 다른 네트워크.

socket또한 생성된 라이브러리 함수(또는 시스템 호출)의 이름"소켓”는 특별한 종류의 파일입니다(유닉스의 모든 것은 파일입니다).

와 비교하면 어떤가요...?

소켓은 파이프 및 네임 파이프와 동일한 범주에 속합니다.

파이프라인은 수단이다일방 통행동일한 컴퓨터에 있는 리더와 라이터(두 프로그램 모두) 간의 통신입니다. 그것은 시뮬레이션개울(TCP와 마찬가지로) 데이터.
즉, 파이프라인 관점에서 보면 별도의 "메시지" 또는 데이터 "청크"가 없습니다. 당신은 원하는 양의 데이터를 "한쪽 끝"에 복사할 수 있고 다른 사람은 푸시한 것과 동일한 바이트 순서로 "다른 쪽 끝"(반드시 동일할 필요는 없고 동시에 모두 필요하지 않음)에 있는 모든 양의 데이터를 읽을 수 있습니다. .

명명 된파이프는 파이프다파일 시스템에 이름이 있습니다. 즉, 파일처럼 보이고 작동하며 디렉터리 목록에 나타나며 파일을 열고 쓸 수 있습니다. 소켓 특수 파일(소켓 이름이 지정됨)을 생성할 수도 있습니다.

반면에 소켓은 수단입니다.두 가지 방법("이중") 통신. 이는 동일한 소켓에서 쓰고 읽을 수 있으며 양방향 통신을 위해 두 개의 별도 소켓이 필요하지 않음을 의미합니다.
또한 소켓은 스트림(파이프와 동일)으로 작동할 수도 있고, 신뢰할 수 없는 개별 메시지를 보낼 수도 있고, 개별적이고 순서가 지정된 메시지를 보낼 수도 있습니다(처음 두 개는 모든 도메인에서 작동하고 마지막 메시지는 "unix 도메인"에서만 작동함). "))). 완전히 다른 컴퓨터에 있는 누군가에게 메시지를 보내거나 스트림을 시뮬레이션할 수 있습니다. 특정 조건에서 소켓은 일종의 일대다 통신(멀티캐스트)을 수행할 수도 있습니다.

이를 염두에 두고 소켓이 더 복잡한 작업을 수행한다는 것은 명백합니다.일반적으로 말하면파이프보다 오버헤드가 더 많지만(기본적으로 memcpy버퍼까지의 간단한 왕복), 로컬 소켓을 생성하면(즉, 동일한 시스템에) 운영 체제는 일반적으로 고도로 최적화된 빠른 경로를 적용하므로 실제로는 그렇지 않습니다. 별 차이 없어요.

때로는 네트워킹 측면에서 프로세스 간 통신이 언급되기도 합니다.

예, 소켓은 프로세스 간 통신의 가능한 방법입니다(공유 메모리 및 파이프가 대안의 예입니다). 동시에 위에서 언급한 것처럼 "네트워크"에서도 사용됩니다.

답변4

IP를 통한 UDP 또는 TCP의 경우,

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

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

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

따라서 unix.stackexchange.com:80(소켓의) 포트는 웹 사이트에 대한 액세스 지점입니다.80unix.stackexchange.com

그러나 다른 유형의 소켓도 있습니다. 아래 설명을 참조하세요.

관련 정보