Winsock
In de computerwereld is Winsock (afkorting voor Windows Sockets) een specificatie die definieert hoe Windows netwerk-software netwerk-diensten, vooral TCP/IP, dient te benaderen.
Inhoud |
[bewerk] Achtergrond
De eerste operating systems van Microsoft, zowel MS-DOS als Windows boden beperkte netwerk mogelijkheden, hoofdzakelijk gebaseerd op NetBIOS ( een technologie van IBM die Microsoft overnam). Microsoft negeerde volkomen de protocol-stack van TCP/IP. Een aantal groepen van universiteiten en commerciele aanbieders, waaronder de PC/IP groep van het MIT, FTP Sofware, Sun Microsystems, Ungermann-Bass en Excelan, introduceerden TCP/IP - producten voor MS-DOS, vaak als onderdeel van een hardware/software-bundel. Toen Microsoft Windows werd uitgebracht, sloten aanbieders zoals Distinct en Netmanage zich aan in het aanbieden van TCP/IP voor Windows. Zelfs Microsoft leverde een product met beperkte mogelijkheden.
Het nadeel, dat al deze aanbieders voor ogen kwam, was dat ieder van hen zijn eigen API gebruikte. Zonder een enkel standaard programmeermodel was het moeilijk om onafhankelijke ontwikkelaars van software netwerk-applicaties te laten maken en gebruikers waren terughoudend om zich vast te binden aan een enkele aanbieder.
Er waren in de loop der jaren al een aantal succesvolle standaardisatie pogingen in het gebied van netwerken met PC's. De eerste ervan was een ontwikkelingsprogramma, gesponsord door de luchtmacht van de V.S. , voor RFC1001/1002, een NetBIOS-implementatie lopend via TCP/IP. Een tweede was de poging voor een packet-driver van Crynwr die gestart werd door FTP software en geleid werd door Russ Nelson.
Winsock werd voorgesteld door Martin Hall van JSB Software ( het latere Stardust Technologies) tijdens de Interop van oktober 1991, tijdens een "anderman's veren"-sessie. De eerste uitgave van de specificatie werd geschreven door Martin Hall, Mark Towfiq van Microdyne (later behorende bij Sun Microsystems), Geoff Arnold van Sun Microsystems, en Henry Sanders van Microsoft, met behulp van vele anderen. Er ontstond enige discussie over hoe het kopieerrecht , intellectueel eigendom en andere potientiele 'anti-trust'-zaken te omschrijven en er werd uiteindelijk voorgesteld om het te overleggen aan de IETF of om een non-profit organisatie hiervoor op te richten. Uiteindelijk werd besloten om het kopieerrecht van de specificatie neer te leggen bij de vier auteurs in de vorm van (onafhankelijke) individuen.
[bewerk] Technologie
De Winsock specificatie definieert twee interfaces : de API die gebruikt wordt door applicatie-ontwikkelaars en de SPI die netwerksoftware-ontwikkelaars in mogelijkheden voorziet om nieuwe protocol-modules aan het systeem toe te voegen. Iedere interface vertegenwoordigt een contract. De API garandeert dat een bindende applicatie zich correct zal gedragen met een overeenkomende protocol-implementatie van willekeurig welke software aanbieder. De SPI garandeert dat een overeenkomende protocol-module aan Windows toegevoegd kan worden en daardoor bruikbaar is voor een, aan de API gebonden, applicatie. Alhoewel deze contracten belangrijk waren toen Winsock voor het eerst werd uitgebracht, zijn ze nu slechts nog interessant voor academici. Microsoft levert tegenwoordig een TCP/IP-stack van hoge kwaliteit bij alle recente versies van Windows en er zijn geen andere belangrijke onafhankelijke alternatieven. Noch is er een overmatige interesse om andere protocollen te implementeren behalve TCP/IP.
Winsock is gebaseerd op BSD sockets, maar voorziet tevens in toegevoegde functionaliteit om de API samen te laten werken met het standaard programmeermodel van Windows. De Winsock API dekt bijna alle mogelijkheden van de API van de BSD-sockets, maar er waren enkele onvermijdbare hindernissen die voortkwamen uit het fundamentele verschil tussen UNIX en Windows ( alhoewel eerlijkheidshalve Winsock minder van de BSD-sockets verschilde dan deze laatste t.o.v. STREAMS).
Het was echter al als doel gesteld tijdens het ontwerp van Winsock dat het relatief makkelijk zou zijn voor ontwikkelaars om applicaties van Unix naar Windows te porteren op basis van sockets. Het maken van een API die alleen geschikt was voor het schrijven van nieuwe Windows programma's werd niet als voldoende beschouwd. Vanwege deze reden bevatte Winsock een aantal elementen die ontwikkeld waren om portering te faciliteren. Bijvoorbeeld, Unix-applicaties konden dezelfde errno variabele gebruiken om netwerkfouten en fouten in de standaard C-bibliotheken op te sporen. Gezien dit in Windows niet mogeljk was, introduceerde Winsock een vaste toegewijde functie, WSAGetLastError(), om informatie omtrent fouten op te sporen. Zulke mechanismen waren handig, maar het porteren van applicaties bleef behoorlijk complex. Vele 'traditionele' TCP/IP-applicaties zijn geimplementeerd geworden met gebruikmaking van mogelijkheden die Unix-specifiek zijn, zoals pseudo-terminals en de gevorkte systeem-aanroepen en het reproduceren van dit soort mogelijkheden in Windows was problematisch. Binnen een zeer korte tijd maakte porteren plaats voor de ontwikkeling van op Windows toegespitste applicaties.
[bewerk] Specificaties
- Versie 1.0 (juni 1992) definieerde de basiswerking van Winsock. Het werd zeer dicht tegen de bestaande interface van Berkely sockets gehouden om het porteren van bestaande applicaties te vereenvoudigen. Een paar uitbreidingen die specifiek voor Windows waren , werden toegevoegd, hoofdzakelijke voor asynchrone handelingen met meldingen gebaseerd op berichtgeving.
- Alhoewel volgens het document de ondersteuning niet beperkt was tot TCP/IP, waren TCP en UDP de enige protocollen die specifiek genoemd werden. De meeste aanbieders leverden slechts ondersteuning voor TCP/IP, echter Winsock van DEC voegde tevens ondersteuning voor DECNet toe.
- Versie 1.1 (januari 1993) paste vele kleine correcties en verhelderingen toe op de specificatie. De meest belangrijke verandering was het inbegrip van de gethostname() functie.
- Winsock 2 was een 'met-terugwerkende-kracht'-geschikte uitbreiding van Winsock 1.1. Het voegde ondersteuning toe voor protocol-afhankelijke naamresolutie, asynchrone handelingen met notificaties die op gebeurtenissen gebaseerd waren en routines ter afronding, gelaagde protocol implementaties, multicasting, en 'quality of service' (kwaliteit van de dienst). Het omvatte tevens ondersteuning voor meervoudige protocollen, waaronder IPX/SPX en DECNet. De nieuwe specificatie stond sockets toe optioneel gedeeld te laten worden tussen processen, binnenkomende verbindingsverzoeken toe om op voorwaarden toegelaten te worden en bepaalde handelingen uit te laten voeren op socket-groepen te laten uitvoeren in plaats van individuele sockets. Alhoewel de nieuwe specificatie grotendeels afweek van Winsock 1, voorzag het in compatibiliteit op bron- en binair niveau met de Winsock 1.1. API.
- Versies 2.0.x (mei 1994 en verder ) hadden een 'intern opgetekend'-status en werden niet aangekondigd als publieke standaarden.
- Versie 2.1.0 (januari 1996) was de eerste publieke uitgave van de Winsock 2 specificatie.
- Versie 2.2.0 (mei 1996) bevatte vele kleine correcties, verhelderingen en aanbevelingen voor gebruik. Het was tevens de eerste versie zonder ondersteuning voor 16-bit Windows applicaties.
- Versie 2.2.1 (mei 1997) en Version 2.2.2 (augustus 1997) introduceerden kleine functionele opwaarderingen. Er werden mechanismen toegevoegd voor het opvragen en verkrijgen van notificaties over veranderingen in netwerk- of systeem-configuratie.
- De Technische Voorsbeschouwing van IPv6 voor Windows 2000 (december 2000) zag de eerste implementatie van RFC 2553 (maart 1999, die later overbodig werd door RFC 3493), een protocol-afhankelijke API voor 'name resolution', dat een onderdeel van Winsock zou worden in Windows XP.
[bewerk] Implementaties
[bewerk] Microsoft implementaties
- Microsoft voorzag nooit in een Winsock 1.0.
- Versie 1.1 van Winsock werd toegevoegd in een 'add-on package' (Wolverine genaamd) voor Windows for Workgroups. Het was tevens een integrale component van Windows 95 en Windows NT 3.x.
- Version 2 of Winsock werd toegevoegd in een 'add-on package' bij Windows 95. Het was een integraal component van Windows 98, Windows NT 4.0, en alle daarop volgende Windows uitgaven. (Microsoft leverde geen implementaties van Winsock 2 voor Windows 3.x of Windows NT 3.x.)
- Recente versies van Winsock 2.x worden geleverd met nieuwe Windows uitgaven of als onderdeel van service packs.
[bewerk] Implementaties van derden
- Onder de aanbieders die Winsock-geschikte TCP/IP stacks leverden waren (alphabetisch) 3Com, Beame & Whiteside, DEC, Distinct, FTP Software, Frontier, IBM, Novell, Microdyne, NetManage, Sun Microsystems en Trumpet.
- Trumpet Winsock was een van de weinige Winsock 1.0 implementaties die geinstalleerd kon worden onder Windows 3.0( dat zelf geen ingebouwde ondersteuning voor Winsock had). Trumpet was tevens de meest populaire 'freeware' implementatie van Winsock voor Windows 3.x.
[bewerk] Bron
Origineel overgenomen van : Aboba, Bernard D., comp.protocols.tcp-ip.ibmpc, Frequently Asked Questions, 1993. Usenet: news:news.answers. Met dank aan http://www.foldoc.org.
[bewerk] Zie ook
- Berkeley sockets