윈석
Winsock컴퓨팅에서 Windows Sockets API(WSA)는 Windows 네트워크 애플리케이션소프트웨어가 네트워크 서비스(특히 TCP/IP)에 액세스하는 방법을 정의하는 애플리케이션 프로그래밍 인터페이스(API)입니다.Windows TCP/IP 클라이언트응용 프로그램(FTP 클라이언트나 웹 브라우저 등)과 기본 TCP/IP 프로토콜 스택 간의 표준 인터페이스를 정의합니다.명명법은 프로그램 간의 통신에 BSD에서 사용되는 Berkeley 소켓 API를 기반으로 합니다.
배경
초기 Microsoft 운영체제(MS-DOS 및 Microsoft Windows 모두)는 주로 NetB를 기반으로 한 제한된 네트워킹 기능을 제공했습니다.IOS. 특히 Microsoft는 당시 TCP/IP 프로토콜 스택을 지원하지 않았습니다.MIT, FTP Software, Sun Microsystems, Ungermann-Bass 및 Excelan의 PC/IP 그룹을 포함한 많은 대학 그룹 및 상업용 벤더가 MS-DOS용 TCP/IP 제품을 출시했으며, 많은 경우 하드웨어/소프트웨어 번들의 일부로 제공되었습니다.Windows 2.0이 발매되었을 때, 이러한 벤더는, Distinct 및 NetManage등의 다른 벤더와 제휴해, Windows 용 TCP/IP 를 제공하고 있습니다.
이들 벤더가 직면한 단점은 각각 독자적인 API(Application Programming Interface)를 사용한다는 것이었습니다.단일 표준 프로그래밍 모델이 없으면 독립 소프트웨어 개발자들이 벤더의 기본 TCP/IP 구현과 함께 작동하는 네트워킹 애플리케이션을 만들도록 설득하는 것은 어려웠다.게다가 최종 사용자는 단일 벤더에 얽매이는 것을 경계하고 있어 표준화가 필요하게 되었습니다.
Windows Sockets 프로젝트는 1991년 [1]10월 10일 San Jose의 Interop '91에서 열린 Birds Of A Feather 세션에서 비롯되었습니다.NetManage가 작성한 소켓 사양에 근거해, 이 미팅에서 공개 도메인에 상정하고 있습니다.당시 NetManage 소켓은 100% DLL 기반의 Windows 3.0용 멀티 스레드 제품뿐이었습니다.이 사양의 초판은 Martin Hall, Microdyne(나중에 Sun Microsystems)의 Mark Towfiq, Sun Microsystems의 Geoff Arnold, 마이크로소프트의 Henry Sanders와 J Allard가 많은 [citation needed]도움을 받아 작성했습니다.저작권, 지적재산권 및 잠재적인 반독점 문제에 대한 최선의 대처 방법에 대한 논의가 이루어졌으며, IETF를 통해 작업하거나 비영리 재단을 설립하는 것에 대한 검토가 이루어졌다.결국, 명세서는 단순히 (무소속) 개인으로서 5명의 저자에 의해 저작권이 주어지는 것으로 결정되었다.
API와 DLL 라이브러리 파일(winsock.dll) 사이에 많은 혼동이 있었기 때문에 모든 참여 개발자들은 오랫동안 [citation needed]단순한 Winsock으로 이름 단축에 반대했다.사용자는 일반적으로 DLL 파일이 시스템에 있는지 확인하는 것만이 완전한 TCP/IP 프로토콜을 [citation needed]지원할 수 있다고 생각합니다.
테크놀로지
Windows Sockets API 사양은 애플리케이션 개발자가 사용하는 API와 네트워크 소프트웨어 개발자가 시스템에 새로운 프로토콜 모듈을 추가할 수 있는 수단을 제공하는 SPI의 두 가지 인터페이스를 정의합니다.각 인터페이스는 계약을 나타냅니다.API는 네트워크 소프트웨어 벤더의 프로토콜에 부합하는 애플리케이션이 올바르게 기능함을 보증합니다.SPI 계약에 따라 Windows에 적합한 프로토콜 모듈을 추가할 수 있으므로 API 호환 응용 프로그램에서 사용할 수 있습니다.Windows Sockets가 처음 출시되었을 때는 이러한 계약이 중요했지만, 네트워크 환경에서는 멀티프로토콜 지원(위 참조)이 필요했기 때문에 현재는 학계의 관심사일 뿐입니다.Windows Sockets API 버전 2.0에는 IPX/SPX를 사용하는 기능이 포함되어 있습니다.다만, WSA 2.0이 출하되었을 때는, 이 프로토콜은 거의 구식이었습니다.Microsoft는 TCP/IP 프로토콜 스택을 모든 최신 버전의 Windows와 함께 제공했으며, 이렇다 할 독립적 대안이 없습니다.또한 TCP/IP 이외의 프로토콜 구현에 대한 큰 관심은 없었습니다.
Windows Sockets 코드와 설계는 BSD 소켓을 기반으로 하지만 API가 일반 Windows 프로그래밍 모델을 준수할 수 있도록 추가 기능을 제공합니다.Windows Sockets API는 BSD 소켓 API의 거의 모든 기능을 망라했지만, Windows와 Unix의 근본적인 차이에서 발생하는 피할 수 없는 장애물이 있었다(Windows Sockets는 STREAMs보다 BSD 소켓과 덜 달랐지만).API의 모든 함수 호출은 모니커로 시작됩니다. WSA, 예를 들어 연결된 소켓으로 데이터를 전송하기 위한 WSASend()입니다.
그러나 개발자들이 유닉스에서 윈도로 소켓 기반 애플리케이션을 포팅하는 것이 비교적 쉬워야 한다는 것이 윈도 소켓의 설계 목표였다.새로 작성된 Windows 프로그램에만 유용한 API를 만드는 것은 충분하지 않다고 생각되었습니다.이러한 이유로 Windows 소켓에는 포팅을 용이하게 하도록 설계된 많은 요소가 포함되어 있습니다.예를 들어 Unix 응용 프로그램은 동일한 errno 변수를 사용하여 표준 C 라이브러리 함수 내에서 검출된 네트워크 오류와 오류를 모두 기록할 수 있었습니다.Windows 에서는 이 기능을 사용할 수 없었기 때문에, Windows Sockets 에서는, 에러 정보를 취득하기 위한 전용 함수 WSAGetLastError() 가 도입되었습니다.이러한 메커니즘은 도움이 되었지만 애플리케이션 포팅은 여전히 매우 복잡했습니다.많은 원래의 TCP/IP 애플리케이션은 유사 단말기와 포크 시스템 호출과 같은 Unix에 특화된 시스템 기능을 사용하여 구현되어 왔고, 이러한 기능을 Windows에서 재현하는 것은 문제가 있었습니다.비교적 짧은 시간 내에 포팅은 전용 Windows 애플리케이션 개발로 대체되었습니다.
사양
- 버전 1.0(1992년 6월)에서는 Winsock의 기본 동작이 정의되어 있습니다.기존 애플리케이션의 이식 작업을 단순화하기 위해 버클리 소켓의 기존 인터페이스에 매우 가깝게 유지되었습니다.주로 메시지 기반 알림을 사용하는 비동기 작업을 위해 몇 가지 Windows 고유 확장이 추가되었습니다.
- 이 문서에서는 TCP/IP에 대한 지원을 제한하지 않았지만 명시적으로 언급된 프로토콜은 TCP와 UDP뿐이었습니다.대부분의 벤더는 TCP/IP 지원만 제공했지만 DEC의 Winsock에는 DECNet 지원도 포함되어 있었습니다.
- 버전 1.1(1993년 1월)은 많은 사소한 수정과 규격을 명확히 하였다.가장 큰 변화는 gethostname() 함수가 포함된 것입니다.
- Winsock 2는 Winsock 1.1의 하위 호환 확장 버전입니다.프로토콜 독립적인 이름 해결, 이벤트 기반 알림 및 완료 루틴을 사용한 비동기 작업, 계층 프로토콜 구현, 멀티캐스팅 및 서비스 품질에 대한 지원이 추가되었습니다.또한 IPX/SPX 및 DECnet을 포함한 여러 프로토콜에 대한 지원을 공식화했습니다.새로운 사양에서는 프로세스 간에 소켓을 선택적으로 공유할 수 있으며, 착신 접속 요구를 조건부로 받아들일 수 있으며, 개별 소켓이 아닌 소켓 그룹에서 특정 작업을 수행할 수 있습니다.새로운 사양은 Winsock 1과는 크게 다르지만 Winsock 1.1 API와의 소스 레벨 및 바이너리 레벨 호환성을 제공합니다.그다지 알려지지 않은 추가 기능 중 하나는 Service Provider Interface(SPI; 서비스 프로바이더 인터페이스) API와 계층형 서비스 프로바이더입니다.
- 버전 2.0.x(1994년 5월 이후)는 내부 드래프트 상태이며, 공공 표준으로 발표되지 않았다.
- 버전 2.1.0(1996년 1월)은 Winsock 2 사양의 첫 번째 공개 릴리스입니다.
- 버전 2.2.0(1996년 5월)에는 많은 사소한 수정, 설명 및 사용 권장 사항이 포함되어 있습니다.또한 16비트 Windows 응용 프로그램의 지원을 없앤 최초의 버전이기도 합니다.
- 버전 2.2.1(1997년 5월) 및 버전 2.2.2(1997년 8월)에서는 약간의 기능 확장 기능이 도입되었습니다.네트워크 및 시스템 설정 변경에 대한 쿼리 및 알림 수신 메커니즘이 추가되었습니다.
- IPv6 Technical Preview for Windows 2000(2000년 12월)에서는 이름 해결을 위한 프로토콜에 의존하지 않는 API인 RFC 2553(1999년 3월 이후 RFC 3493에 의해 폐지됨)이 최초로 구현되었습니다.이 API는 Windows XP에서 Winsock의 일부가 됩니다.
Windows 8 업데이트
Windows 8 에는,[2] Winsock용의 「RIO(Registered IO)」확장이 포함되어 있습니다.이러한 확장 기능은 네트워크 데이터 경로 및 알림 경로에 대해 사용자가 커널 모드로 이행할 때 발생하는 오버헤드를 줄이도록 설계되어 있지만 일반 Windows TCP 및 UDP 스택의 나머지 부분(기존 네트워크 카드 사용)을 사용합니다.설정 경로(예를 들어 "연결" 기능)는 일반 Winsock 경로와 변경되지 않습니다.
실장
Microsoft의 실장
- Microsoft는 Winsock 1.0을 구현하지 않았습니다.
- Winsock 버전 1.1은 Windows for Workgroups(코드명 Snowball)용 애드온 패키지(Wolverine)로 제공되었습니다.이것은 버전 3.5 이후 Windows 95와 Windows NT의 필수 컴포넌트였다(시판되는 Windows NT의 초기 버전 3.1은 AT&T UNIX System V "STREAMs" API에[citation needed] 기반한 독점적이고 매우 불완전한 TCP/IP 구현만 포함).
- Winsock 버전 2.1은 Windows 95용 애드온 패키지로 제공되었습니다.Windows 98, Windows NT 4.0 및 이후의 모든 Windows 릴리스에 필수적인 컴포넌트입니다.(Microsoft는 Windows 3.x 또는 Windows NT 3.x 용 Winsock 2 의 실장은 제공하지 않습니다).
- Winsock 2.x의 최신 버전은 새로운 Windows 릴리스 또는 서비스 팩의 일부로 제공되었습니다.
- Winsock 2는 LSP(계층화 서비스 공급자)로 알려진 메커니즘을 통해 확장할 수 있습니다.Winsock LSP는 인터넷 보호자 제어, 웹 콘텐츠 필터링, QoS 등 다양한 용도로 사용할 수 있습니다.모든 프로바이더의 계층화 순서는 Winsock 카탈로그에 저장됩니다.이전 버전의 윈도우즈에서는 버그가 있는 LSP를 제거하면 레지스트리의 Winsock 카탈로그가 손상되어 모든 네트워크 연결이 손실될 수 있습니다.Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 및 그 이후의 모든 Windows 운영 체제의 Winsock은 사용자가 이러한 LSP를 제거한 후 자가 복구 기능을 제공합니다.
기타 구현
- Winsock에 준거한TCP/IP 및 UDP/IP 스택을 제공하는 다른 벤더로는 (알파벳순으로) 3Com, Beame & Whiteside, DEC, Distinct, FTP 소프트웨어, 프론티어, IBM, Microdyne, NetManage, Novell, Sun Microsystems 및 Twet Software International 등이 있습니다.
- Peter Tattam의 Trumpet Winsock은 Winsock을 [3][4]지원하지 않는 Windows 3.0에 설치할 수 있는 몇 안 되는 Winsock 1.0 구현 중 하나입니다.트럼펫은 또한 Windows 3.x용 Winsock의 가장 인기 있는 쉐어웨어 구현입니다.Trumpet Winsock 5.0은 Windows 95/98 및 Windows NT에서 사용할 수 있으며 이러한 운영 [5]체제용 Winsock 1.1 호환 IPv6 스택을 포함합니다.
- 와인 프로젝트에는 BSD 소켓 API 위에 Winsock의 소스 및 바이너리 호환 재실장이 포함되어 있습니다.
「 」를 참조해 주세요.
- 버클리 소켓
- 레이어드 서비스 공급자(Winsock LSP) LSP)
레퍼런스
- ^ "Winsock Version 1.0 Rev.A". Retrieved 8 October 2020.
- ^ "New techniques to develop low-latency network apps". Channel 9.
- ^ "Mosaic turns 20: Let's fire up the old girl, show her the web today". theregister.co.uk.
- ^ "What It Was Like To Build A World Wide Web Site In 1995". fastcompany.com. 18 November 2015.
- ^ "Downloads". www.trumpet.com.au.
외부 링크
- MSDN - Winsock2 레퍼런스
- MSDN - Winsock2 홈
- 소켓 FAQ - Windows 소켓 FAQ
- TCP/IP 소켓을 사용한 클라이언트/서버 프로그래밍 - Winsock C++ 프로그래밍
- Berkley 소켓 프로그램을 Winsock으로 이식
- Windows 네트워크 개발 블로그 - Winsock, WSK, WinINet, Http.sys, WinHttp, QoS 및 시스템을 다루는 Microsoft 개발자 블로그.Windows Vista에서 도입되는 기능에 초점을 맞춘 넷
- 웹상의 Microsoft 이력 개요
- WinSock 개발 정보
- Winsock 프로그래머의 FAQ