Introduktion till Winsock inklusive bakgrund och teknik
Introduction Winsock Including Background Technology
Det här inlägget talar främst om Windows Sockets API, som kan förkortas till WSA och Winsock. Efter att ha läst det här inlägget kan du känna till dess definition, bakgrund, teknik och implementeringar.
På den här sidan :Definition till Winsock
Vad är Winsock? Inom datoranvändning är Winsock en teknisk specifikation som används för att definiera hur Windows-nätverksprogramvara ska komma åt nätverkstjänster, särskilt TCP/IP. Det kallas Winsock eftersom det är en anpassning av Berkeley UNIX-socket-gränssnittet till Windows. En socket är ett speciellt avtal som används för att ansluta till och utbyta data mellan två programprocesser på samma dator eller nätverk.
Dricks: Om du vill veta mer information om andra Internetprotokoll, rekommenderas det att gå till MiniTools webbplats.
Winsock är en förkortning av Windows Sockets API (WSA). Den definierar standardgränssnittet mellan Windows TCP/IP-klientapplikationer (som FTP-klienter eller webbläsare) och den grundläggande TCP/IP-protokollstacken.
Relaterade inlägg: Använd Netsh Winsock Reset Command för att fixa nätverksproblem i Windows 10
Bakgrund av Winsock
Windows Sockets API föreslogs av Martin Hall från JSB Software (senare Stardust Technologies) i BoF-diskussionen (Bird of a Feather) om CompuServe BBS-nätverket i oktober 1991.
Den första versionen av specifikationen skrevs av Martin Hall, Mark Towfiq från Microdyne (senare Sun Microsystems), Geoff Arnold från Sun Microsystems och Henry Sanders och J Allard från Microsoft med hjälp av många andra.
Det var några diskussioner om hur man bäst löser upphovsrätt, immateriella rättigheter och potentiella antitrustfrågor, och övervägande av arbete genom IETF eller inrättandet av ideella stiftelser. Till slut bestämdes det att specifikationen endast skulle vara upphovsrättsskyddad av fem (oanslutna) författare.
Alla deltagande utvecklare vägrade att förkorta namnet till enbart Winsock under lång tid eftersom det var mycket förvirring mellan API:t och DLL-biblioteksfilen (winsock.dll), vilket bara exponerade det allmänna WSA-gränssnittet för applikationen ovanför den. Det anses allmänt att endast säkerställande av att DLL-filen finns på systemet kan ge komplett TCP/IP-protokollstöd.
Teknik från Winsock
Windows Socket API-specifikationen definierar två gränssnitt: API som används av applikationsutvecklare och SPI som tillhandahåller en metod för nätverksprogramvaruutvecklare att lägga till nya protokollmoduler till systemet. Varje gränssnitt representerar ett kontrakt.
API garanterar att överensstämmande applikationer kan köras normalt med alla nätverksprogramvaruleverantörers överensstämmande protokollimplementering. SPI-kontraktet garanterar att överensstämmande protokollmoduler kan läggas till Windows så att de kan användas av API-kompatibla applikationer.
Även om dessa kontrakt var viktiga när Windows Sockets först släpptes, är de bara av akademisk betydelse nu eftersom nätverksmiljön kräver stöd för flera protokoll. Windows Sockets API version 2.0 inkluderar funktionen att använda IPX/SPX, även om detta protokoll var nästan föråldrat när WSA 2.0 lämnade fabriken.
Windows Sockets-koden och designen är baserad på BSD-sockets, men ytterligare funktioner tillhandahålls för att tillåta API:et att överensstämma med den konventionella Windows-programmeringsmodellen.
Windows Sockets API täckte nästan alla funktioner i BSD-sockets API, men det finns några oundvikliga hinder, som främst orsakades av de grundläggande skillnaderna mellan Windows och Unix (även om skillnaden mellan Windows Sockets och BSD-sockets var mindre än skillnaden mellan den senare och STREAMS).
Men designmålet med Windows-sockets var att göra det relativt enkelt för utvecklare att porta socket-baserade applikationer från Unix till Windows. Det räckte inte att skapa API:er som bara var användbara för nyskrivna Windows-program.
Därför innehöll Windows Sockets många element utformade för att underlätta portering. Till exempel kan Unix-applikationer använda samma errno-variabel för att logga nätverksfel och fel som upptäckts i standard C-biblioteksfunktioner.
Eftersom det inte kan implementeras i Windows, introducerade Windows Sockets en speciell funktion, WSAGetLastError(), för att hämta felinformation. En sådan mekanism var till stor hjälp, men applikationsportering var fortfarande extremt komplicerad.
Många primitiva TCP/IP-applikationer har implementerats genom att använda systemfunktioner som är specifika för Unix (som pseudoterminaler och gaffelsystemanrop), och det var problematiskt att återskapa denna funktion i Windows. På relativt kort tid gav porteringen vika för utvecklingen av dedikerade Windows-applikationer.
Implementeringar av Winsock
- Microsoft tillhandahöll ingen implementering av Winsock 1.0.
- Version 1.1 av Winsock tillhandahölls i ett tilläggspaket (kallat Wolverine) för Windows for Workgroups (kod med namnet Snowball).
- Winsock version 2.1 tillhandahölls i ett tilläggspaket för Windows 95.
- Den senaste versionen av Winsock 2.x har levererats med den nya Windows-versionen eller som en del av ett Service Pack.
- Winsock 2 kan utökas genom en mekanism som kallas Layered Service Provider (LSP).