Computer >> 컴퓨터 >  >> 네트워킹 >> 네트워킹

컴퓨터 네트워킹을 위한 소켓 프로그래밍 개요

소켓은 컴퓨터 네트워크 프로그래밍의 가장 기본적인 기술 중 하나입니다. 소켓을 사용하면 네트워크 소프트웨어 응용 프로그램이 네트워크 하드웨어 및 운영 체제에 내장된 표준 메커니즘을 사용하여 통신할 수 있습니다.

인터넷 소프트웨어 개발의 또 다른 특징처럼 들리지만 소켓 기술은 웹 이전에 존재했습니다. 많은 인기 있는 네트워크 소프트웨어 응용 프로그램이 소켓에 의존합니다.

소켓 기술이 네트워크에 할 수 있는 일

소켓은 정확히 두 개의 소프트웨어 사이의 단일 연결(지점 간 연결)을 나타냅니다. 둘 이상의 소프트웨어는 다중 소켓을 사용하여 클라이언트/서버 또는 분산 시스템과 통신할 수 있습니다. 예를 들어, 많은 웹 브라우저는 서버에 만들어진 소켓 그룹을 사용하여 단일 웹 서버와 동시에 통신할 수 있습니다.

소켓 기반 소프트웨어는 일반적으로 네트워크의 두 대의 개별 컴퓨터에서 실행되지만 소켓을 사용하여 단일 컴퓨터에서 로컬로(프로세스 간) 통신할 수도 있습니다. 소켓은 양방향이므로 연결의 어느 쪽이든 데이터를 보내고 받을 수 있습니다.

통신을 시작하는 응용 프로그램을 클라이언트라고 하고 다른 응용 프로그램을 서버라고 하는 경우도 있지만 이 용어는 P2P 네트워킹에 혼동을 줄 수 있으므로 일반적으로 피해야 합니다.

소켓 API 및 라이브러리

표준 API(응용 프로그래밍 인터페이스)를 구현하는 여러 라이브러리가 인터넷에 있습니다. 최초의 주류 패키지인 Berkeley Socket Library는 UNIX 시스템에서 널리 사용됩니다.

또 다른 일반적인 API는 Microsoft 운영 체제용 Windows 소켓(WinSock) 라이브러리입니다. 다른 컴퓨터 기술에 비해 소켓 API는 성숙합니다. WinSock은 1993년부터 사용되었고 Berkeley 소켓은 1982년부터 사용되었습니다.

소켓 API는 비교적 작고 간단합니다. 많은 함수가 read(), write()close()와 같은 파일 입출력 루틴에서 사용되는 것과 유사합니다. . 사용할 실제 함수 호출은 선택한 프로그래밍 언어와 소켓 라이브러리에 따라 다릅니다.

소켓 인터페이스 유형

소켓 인터페이스는 세 가지 범주로 나눌 수 있습니다.

  • 스트림 소켓 :가장 일반적인 유형입니다. 두 통신 당사자는 먼저 소켓 연결을 설정한 후 해당 연결을 통해 전달된 모든 데이터가 전송된 순서와 동일한 순서로 도착하도록 보장됩니다(연결 지향 프로그래밍 모델 사용).
  • 데이터그램 소켓 :연결 없는 의미를 제공합니다. 데이터그램의 경우 연결은 스트림과 같이 명시적이기보다는 암시적입니다. 어느 쪽이든 필요에 따라 데이터그램을 보내고 상대방이 응답할 때까지 기다립니다. 메시지는 전송 중에 손실되거나 순서 없이 수신될 수 있습니다. 응용 프로그램은 소켓이 아니라 이러한 문제를 처리합니다. 데이터그램 소켓을 구현하면 스트림 소켓을 사용할 때와 비교하여 일부 응용 프로그램의 성능이 향상되고 유연성이 추가될 수 있습니다.
  • 원시 소켓 :TCP 및 UDP와 같은 표준 프로토콜에 대한 라이브러리의 기본 제공 지원을 무시합니다. 원시 소켓은 맞춤형 저수준 프로토콜 개발에 사용됩니다.

네트워크 프로토콜의 소켓 지원

최신 네트워크 소켓은 일반적으로 IP, TCP 및 UDP 인터넷 프로토콜과 함께 사용됩니다. 인터넷 프로토콜용 소켓을 구현하는 라이브러리는 스트림용 TCP, 데이터그램용 UDP, 원시 소켓용 IP를 사용합니다.

인터넷을 통해 통신하기 위해 IP 소켓 라이브러리는 IP 주소를 사용하여 특정 컴퓨터를 식별합니다. 인터넷의 많은 부분이 이름 지정 서비스와 함께 작동하므로 사용자와 소켓 프로그래머는 주소(예:208.185.127.40) 대신 이름(예:thiscomputer.wireless.lifewire.com)으로 컴퓨터를 작업할 수 있습니다.

스트림 및 데이터그램 소켓도 IP 포트 번호를 사용하여 여러 애플리케이션을 서로 구별합니다. 예를 들어, 인터넷의 웹 브라우저는 웹 서버와의 소켓 통신을 위한 기본값으로 포트 80을 사용한다는 것을 알고 있습니다.