Introduktion til Winsock inklusive baggrund og teknologi
Introduction Winsock Including Background Technology
Dette indlæg taler hovedsageligt om Windows Sockets API, som kan forkortes til WSA og Winsock. Efter at have læst dette indlæg kan du kende dets definition, baggrund, teknologi samt implementeringer.
På denne side:Definition til Winsock
Hvad er Winsock? Inden for databehandling er Winsock en teknisk specifikation, der bruges til at definere, hvordan Windows-netværkssoftware skal få adgang til netværkstjenester, især TCP/IP. Det kaldes Winsock, fordi det er en tilpasning af Berkeley UNIX socket interface til Windows. En socket er en særlig aftale, der bruges til at forbinde med og udveksle data mellem to programprocesser på samme computer eller netværk.
Tip: Hvis du vil vide mere om andre internetprotokoller, så anbefales det at gå til MiniTools hjemmeside.
Winsock er forkortelsen af Windows Sockets API (WSA). Den definerer standardgrænsefladen mellem Windows TCP/IP-klientapplikationer (såsom FTP-klienter eller webbrowsere) og den grundlæggende TCP/IP-protokolstak.
Relateret indlæg: Brug Netsh Winsock Reset Command til at løse Windows 10-netværksproblem
Baggrund for Winsock
Windows Sockets API blev foreslået af Martin Hall fra JSB Software (senere Stardust Technologies) i BoF-diskussionen (Bird of a Feather) om CompuServe BBS-netværket i oktober 1991.
Den første version af specifikationen blev skrevet af Martin Hall, Mark Towfiq fra Microdyne (senere Sun Microsystems), Geoff Arnold fra Sun Microsystems og Henry Sanders og J Allard fra Microsoft med hjælp fra mange andre.
Der var nogle diskussioner om, hvordan man bedst løser ophavsret, intellektuel ejendomsret og potentielle antitrust-spørgsmål og overvejelser om arbejde gennem IETF eller etablering af non-profit fonde. I sidste ende blev det besluttet, at specifikationen kun skulle være ophavsretligt beskyttet af fem (ikke-tilknyttede) forfattere.
Alle deltagende udviklere nægtede i lang tid at forkorte navnet til blot Winsock, fordi der var megen forvirring mellem API'et og DLL-biblioteksfilen (winsock.dll), som kun udsatte den generelle WSA-grænseflade for applikationen over den. Det antages generelt, at kun at sikre, at DLL-filen findes på systemet, kan det give komplet TCP/IP-protokolunderstøttelse.
Teknologi af Winsock
Windows Socket API-specifikationen definerer to grænseflader: API brugt af applikationsudviklere og SPI, der giver netværkssoftwareudviklere en metode til at tilføje nye protokolmoduler til systemet. Hver grænseflade repræsenterer en kontrakt.
API'en garanterer, at konforme applikationer kan køre normalt med enhver netværkssoftwareleverandørs konforme protokolimplementering. SPI-kontrakten garanterer, at konforme protokolmoduler kan føjes til Windows, så de kan bruges af API-kompatible applikationer.
Selvom disse kontrakter var vigtige, da Windows Sockets først blev udgivet, er de kun af akademisk betydning nu, fordi netværksmiljøet kræver multi-protokol-understøttelse. Windows Sockets API version 2.0 inkluderer funktionen til at bruge IPX/SPX, selvom denne protokol var næsten forældet, da WSA 2.0 forlod fabrikken.
Windows Sockets-koden og -designet er baseret på BSD-sockets, men yderligere funktioner er tilvejebragt for at tillade API'en at tilpasse sig den konventionelle Windows-programmeringsmodel.
Windows Sockets API dækkede næsten alle funktionerne i BSD sockets API, men der er nogle uundgåelige forhindringer, som hovedsageligt var forårsaget af de grundlæggende forskelle mellem Windows og Unix (selvom forskellen mellem Windows Sockets og BSD sockets var mindre end forskellen mellem sidstnævnte og STREAMS).
Designmålet med Windows sockets var dog at gøre det relativt nemt for udviklere at porte socket-baserede applikationer fra Unix til Windows. Det var ikke nok at lave API'er, der kun var nyttige til nyskrevne Windows-programmer.
Derfor indeholdt Windows Sockets mange elementer designet til at lette portering. For eksempel kunne Unix-applikationer bruge den samme errno-variabel til at logge netværksfejl og fejl fundet i standard C-biblioteksfunktioner.
Da det ikke kan implementeres i Windows, introducerede Windows Sockets en speciel funktion, WSAGetLastError(), for at hente fejlinformation. En sådan mekanisme var meget nyttig, men applikationsporting var stadig ekstremt kompliceret.
Mange primitive TCP/IP-applikationer er blevet implementeret ved at bruge systemfunktioner, der er specifikke for Unix (såsom pseudoterminaler og gaffelsystemkald), og det var problematisk at gengive denne funktion i Windows. På relativt kort tid gav portering plads til udviklingen af dedikerede Windows-applikationer.
Implementeringer af Winsock
- Microsoft leverede ikke en implementering af Winsock 1.0.
- Version 1.1 af Winsock blev leveret i en tilføjelsespakke (kaldet Wolverine) til Windows for Workgroups (kodenavnet Snowball).
- Winsock version 2.1 blev leveret i en tilføjelsespakke til Windows 95.
- Den seneste version af Winsock 2.x er blevet leveret med den nye Windows-version eller som en del af en service pack.
- Winsock 2 kan udvides gennem en mekanisme kaldet Layered Service Provider (LSP).