네트워크 소켓
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
네트워크 소켓은 네트워크 통신을 위한 프로그래밍 인터페이스로, 1971년 ARPANET에서 처음 사용되었다. 버클리 소켓과 윈속을 포함한 다양한 구현이 존재하며, 응용 프로그램이 프로토콜 스택과 통신하는 데 사용되는 소켓 API를 제공한다. 소켓은 TCP/IP에서 IP 주소와 포트 번호의 조합인 소켓 주소를 사용하여 원격 프로세스와 통신하며, 데이터그램, 스트림, 원시 소켓 등 여러 유형이 있다. 소켓은 클라이언트-서버 모델에서 서버가 수신 대기 상태의 소켓을 생성하고, TCP 소켓은 연결 설정 상태를 갖는 반면 UDP 소켓은 비연결형이다. 소켓 쌍은 로컬 및 원격 소켓 간의 통신을 나타내며, 네트워크 장비에서도 사용되며, netstat 또는 ss와 같은 도구를 통해 소켓 정보를 확인할 수 있다.
더 읽어볼만한 페이지
네트워크 소켓 |
---|
2. 역사
"소켓"이라는 용어는 1971년 RFC 147의 출판과 함께 ARPANET에서 사용되기 시작했다.[14] 버클리 소켓(1983)과 윈속(1991)은 현대 소켓 구현의 기반이 되는 대표적인 예이다. 버클리 소프트웨어 배포판(BSD)의 버클리 소켓 API는 4.2BSD 유닉스 운영 체제를 API로 사용했다. 그러나 UC 버클리는 1989년이 되어서야 AT&T의 저작권 제약에서 벗어난 운영 체제 및 네트워킹 라이브러리 버전을 출시할 수 있었다.
1987년경, AT&T는 UNIX System V 릴리스 3(SVR3)에서 STREAMS 기반의 전송 계층 인터페이스(TLI)를 도입했으며,[13] 이는 릴리스 4(SVR4)까지 이어졌다.[14]
TOPS-20,[15] MVS,[15] VM,[15] IBM-DOS(PCIP)를 위한 초기 구현도 있었다.[15][16]
2. 1. 초기 역사
"소켓"이라는 용어는 1971년 RFC 147의 출판과 함께 ARPANET에서 사용되기 시작했다.[14] 현대 소켓 구현의 대부분은 버클리 소켓(1983)이나 윈속(1991)과 같은 다른 스택을 기반으로 한다. 버클리 소프트웨어 배포판(BSD)의 버클리 소켓 API는 4.2BSD 유닉스 운영 체제를 API로 사용했다. 그러나 1989년이 되어서야 UC 버클리는 AT&T의 저작권 제약에서 벗어난 운영 체제 및 네트워킹 라이브러리 버전을 출시할 수 있었다.1987년경, AT&T는 UNIX System V 릴리스 3(SVR3)에서 STREAMS 기반의 전송 계층 인터페이스(TLI)를 도입했으며,[13] 이는 릴리스 4(SVR4)까지 이어졌다.[14]
TOPS-20,[15] MVS,[15] VM,[15] IBM-DOS(PCIP)를 위한 초기 구현도 있었다.[15][16]
2. 2. 버클리 소켓
"소켓"이라는 용어는 1971년 RFC 147의 출판과 함께 ARPANET에서 사용되면서 시작되었다.[15] 버클리 소켓(1983)과 윈속(1991)은 현대적인 소켓 구현의 기반이 되는 대표적인 예이다. 버클리 소프트웨어 배포판(BSD)의 버클리 소켓 API는 4.2BSD 유닉스 운영 체제를 API로 사용하였다. 그러나 UC 버클리는 1989년이 되어서야 AT&T의 저작권 제약에서 벗어난 운영 체제 및 네트워킹 라이브러리 버전을 출시할 수 있었다.1987년경, AT&T는 UNIX System V 릴리스 3(SVR3)에서 STREAMS 기반의 전송 계층 인터페이스(TLI)를 도입했으며,[13] 이는 릴리스 4(SVR4)까지 이어졌다.[14]
TOPS-20,[15] MVS,[15] VM,[15] IBM-DOS (PCIP)[15][16] 등에서도 초기 소켓 구현이 이루어졌다.
2. 3. 윈속 (Winsock)
윈속(1991)은 버클리 소켓(1983)과 함께 현대적 소켓 구현의 기반이 되는 스택 중 하나이다. 버클리 소프트웨어 배포판(BSD)의 버클리 소켓 API는 4.2BSD 유닉스 운영 체제를 API로 시작했다. 그러나 1989년이 되어서야 UC 버클리가 AT&T의 저작권으로 보호되는 유닉스의 라이선스 제약에서 벗어난 운영 체제 및 네트워킹 라이브러리 버전을 출시할 수 있었다.2. 4. 기타 초기 구현
"소켓"이라는 용어는 1971년 ARPANET에서 사용된 RFC 147의 출판에서 유래되었다.[15] 버클리 소켓(1983)과 윈속(1991) 등은 소켓의 현대적 구현의 기반이 되는 스택들이다. 버클리 소프트웨어 배포판(BSD)의 버클리 소켓 API는 4.2BSD 유닉스 운영 체제를 API로 시작하였다. 그러나 1989년이 되어서야 UC 버클리는 AT&T의 저작권으로 보호되는 유닉스의 라이선스 제약에서 벗어난 운영 체제 및 네트워킹 라이브러리 버전을 출시할 수 있었다.1987년경, AT&T는 UNIX System V 릴리스 3(SVR3)에서 STREAMS 기반의 전송 계층 인터페이스(TLI)를 도입했으며,[13] 이는 릴리스 4(SVR4)까지 계속되었다.[14]
다른 초기 구현으로는 TOPS-20,[15] MVS,[15] VM,[15] IBM-DOS(PCIP) 등이 있다.[15][16]
3. 정의
IETF RFC, 인터넷 표준 문서, 많은 교과서에서 "소켓"이라는 용어는 소켓 번호로 고유하게 식별되는 엔티티를 지칭한다.[1] 다른 교과서에서는 "소켓"이라는 용어가 로컬 소켓 주소, 즉 "IP 주소와 포트 번호의 조합"을 지칭한다. 1971년 ARPA 네트워크와 관련하여 RFC 147[2]에서 주어진 ''소켓''의 원래 정의는 ''"수신 소켓을 식별하는 짝수 소켓과 송신 소켓을 식별하는 홀수 소켓을 가진 32비트 숫자"''이다. 그러나 오늘날 소켓 통신은 양방향이다.
운영 체제와 소켓을 생성한 응용 프로그램 내에서 소켓은 ''소켓 디스크립터''라는 고유한 정수 값으로 참조된다.
3. 1. 소켓 주소
응용 프로그램은 프로토콜 유형, IP 주소, 포트 번호의 조합을 통해 TCP/IP와 데이터를 교환하여 원격 프로세스와 통신할 수 있다. 이 조합을 ''소켓 주소''라고 하며, 네트워크 소켓에 대한 네트워크 측 접근 핸들이다. 원격 프로세스는 자체 프로토콜 스택 인스턴스에 네트워크 소켓을 설정하고 네트워킹 API를 사용하여 응용 프로그램에 연결, 응용 프로그램에서 사용할 자체 소켓 주소를 제공한다.4. 구현
프로토콜 스택은 보통 운영 체제에서 제공되며, 프로세스가 네트워크를 통해 통신할 수 있도록 하는 일련의 서비스이다. 운영 체제는 IP 및 전송 프로토콜 헤더에서 소켓 주소 정보를 추출하고, 애플리케이션 데이터에서 헤더를 제거하여 들어오는 IP 패킷의 페이로드를 해당 애플리케이션으로 전달한다.
프로그램이 네트워크 소켓을 사용하여 프로토콜 스택과 통신하는 데 사용하는 응용 프로그래밍 인터페이스(API)를 '''소켓 API'''라고 한다. 이 API를 활용하는 응용 프로그램 개발을 ''소켓 프로그래밍'' 또는 ''네트워크 프로그래밍''이라고 한다. 인터넷 소켓 API는 일반적으로 버클리 소켓 표준을 기반으로 한다. 버클리 소켓 표준에서 소켓은 "모든 것이 파일이다"라는 유닉스 철학과 소켓과 파일 간의 유사성 때문에 파일 디스크립터의 한 형태이다. 둘 다 읽기, 쓰기, 열기 및 닫기 기능이 있다. 프로세스 간 통신에서 각 끝은 일반적으로 자체 소켓을 가진다.
표준 인터넷 프로토콜 TCP 및 UDP에서 소켓 주소는 IP 주소와 포트 번호의 조합이며, 전화 연결의 한쪽 끝이 전화 번호와 특정 내선 번호의 조합인 것과 유사하다. 소켓은 데이터를 전송하기만 하는 경우와 같이 소스 주소를 가질 필요가 없지만, 프로그램이 소켓을 소스 주소에 ''바인딩''하면 해당 주소로 전송된 데이터를 수신하는 데 소켓을 사용할 수 있다. 이 주소를 기반으로 인터넷 소켓은 들어오는 데이터 패킷을 해당 애플리케이션 프로세스로 전달한다.
''소켓''은 종종 인터넷 소켓 또는 TCP 소켓을 구체적으로 지칭한다. 인터넷 소켓은 최소한 다음으로 특징지어진다.
- 로컬 IP 주소와 (TCP 및 UDP의 경우, IP는 아님) 포트 번호로 구성된 로컬 소켓 주소
- 프로토콜: TCP, UDP, 원시 IP와 같은 전송 프로토콜. 이는 TCP 포트 53 및 UDP 포트 53을 갖는 (로컬 또는 원격) 엔드포인트가 별개의 소켓인 반면 IP에는 포트가 없음을 의미한다.
- TCP 연결 설정 중과 같이 다른 소켓에 연결된 소켓에도 원격 소켓 주소가 있다.
5. 종류
네트워크 소켓에는 여러 유형이 있으며, 인터넷 프로토콜(IP)과 함께 사용되어 '''인터넷 소켓'''이라고도 불린다. 주요 소켓 유형은 다음과 같다:
- 스트림 소켓 (Stream Sockets): 전송 제어 프로토콜(TCP) 등을 사용하는 연결 지향형 소켓이다.
- 데이터그램 소켓 (Datagram Sockets): 사용자 데이터그램 프로토콜(UDP)을 사용하는 비연결형 소켓이다.[4]
- 원시 소켓 (Raw Sockets): 프로토콜별 전송 계층 형식 없이 IP 패킷을 직접 송수신할 수 있는 소켓이다.
- 기타 소켓 유형: 시스템 네트워크 아키텍처[10], 유닉스 도메인 소켓 등 다른 전송 프로토콜을 통해 구현되는 소켓이다.
5. 1. 스트림 소켓 (Stream Sockets)
연결 지향형 소켓으로, 전송 제어 프로토콜(TCP), 스트림 제어 전송 프로토콜(SCTP) 또는 데이터그램 혼잡 제어 프로토콜(DCCP)을 사용한다. 스트림 소켓은 레코드 경계 없이 오류가 없는 데이터의 순차적이고 고유한 흐름을 제공하며, 연결을 생성 및 제거하고 오류를 보고하는 잘 정의된 메커니즘을 갖추고 있다. 스트림 소켓은 신뢰성 있게, 순서대로, 그리고 대역 외 기능을 갖춘 데이터를 전송한다. 인터넷에서 스트림 소켓은 일반적으로 TCP를 사용하여 구현되므로, 애플리케이션이 TCP/IP 프로토콜을 사용하는 모든 네트워크에서 실행될 수 있다.5. 2. 데이터그램 소켓 (Datagram Sockets)
UDP를 사용하는 비연결형 소켓이다.[4] 데이터그램 소켓을 통해 송수신되는 각 패킷은 개별적으로 주소가 지정되고 라우팅된다. 데이터그램 소켓은 순서와 신뢰성을 보장하지 않으므로, 한 기기 또는 프로세스에서 다른 기기로 전송된 여러 패킷이 임의의 순서로 도착하거나 전혀 도착하지 않을 수 있다. 브로드캐스트를 데이터그램 소켓으로 전송하려면 특별한 구성이 필요할 수 있다.[5] 브로드캐스트 패킷을 수신하기 위해 데이터그램 소켓은 특정 주소에 바인딩되지 않아야 하지만, 일부 구현에서는 데이터그램 소켓이 특정 주소에 바인딩된 경우에도 브로드캐스트 패킷을 수신할 수 있다.[6]5. 3. 원시 소켓 (Raw Sockets)
원시 소켓은 프로토콜별 전송 계층 형식 없이 IP 패킷을 직접 송수신할 수 있다. 다른 유형의 소켓과 달리, 원시 소켓은 캡슐화되지 않은 페이로드와 프로토콜 헤더를 직접 다룬다. 소켓 사용자는 헤더를 포함하거나, 직접 구성할 수 있다.[7]대부분의 소켓 API(예: 버클리 소켓 기반 API)는 원시 소켓을 지원한다. 윈도우 XP는 2001년에 Winsock 인터페이스에 원시 소켓 지원을 구현했지만, 2004년에 보안 문제로 이 지원을 제한했다.[7]
원시 소켓은 Nmap과 같은 보안 관련 애플리케이션, 사용자 공간에서 새로운 전송 계층 프로토콜 구현,[8] 라우팅 프로토콜(인터넷 그룹 관리 프로토콜 (IGMP), 최단 경로 우선 (OSPF) 등), ping 유틸리티에서 사용되는 인터넷 제어 메시지 프로토콜 (ICMP) 등에 사용된다.[9]
5. 4. 기타 소켓 유형
시스템 네트워크 아키텍처[10] 및 내부 프로세스 간 통신을 위한 유닉스 도메인 소켓과 같이 다른 소켓 유형은 다른 전송 프로토콜을 통해 구현된다.6. 클라이언트-서버 모델에서의 소켓 상태
서버는 응용 서비스를 제공하는 컴퓨터 프로세스로, 시작 시 '수신 대기 상태'의 소켓을 생성하여 클라이언트 프로그램을 기다린다.
TCP 서버는 여러 클라이언트를 동시에 서비스하기 위해 각 클라이언트에 대해 고유한 전용 소켓을 생성하며, 이는 소켓 간의 가상 연결을 통해 '설정 상태'가 된다. 서버는 동일한 로컬 포트 번호와 IP 주소를 가진 여러 개의 TCP 소켓을 동시에 생성할 수 있는데, 운영 체제는 원격 소켓 주소가 다르므로 이들을 서로 다른 소켓으로 처리한다.
UDP 소켓은 비연결형 프로토콜이므로 '설정 상태'가 없다. UDP 서버 프로세스는 동일한 소켓을 통해 모든 원격 클라이언트로부터의 수신 데이터그램을 순차적으로 처리하며, 각 메시지에는 네트워크 API를 통해 검색할 수 있는 연결된 원격 주소가 있다.
6. 1. TCP 소켓
응용 서비스를 제공하는 컴퓨터 프로세스를 서버라고 하며, 시작 시 '수신 대기 상태'의 소켓을 생성한다. 이 소켓은 클라이언트 프로그램의 시작을 기다리고 있다.TCP 서버는 각 클라이언트에 대해 새로운 자식 프로세스 또는 처리 스레드에서 고유한 전용 소켓을 생성하여 여러 클라이언트를 동시에 서비스할 수 있다. 이는 소켓 간의 가상 연결 또는 가상 회선(VC), 즉 TCP 세션이 원격 소켓과 설정되어 양방향 바이트 스트림을 제공할 때 '설정 상태'가 된다.
서버는 동일한 로컬 포트 번호 및 로컬 IP 주소를 가진 여러 개의 TCP 소켓을 동시에 생성할 수 있으며, 각 소켓은 자체 서버 자식 프로세스에 매핑되어 자체 클라이언트 프로세스를 서비스한다. 원격 소켓 주소(클라이언트 IP 주소 또는 포트 번호)가 다르므로 운영 체제는 이를 서로 다른 소켓으로 처리한다. 즉, 서로 다른 소켓 쌍 튜플을 갖기 때문이다.
6. 2. UDP 소켓
UDP 소켓은 프로토콜이 비연결형이기 때문에 ''설정 상태''가 없다. UDP 서버 프로세스는 동일한 소켓을 통해 모든 원격 클라이언트로부터의 수신 데이터그램을 순차적으로 처리한다. UDP 소켓은 원격 주소로 식별되지 않고 로컬 주소로만 식별되지만, 각 메시지에는 네트워크 애플리케이션 프로그래밍 인터페이스(API)를 통해 각 데이터그램에서 검색할 수 있는 연결된 원격 주소가 있다.[1]7. 소켓 쌍 (Socket Pairs)
로컬 및 원격 소켓 간의 통신을 '''소켓 쌍'''이라고 한다. 각 소켓 쌍은 발신 및 수신 IP 주소와 포트 번호, 즉 로컬 및 원격 소켓 주소로 구성된 고유한 4-튜플로 설명된다.[11][12] TCP의 경우 소켓 쌍은 연결의 각 끝에서 고유한 4-튜플과 연결된다.
8. 네트워크 장비에서의 소켓
소켓은 주로 인터넷 프로토콜 스위트의 전송 계층 또는 OSI 모형의 세션 계층에서 사용되는 개념이다. 라우터와 같은 네트워크 장비는 인터넷 계층에서 작동하며, 네트워크 스위치는 링크 계층에서 작동하므로 전송 계층의 구현이 필요하지 않다. 그러나 상태 저장 네트워크 방화벽, 네트워크 주소 변환기 및 프록시 서버는 활성 소켓 쌍을 추적한다. 다계층 스위치 및 라우터의 서비스 품질 (QoS) 지원에서 패킷 흐름은 소켓 쌍에 대한 정보를 추출하여 식별할 수 있다.
Raw 소켓은 일반적으로 네트워크 장비에서 사용할 수 있으며, IGRP 및 OSPF와 같은 라우팅 프로토콜과 인터넷 제어 메시지 프로토콜 (ICMP)에 사용된다.
9. 도구
유닉스 계열 운영 체제 및 마이크로소프트 윈도우에서, 명령줄 도구인 netstat 또는 ss는[3] 설정된 소켓과 관련 정보를 나열하는 데 사용된다.
참조
[1]
서적
CCNA 1 and 2 Companion Guide Revised Third Edition
[2]
간행물
147
IETF RFC
[3]
웹사이트
An Introduction to the ss Command
https://www.linux.co[...]
2019-01-22
[4]
서적
Computer Networks
Technical Publications Pune
[5]
웹사이트
SO_BROADCAST
https://docs.microso[...]
Microsoft
2019-12-12
[6]
웹사이트
Class DatagramSocket
https://docs.oracle.[...]
Oracle
2019-12-12
[7]
블로그
Raw Sockets Gone in XP SP2
http://www.interact-[...]
IanG on Tap
2004-08-12
[8]
웹사이트
raw(7): IPv4 raw sockets - Linux man page
http://linux.die.net[...]
[9]
웹사이트
Raw IP Networking FAQ
http://www.faqs.org/[...]
[10]
웹사이트
www-306.ibm.com - AnyNet Guide to Sockets over SNA
https://web.archive.[...]
2006-09-07
[11]
서적
UNIX Network Programming: The sockets networking API
https://books.google[...]
[12]
서적
Designing BSD Rootkits: An Introduction to Kernel Hacking
https://books.google[...]
[13]
서적
[14]
서적
[15]
웹사이트
historyofcomputercommunications.info - Book: 9.8 TCP/IP and XNS 1981 - 1983
https://web.archive.[...]
2011-02-18
[16]
문서
The Desktop Computer as a Network Participant.pdf
http://groups.csail.[...]
1985
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com