배경 및 기술을 포함한 Winsock 소개
Introduction Winsock Including Background Technology
이 게시물은 주로 WSA 및 Winsock으로 축약될 수 있는 Windows 소켓 API에 대해 설명합니다. 이 게시물을 읽으면 정의, 배경, 기술 및 구현을 알 수 있습니다.
이 페이지에서:Winsock에 대한 정의
윈속이란 무엇입니까? 컴퓨팅에서 Winsock은 Windows 네트워크 소프트웨어가 네트워크 서비스, 특히 TCP/IP에 액세스하는 방법을 정의하는 데 사용되는 기술 사양입니다. Berkeley UNIX 소켓 인터페이스를 Windows에 적용한 것이므로 Winsock이라고 합니다. 소켓은 동일한 컴퓨터나 네트워크에 있는 두 프로그램 프로세스 간에 연결하고 데이터를 교환하는 데 사용되는 특별한 계약입니다.
팁: 다른 인터넷 프로토콜에 대한 자세한 정보를 알고 싶다면 MiniTool 웹사이트를 방문하는 것이 좋습니다.
Winsock은 WSA(Windows Sockets API)의 약어입니다. 이는 Windows TCP/IP 클라이언트 응용 프로그램(예: FTP 클라이언트 또는 웹 브라우저)과 기본 TCP/IP 프로토콜 스택 간의 표준 인터페이스를 정의합니다.
관련 게시물: Netsh Winsock 재설정 명령을 사용하여 Windows 10 네트워크 문제 해결
Winsock의 배경
Windows 소켓 API는 1991년 10월 CompuServe BBS 네트워크의 BoF(Bird of a Feather) 토론에서 JSB Software(이후 Stardust Technologies)의 Martin Hall에 의해 제안되었습니다.
사양의 첫 번째 버전은 Martin Hall, Microdyne(이후 Sun Microsystems)의 Mark Towfiq, Sun Microsystems의 Geoff Arnold, Microsoft의 Henry Sanders 및 J Allard가 다른 많은 사람들의 도움을 받아 작성했습니다.
저작권, 지적재산권, 잠재적인 독점금지 문제를 가장 잘 해결할 수 있는 방법에 대한 논의가 있었고, IETF나 비영리 재단 설립을 통한 업무 고려도 있었습니다. 결국, 해당 사양의 저작권은 5명의(관련되지 않은) 저작자에게만 부여되어야 한다는 결정이 내려졌습니다.
API와 DLL 라이브러리 파일(winsock.dll) 사이에 많은 혼란이 있었기 때문에 참여하는 모든 개발자는 오랫동안 단순히 Winsock이라는 이름을 축약하는 것을 거부했습니다. 이는 API와 그 위의 응용 프로그램에 일반 WSA 인터페이스만 노출한 DLL 라이브러리 파일(winsock.dll)이었습니다. 일반적으로 DLL 파일이 시스템에 존재하는지 확인해야만 완전한 TCP/IP 프로토콜 지원을 제공할 수 있다고 믿어집니다.
윈속의 기술
Windows 소켓 API 사양은 응용 프로그램 개발자가 사용하는 API와 네트워크 소프트웨어 개발자가 시스템에 새 프로토콜 모듈을 추가하는 방법을 제공하는 SPI라는 두 가지 인터페이스를 정의합니다. 각 인터페이스는 계약을 나타냅니다.
API는 모든 네트워크 소프트웨어 공급업체의 적합한 프로토콜 구현을 통해 적합한 애플리케이션이 정상적으로 실행될 수 있도록 보장합니다. SPI 계약은 API 호환 응용 프로그램에서 사용할 수 있도록 규격 프로토콜 모듈을 Windows에 추가할 수 있음을 보장합니다.
이러한 계약은 Windows 소켓이 처음 출시되었을 때 중요했지만 네트워크 환경에는 다중 프로토콜 지원이 필요하기 때문에 지금은 학문적으로만 의미가 있습니다. Windows 소켓 API 버전 2.0에는 IPX/SPX를 사용하는 기능이 포함되어 있지만 이 프로토콜은 WSA 2.0이 공장에서 출시되었을 때 거의 사용되지 않았습니다.
Windows 소켓 코드 및 디자인은 BSD 소켓을 기반으로 하지만 API가 기존 Windows 프로그래밍 모델을 준수할 수 있도록 추가 기능이 제공됩니다.
Windows 소켓 API는 BSD 소켓 API의 모든 기능을 거의 다루었지만 몇 가지 피할 수 없는 장애물이 있습니다. 이는 주로 Windows와 Unix의 근본적인 차이점으로 인해 발생했습니다(Windows 소켓과 BSD 소켓의 차이는 Windows 소켓과 BSD 소켓의 차이보다 작았지만). 후자와 STREAMS).
그러나 Windows 소켓의 디자인 목표는 개발자가 소켓 기반 응용 프로그램을 Unix에서 Windows로 비교적 쉽게 포팅할 수 있도록 하는 것이었습니다. 새로 작성된 Windows 프로그램에만 유용한 API를 만드는 것만으로는 충분하지 않았습니다.
따라서 Windows 소켓에는 이식을 용이하게 하기 위해 설계된 많은 요소가 포함되어 있습니다. 예를 들어 Unix 애플리케이션은 동일한 errno 변수를 사용하여 네트워크 오류와 표준 C 라이브러리 함수에서 감지된 오류를 기록할 수 있습니다.
Windows에서는 구현할 수 없기 때문에 Windows 소켓에서는 오류 정보를 검색하기 위해 WSAGetLastError()라는 특수 함수를 도입했습니다. 이러한 메커니즘은 매우 유용했지만 애플리케이션 포팅은 여전히 매우 복잡했습니다.
많은 원시 TCP/IP 응용 프로그램은 Unix에 특정한 시스템 기능(예: 의사 터미널 및 포크 시스템 호출)을 사용하여 구현되었으며 Windows에서 이 기능을 재현하는 데 문제가 있었습니다. 상대적으로 짧은 시간 내에 포팅은 전용 Windows 애플리케이션 개발로 이어졌습니다.
Winsock 구현
- Microsoft는 Winsock 1.0 구현을 제공하지 않았습니다.
- Winsock 버전 1.1은 Windows for Workgroups(코드명 Snowball)용 추가 기능 패키지(Wolverine)로 제공되었습니다.
- Winsock 버전 2.1은 Windows 95용 추가 기능 패키지로 제공되었습니다.
- 최신 버전의 Winsock 2.x는 새로운 Windows 버전이나 서비스 팩의 일부로 제공됩니다.
- Winsock 2는 LSP(계층형 서비스 공급자)라는 메커니즘을 통해 확장될 수 있습니다.