네트워크 소켓

Network socket

네트워크 소켓은 컴퓨터 네트워크네트워크 노드 내에 있는 소프트웨어 구조로서 네트워크를 통해 데이터를 송수신하기 위한 엔드포인트 역할을 합니다.소켓의 구조와 속성은 네트워킹아키텍처의 Application Programming Interface(API; 응용 프로그램프로그래밍 인터페이스)에 의해 정의됩니다.소켓은 노드에서 실행 중인 응용 프로그램의 수명 동안만 생성됩니다.

인터넷 개발에서 TCP/IP 프로토콜의 표준화 때문에, 네트워크 소켓이라는 용어는 인터넷 프로토콜 스위트의 맥락에서 가장 일반적으로 사용되며, 따라서 종종 인터넷 소켓이라고도 한다. 문맥에서 소켓은 전송 프로토콜, IP 주소 및 포트 번호의 삼합체인 소켓 주소에 의해 다른 호스트에 대해 외부적으로 식별됩니다.

socket이라는 용어는 Node-Internal Inter-Process Communication(IPC; 노드 내부 프로세스 간 통신)의 소프트웨어 엔드포인트에도 사용됩니다.IPC는 네트워크소켓과 같은 API를 사용하는 경우가 많습니다.

사용하다

소프트웨어에서 소켓이라는 용어전기 케이블과 상호 연결된 노드 간 통신을 위한 하드웨어 장치인 전기 암 커넥터의 기능과 유사합니다.마찬가지로 포트라는 용어는 노드 또는 디바이스의 외부 물리 엔드포인트에 사용됩니다.

네트워크 프로토콜 스택의 Application Programming Interface(API; 응용 프로그램프로그래밍 인터페이스)는 일반적으로 소켓 기술자라고 불리는 응용 프로그램에 의해 생성된 각 소켓에 대한 핸들을 만듭니다.Unix 계열 운영체제에서는 이 디스크립터는 파일 디스크립터의 일종입니다.통신 채널에서 모든 읽기 및 쓰기 작업에 사용할 수 있도록 애플리케이션 프로세스에 의해 저장됩니다.

API를 사용하여 작성할 때, 네트워크 소켓은 전송에 사용하는 네트워크 프로토콜의 종류, 호스트의 네트워크 주소 및 포트 번호의 조합에 결합된다.포트는 노드의 다른 유형의 소프트웨어 구조를 나타내는 번호부 리소스입니다.이들은 서비스 유형으로 사용되며 프로세스에 의해 작성된 후에는 다른 호스트가 접속을 확립할 수 있도록 외부에서(네트워크에서) 주소 지정 가능한 위치 구성 요소로 기능합니다.

네트워크 소켓은 2개의 노드 간의 통신을 위한 영속적인 접속 전용이거나 connectionless 통신 및 멀티캐스트 통신에 참여할 수 있습니다.

실제로 인터넷에서 사용되는 TCP/IP 프로토콜의 확산으로 인해 네트워크 소켓이라는 용어는 일반적으로 인터넷 프로토콜(IP)과 함께 사용됩니다.따라서 인터넷 소켓이라고도 합니다.

소켓 어드레스

애플리케이션은 프로토콜 유형, IP 주소 및 포트 번호의 조합을 알고 TCP/IP와 데이터를 교환함으로써 원격 프로세스와 통신할 수 있습니다.이 조합은 소켓주소라고 불리는 경우가 많습니다.네트워크 소켓에 대한 네트워크 방향 액세스 핸들입니다.원격 프로세스는 프로토콜 스택의 자체 인스턴스에 네트워크 소켓을 설정하고 네트워킹 API를 사용하여 애플리케이션에 연결하여 애플리케이션에서 사용할 수 있는 자체 소켓 주소를 제공합니다.

실행

프로토콜 스택은 (예를 들어 별도의 라이브러리가 아닌) 운영 체제에 의해 일반적으로 제공되며, 스택이 구현하는 프로토콜을 사용하여 프로세스가 네트워크를 통해 통신할 수 있도록 하는 서비스 세트입니다.operating system은, IP 및 트랜스포트 프로토콜 헤더로부터 소켓주소 정보를 추출해, 애플리케이션 데이터로부터 헤더를 삭제함으로써, 착신 IP 패킷의 payload를 대응하는 애플리케이션에 전송 합니다.

프로그램이 네트워크 소켓을 사용하여 프로토콜 스택과 통신하기 위해 사용하는 API(애플리케이션 프로그래밍 인터페이스)이 API를 활용한 애플리케이션 프로그램 개발을 소켓 프로그래밍 또는 네트워크 프로그래밍이라고 한다.인터넷 소켓 API는 보통 버클리 소켓 표준을 기반으로 합니다.버클리 소켓 표준에서 소켓은 파일 기술자의 한 형태인데, 이는 "모든 것이 파일"이라는 유닉스 철학 및 소켓과 파일 간의 유사점 때문입니다.둘 다 읽기, 쓰기, 열기 및 닫기 기능이 있습니다.실제로는 차이가 유추에 영향을 미쳐 소켓에 다른 인터페이스(송수신)가 사용됩니다.프로세스 간 통신에서는 일반적으로 각 엔드에 자체 소켓이 있습니다.

표준 인터넷 프로토콜 TCP와 UDP에서 소켓 주소는 IP 주소포트 번호의 조합입니다. 전화 접속의 한쪽 끝이 전화 번호특정 내선 번호의 조합인 것처럼요.예를 들어 소켓에는 데이터 전송에만 소스 주소가 있을 필요는 없지만 프로그램이 소켓을 소스 주소에 바인딩하면 소켓을 사용하여 해당 주소로 전송되는 데이터를 수신할 수 있습니다.이 주소에 근거해, 인터넷 소켓은, 착신 데이터 패킷을 적절한 애플리케이션 프로세스에 전달합니다.

소켓은 인터넷 소켓 또는 TCP 소켓을 가리키는 경우가 많습니다.인터넷 소켓의 특징은 다음과 같습니다.

  • 로컬 소켓주소(로컬 IP 주소 및 (TCP 및 UDP의 경우, IP는 제외) 포트 번호로 구성됩니다.
  • 프로토콜:전송 프로토콜(TCP, UDP, 원시 IP 등).즉, TCP 포트 53과 UDP 포트 53을 가진 (로컬 또는 리모트)엔드포인트는 별개의 소켓이지만 IP에는 포트가 없습니다.
  • 예를 들어 TCP 접속 확립 중에 다른 소켓에 접속된 소켓에도 리모트소켓 주소가 있습니다.

정의.

소켓(내부 표현), 소켓 기술자(추상 식별자) 및 소켓주소(공개 주소)의 구별은 미묘하며, 일상 사용에서는 반드시 구별되는 것은 아닙니다.또한 소켓의 특정 정의는 작성자마다 다릅니다.IETF 댓글 요구, 인터넷 표준, 많은 교재 및 이 문서에서 소켓이라는 용어는 소켓 번호에 의해 일의로 식별되는 엔티티를 가리킵니다.다른 [1]교과서에서 소켓이라는 용어는 로컬 소켓 주소, 즉 "IP 주소와 포트 번호의 조합"을 나타냅니다.1971년의 [2]ARPA 네트워크와 관련된 RFC 147의 소켓의 최초 정의에서는, 「소켓은, 수신 소켓을 식별하는 짝수 소켓과 송신 소켓을 식별하는 홀수 소켓을 가지는 32비트 번호로 지정되어 있습니다」라고 하고 있습니다.그러나 현재 소켓 통신은 양방향입니다.

운영 체제 및 소켓을 만든 응용 프로그램에서 소켓은 소켓 기술자라고 하는 고유한 정수 값으로 참조됩니다.

도구들

Unix 와 같은 operating system 및 Microsoft Windows 에서는, 명령줄 툴 netstat 또는[3] ss사용해 확립된 소켓과 관련 정보를 일람표시합니다.

버클리 소켓인터페이스에 따라서 모델화된 이 예에서는, 「Hello, world!」라고 하는 문자열을 TCP 경유로 주소 1.2.3.4 의 호스트의 포토 80 에 송신합니다.소켓(getSocket)의 작성, 리모트호스트에의 접속, 문자열의 송신, 마지막으로 소켓의 닫힘에 대해 설명합니다.

소켓 mysocket = getSocket (type = "TCP") connect (mysocket, = "1.2.3.4", 포트 = "80") send (mysocket, "Hello, world!" ) close (mysocket)

종류들

인터넷 소켓에는 몇 가지 종류가 있습니다.

데이터그램 소켓
UDP([4]User Datagram Protocol)를 사용하는 커넥션리스 소켓.데이터그램 소켓으로 송수신된 각 패킷은 개별적으로 주소 지정 및 라우팅됩니다.데이터그램 소켓에서는 순서와 신뢰성이 보증되지 않기 때문에 어떤 머신 또는 프로세스에서 다른 머신으로 전송되는 여러 패킷이 임의의 순서로 도착하거나 전혀 도착하지 않을 수 있습니다.데이터그램 [5]소켓으로 브로드캐스트를 송신하려면 , 특별한 설정이 필요한 경우가 있습니다.브로드캐스트패킷을 수신하려면 데이터그램소켓이 특정 주소에 바인드되어서는 안 됩니다만, 실장에 따라서는 데이터그램소켓이 특정 [6]주소에 바인드 되어 있을 때에도 브로드캐스트패킷이 수신되는 경우가 있습니다.
스트림 소켓
Transmission Control Protocol(TCP), Stream Control Transmission Protocol(SCTP) 또는 Datagram Congestion Control Protocol(DCCP)을 사용하는 커넥션 지향 소켓.스트림 소켓은 레코드 경계 없이 오류 없는 데이터의 시퀀싱된 고유 흐름을 제공하며 연결 및 오류 보고 메커니즘을 명확하게 정의합니다.스트림 소켓은 아웃오브밴드(out-of-band) 기능을 통해 데이터를 신뢰성 있게 순차적으로 전송합니다.인터넷에서 스트림 소켓은 일반적으로 TCP/IP 프로토콜을 사용하여 응용 프로그램을 실행할 수 있도록 TCP를 사용하여 구현됩니다.
원시 소켓
프로토콜별 전송 계층 형식을 지정하지 않고 IP 패킷을 직접 보내고 받을 수 있습니다.다른 타입의 소켓에서는 payload는 선택된 트랜스포트층 프로토콜(예를 들어 TCP, UDP)에 따라 자동으로 캡슐화되며, 소켓 사용자는 payload와 함께 브로드캐스트되는 프로토콜 헤더의 존재를 알지 못합니다.raw 소켓에서 읽을 때는 보통 헤더가 포함됩니다.원시 소켓에서 패킷을 전송할 때 헤더의 자동 추가는 옵션입니다.
를 들어 Berkeley 소켓을 기반으로 하는 대부분의 소켓 Application Programming Interface(API; 애플리케이션프로그래밍 인터페이스)는 원시 소켓을 지원합니다.Windows XP는 2001년에 Winsock 인터페이스에서 구현된 원시 소켓 지원으로 출시되었지만, 3년 후 보안상의 문제로 [7]인해 Microsoft는 Winsock의 원시 소켓 지원을 제한했습니다.
원시 소켓은 Nmap과 같은 보안 관련 애플리케이션에서 사용됩니다.원시 소켓의 한 가지 사용 사례는 사용자 [8]공간에서 새로운 전송 계층 프로토콜을 구현하는 것입니다.원시 소켓은 일반적으로 네트워크 장치에서 사용할 수 있으며 Internet Group Management Protocol(IGMP) 및 Open Shortest Path First(OSPF) 등의 라우팅 프로토콜ping [9]유틸리티에 의해 사용되는 Internet Control Message Protocol(ICMP)에서 사용됩니다.

다른 소켓 유형은 내부 프로세스 간 통신을 위한 시스템 네트워크 아키텍처[10] Unix 도메인 소켓과 같은 다른 전송 프로토콜을 통해 구현됩니다.

클라이언트 서버 모델의 소켓스테이트

응용 프로그램 서비스를 제공하는 컴퓨터 프로세스를 서버라고 하며 시작 시 수신 상태에 있는 소켓을 만듭니다.이러한 소켓은 클라이언트 프로그램의 이니셔티브를 기다리고 있습니다.

TCP 서버는, 새로운 자 프로세스 또는 각 클라이언트의 처리 스레드의 클라이언트 접속 마다 일의의 전용 소켓을 작성하는 것으로, 복수의 클라이언트에 동시에 서비스를 제공할 수 있습니다.리모트 소켓과 함께 소켓 간 Virtual Connection 또는 Virtual Circuit(VC; 가상회선)을 확립하여 듀플렉스 바이트스트림을 제공할 때 이들은 확립된 상태입니다.

서버는 동일한 로컬 포트 번호와 로컬 IP 주소를 사용하여 동시에 확립된 여러 TCP 소켓을 작성할 수 있습니다.각 소켓은 자체 서버 자녀 프로세스에 매핑되어 있으며 클라이언트프로세스에 서비스를 제공합니다.리모트 소켓주소(클라이언트 IP 주소 또는 포토 번호)가 다르기 때문에, 즉, 소켓쌍의 탭이 다르기 때문에, operating system에서는 다른 소켓으로서 취급됩니다.

UDP 소켓은 프로토콜이 연결이 없기 때문에 established 상태가 아닙니다.UDP 서버 프로세스는 모든 리모트클라이언트로부터의 착신 데이터그램을 같은 소켓을 통해 순차적으로 처리합니다.UDP 소켓은 리모트주소로 식별되지 않고 로컬주소로만 식별되지만 각 메시지에는 Networking Application Programming Interface(API; 네트워킹응용 프로그램프로그래밍 인터페이스)를 사용하여 각 데이터그램에서 취득할 수 있는 관련 리모트주소가 있습니다.

소켓 페어

로컬 소켓과 리모트소켓의 통신을 소켓쌍이라고 부릅니다.각 소켓 쌍은 송신원 및 수신처 IP 주소와 포트 번호(로컬 및 리모트소켓 주소)[11][12]로 구성된 고유한4 태플에 의해 기술됩니다.위에서 설명한 바와 같이 TCP의 경우 소켓쌍은 접속의 양 끝에 일의의 4 태플과 관련지어집니다.

역사

소켓이라는 용어는 1971년 ARPANET에서 사용된 RFC 147이 발표된 시점부터 시작됩니다.대부분의 현대적인 소켓 구현은 버클리 소켓(1983년)과 Winsock(1991년)과 같은 다른 스택을 기반으로 합니다.BSD(Berkeley Software Distribution)의 Berkeley 소켓 API는 4.2에서 시작되었습니다.API로서의 BSD Unix 운영체제시스템그러나 1989년에야 UC버클리에서는 AT&T의 저작권으로 보호된 Unix의 라이선스 제약에서 벗어나 운영체제와 네트워킹 라이브러리의 버전을 출시할 수 있었습니다.

1987년 AT&T는 UNIX System V Release 3(SVR3)[13]에 STREAMS 기반의 Transport Layer Interface(TLI; 트랜스포트 레이어 인터페이스)를 도입하여 Release 4(SVR4)[14]로 이행했습니다.

다른 초기 [15]구현[15]TOPS-20,[15] MVS, VM, IBM-DOS(PCIP)[15][16]으로 작성되었습니다.

네트워크 기기의 소켓

소켓은 주로 OSI 모델의 인터넷 프로토콜 스위트 또는 세션 계층의 전송 계층에서 사용되는 개념입니다.인터넷 레이어에서 동작하는 라우터링크레이어에서 동작하는 스위치 의 네트워크 기기에서는 트랜스포트 레이어의 실장은 필요 없습니다.단, 스테이트풀한 네트워크방화벽, 네트워크주소 변환기 및 프록시 서버에서는 액티브한 소켓쌍이 추적됩니다.라우터의 멀티레이어 스위치 및 Quality of Service(QoS; 서비스 품질) 지원에서는 패킷플로우는 소켓쌍에 관한 정보를 추출함으로써 식별할 수 있습니다.

원시 소켓은 일반적으로 네트워크 장비에서 사용할 수 있으며 IGRP OSPF 등의 라우팅 프로토콜 및 ICMP(Internet Control Message Protocol)에 사용됩니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Cisco Networking Academy Program, CCNA 1 and 2 Companion Guide 개정판 제3판, P.480, ISBN1-58713-150-1
  2. ^ RFC 147
  3. ^ Jack Wallen (2019-01-22). "An Introduction to the ss Command".
  4. ^ V. S. Bagad, I. A. Dhotre (2008), Computer Networks (5th revised edition, 2010 ed.), Technical Publications Pune, p. 52
  5. ^ SO_BROADCAST, Microsoft, retrieved 2019-12-12
  6. ^ Class DatagramSocket, Oracle, retrieved 2019-12-12
  7. ^ IanG의 Ian Griffiths 2004년 8월 12일 탭.XP SP2에서 원시 소켓이 사라짐
  8. ^ "raw(7): IPv4 raw sockets - Linux man page". die.net.
  9. ^ "Raw IP Networking FAQ". faqs.org.
  10. ^ "www-306.ibm.com - AnyNet Guide to Sockets over SNA". Archived from the original on 2008-05-03. Retrieved 2006-09-07.
  11. ^ books.google.com - UNIX 네트워크 프로그래밍:소켓 네트워킹 API
  12. ^ books.google.com - BSD 루트킷 설계:커널 해킹의 개요
  13. ^ (Goodheart 1994, 페이지 11) 오류:: CITREFGoodheart (
  14. ^ (Goodheart 1994, 17) 오류:: CITREFGoodheart (
  15. ^ a b c d historyofcomputercommunications.info - 북: 9.8 TCP/IP 및 XNS 1981 - 1983
  16. ^ 네트워크 참여로서의 데스크톱 컴퓨터.pdf 1985

추가 정보

  • Jones, Anthony; Ohlund, Jim (2002). Network Programming for Microsoft Windows. ISBN 0-7356-1579-9.

외부 링크