Кіріспе

Windows бағдарламалық жасақтамасының TCP/IP арқылы қалай жұмыс ілуі керектігінің техникалық сипаттамасы. Компьютерлік жүйелерде Windows Sockets API (WSA), кейін Winsock деп қысқартылатын, қолданбалы бағдарламалық интерфейс (API), Windows желілік бағдарламалық жасақтамасының желілік қызметтерге, әсіресе TCP/IP-ге қалай қол жеткізуін анықтайды. Ол Windows TCP/IP клиенттік бағдарламасы (мысалы, FTP клиенті немесе веб-браузер) мен негізгі TCP/IP протоколы жинағы арасындағы стандартты интерфейсті белгілейді. Аталмыш атау BSD жүйесінде бағдарламалар арасындағы байланыс үшін қолданылатын Berkeley sockets API-ге негізделген.

Өмірбаян

Microsoft-тың алғашқы операциялық жүйелері, MS DOS және Microsoft Windows, негізінен NetBIOS-ке негізделген, шектеулі желілік мүмкіндіктер ұсынды. Атап айтқанда, Microsoft сол кезде TCP/IP протоколына қолдау көрсетпеді. MIT-дегі PC/IP тобы, FTP Software, Sun Microsystems, Ungermann Bass және Excelan сияқты бірқатар университеттер мен коммерциялық компаниялар MS DOS үшін TCP/IP өнімдерін енгізді, көбінесе аппараттық-бағдарламалық кешеннің бір бөлігі ретінде. Windows 2.0 шығарылғанда, Distinct және NetManage сияқты басқа да өнім берушілер Windows үшін TCP/IP ұсынуға қосылды. Бұл өнім берушілердің кемшілігі – әрқайсысы өздерінің API (Application Programming Interface) интерфейсін қолданды. Бірде-бір стандартты бағдарламалау үлгісі болмағандықтан, тәуелсіз бағдарламалық жасақтаманы әзірлейтін мамандарды кез келген өнім берушінің TCP/IP іске асыруымен жұмыс істейтін желілік қосымшаларды жасауға көндіру қиын болды. Мұнымен қатар, соңғы пайдаланушылар бір ғана өнім берушіге тәуелді болудан сақтанды және белгілі бір стандарттау қажеттігі анық болды. Windows Sockets жобасы 1991 жылғы 10 қазанда Сан-Хоседе өткен Interop '91 шарасындағы Birds Of A Feather сессиясынан бастау алды. Ол NetManage жасаған және осы жиын кезінде жалпыға қолжетімді етуге ұсынған сокет спецификацияларына негізделген. Сол кезде NetManage сокеті Windows 3.0 үшін қол жетімді 100% DLL негізделген, көп жіпті өнім болды. Спецификацияның алғашқы нұсқасын Мартин Холл, Microdyne компаниясының (кейін Sun Microsystems) Марк Товфик, Sun Microsystems компаниясының Джефф Арнольд және Microsoft компаниясының Генри Сандерс және J Allard авторлық құқығында жазды, көптеген басқалар да көмектесті. Авторлық құқық, зияткерлік меншік және монополияға қарсы болу мүмкіндігі сияқты мәселелерді шешудің ең жақсы жолдары талқыланды, сондай-ақ IETF арқылы жұмыс істеу немесе коммерциялық емес ұйым құру мүмкіндігі де қарастырылды. Ақырында, спецификация бес автордың жеке тұлға ретінде (байланыссыз) авторлық құқығымен қорғалатыны шешілді. Барлық қатысушы әзірлеушілер көптеген пайдаланушылардың API және DLL кітапхана файлы (winsock.dll) арасындағы шатасудың салдарынан Winsock деп қысқартуға ұзақ уақыт бойы қарсылық көрсетті, өйткені DLL кітапхана файлы тек жоғары деңгейдегі қосымшаларға ортақ WSA интерфейстерін ұсынатын. Пайдаланушылар көбінесе DLL файлы жүйеде болса, TCP/IP протоколына толық қолдау көрсетіледі деп ойлады.

Технология

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 BSD сокеттерінен STREAMS-тен гөрі аз өзгеше болды). API-дегі барлық функция шақырулары белгілі бір атаумен басталады, мысалы, қосылған сокет арқылы деректерді жіберу үшін. Дегенмен, Windows Sockets жобалау мақсаты әзірлеушілерге сокетке негізделген қосымшаларды Unix-тен Windows-қа салыстырмалы түрде оңай көшіруге мүмкіндік беру болды. Жаңа Windows бағдарламалары үшін ғана пайдалы API жасау жеткіліксіз деп есептелді. Осы себепті Windows Sockets портатты жеңілдетуге арналған бірқатар элементтерді қамтыды. Мысалы, Unix қосымшалары желілік қателерді және стандартты C кітапханасы функцияларында анықталған қателерді тіркеу үшін бірдей айнымалыны пайдалана алды. Бұл Windows-та мүмкін болмағандықтан, Windows Sockets қате туралы ақпаратты алу үшін арнайы функцияны енгізді. Мұндай механизмдер көмектесті, бірақ қосымшаны көшіру өте күрделі болып қалды. Көптеген бастапқы TCP/IP қосымшалары Unix жүйесіне тән ерекшеліктерді пайдаланып іске асырылды, мысалы, псевдотерминалдар және fork жүйелік шақыруы, ал мұндай функционалдылықты Windows-та қайта жасау қиын болды. Ұзақ уақыт өткен соң, портат Windows-қа арналған қосымшаларды әзірлеуге жол берді.

Сипаттамалар

1.0 нұсқасы (1992 жылдың маусымы) Winsock-тің негізгі жұмысын анықтады. Бар қолданбаларды порттауды жеңілдету үшін ол Беркли сокеттерінің қолданыстағы интерфейсіне өте жақын сақталды. Windows-қа тән бірнеше кеңейтулер, негізінен хабарламаға негізделген хабарламалармен асинхронды операцияларды жүзеге асыру үшін, қосылды. Құжат TCP/IP қолдауын шектемесе де, TCP және UDP ғана нақты аталған протоколдар болды. Көптеген өндірушілер тек TCP/IP қолдауын ұсынды, бірақ DEC-тен шыққан Winsock DECNet қолдауын да қамтыды. 1.1 нұсқасы (1993 жылғы қаңтар) спецификацияға көптеген ұсақ түзетулер мен нақтылаулар енгізді. Ең маңызды өзгеріс – функцияның қосылуы болды. Winsock 2 – Winsock 1.1-ге кері үйлесімді кеңейтім болды. Ол протоколға тәуелсіз атауларды шешуді, оқиғаларға негізделген хабарламалармен және аяқталу процедураларымен асинхронды операцияларды, қабатталған протоколдарды жүзеге асыруды, көптеп таратуды және қызмет сапасын қолдады. Сондай-ақ, IPX/SPX және DECnet сияқты бірнеше протоколдарды қолдау ресми түрде бекітілді. Жаңа спецификация сокеттерді процестер арасында таңдау бойынша бөлісуге, кіріс қосылым сұрауларын шартты түрде қабылдауға және жеке сокеттерге емес, сокеттер тобында операцияларды орындауға мүмкіндік берді. Жаңа спецификация Winsock 1-ден едәуір өзгеше болғанымен, Winsock 1.1 API-мен бастапқы және бинарлық деңгейде үйлесімділікті қамтамасыз етті. Кем белгілі қосымшалардың бірі – Қызмет провайдері интерфейсі (SPI) API және қабатталған қызмет провайдерлері болды. 2.0.x нұсқалары (1994 жылдың мамырынан бастап) ішкі жоба статусына ие болды және мемлекеттік стандарт ретінде жарияланбады. 2.1.0 нұсқасы (1996 жылдың қаңтары) Winsock 2 спецификациясының алғашқы ресми жариялануы болды. 2.2.0 нұсқасы (1996 жылдың мамыры) көптеген ұсақ түзетулерді, нақтылауларды және пайдалану бойынша ұсынымдарды қамтыды. Бұл сондай-ақ 16 биттік Windows қолданбаларын қолдауды алып тастаған алғашқы нұсқа болды. 2.2.1 (1997 жылдың мамыры) және 2.2.2 (1997 жылдың тамызы) нұсқалары функционалдық жағынан ұсақ жақсартулар енгізді. Желілік және жүйелік конфигурациядағы өзгерістер туралы сұрау және хабарлама алу механизмдері қосылды. Windows 2000 үшін IPv6 техникалық алдын ала шолуы (2000 жылдың желтоқсаны) RFC 2553 (1999 жылдың наурызы, кейіннен RFC 3493 ескірген) протоколының алғашқы іске асырылуын көрді, бұл атауларды шешу үшін протоколға тәуелсіз API болды және Windows XP-де Winsock құрамына кірді.

Windows 8 -дегі жаңартулар

Windows 8 Winsock үшін "RIO" (тіркелген IO) кеңейтулерін қамтиды. Бұл кеңейтулер желілік деректер жолы мен хабарламалар жолы үшін пайдаланушы режимінен ядролық режимге ауысудың артық жүктемесін азайтуға бағытталған, бірақ Windows-тың стандартты TCP және UDP стегінің қалған бөлігін пайдаланады (және қолданыстағы желілік карталарды қолданады). Орнату жолы (мысалы, "қосылу" функциясы) стандартты Winsock жолынан ешқандай өзгеріссіз қалады.

Microsoft-тың іске асырулары

Microsoft Winsock 1.0 бағдарламасын іске асырмады. Winsock 1.1 нұсқасы Windows for Workgroups (Snowball кодовый аты) үшін қосымша пакет (Wolverine деп аталады) ретінде ұсынылды. Ол Windows 95 және Windows NT-нің 3.5 нұсқасынан бастап барлық нұсқаларының ажырамас бөлігі болды (Windows NT-тің алғашқы коммерциялық нұсқасы, 3.1 нұсқасы, AT&T UNIX System V "STREAMS" API-ге негізделген TCP/IP-нің меншік және толық емес іске асырылуын қамтыды). Winsock 2.1 нұсқасы Windows 95 үшін қосымша пакетпен жеткізілді. Ол Windows 98, Windows NT 4.0 және барлық келесі Windows нұсқаларының ажырамас бөлігі болды. (Microsoft Winsock 2-нің Windows 3.x немесе Windows NT 3.x үшін іске асырылған нұсқаларын ұсынбады.) Winsock 2.x-тің соңғы нұсқалары Windows-тың жаңа нұсқаларымен немесе сервистік жинақтардың бір бөлігі ретінде жеткізілді. Winsock 2 қабатталған қызмет провайдері (LSP) деп аталатын механизм арқылы кеңейтіледі. Winsock LSP-лер көптеген пайдалы мақсаттар үшін қолжетімді, соның ішінде интернет-бақылау, веб-контентті сүзгілеу, QoS және т.б. Барлық провайдерлердің қабатталу реті Winsock каталогында сақталады. Windows-тың бұрынғы нұсқаларында, қате LSP-ді жою Winsock каталогының зақымдануына әкелуі мүмкін, бұл желілік байланыстың толығымен жоғалуына соқтыруы мүмкін. Winsock Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 және барлық келесі Windows операциялық жүйелерінде пайдаланушы мұндай LSP-ді жойғаннан кейін өзін-өзі қалпына келтіруге қабілетті.

Басқа іске асырулар

Winsock-ке сәйкес TCP/IP және UDP/IP стектерін ұсынатын басқа сатушылардың арасында (әліпби бойынша) 3Com, Beame & Whiteside, DEC, Distinct, Frontier, FTP Software, IBM, Microdyne, NetManage, Novell, Sun Microsystems және Trumpet Software International компаниялары болды. Питер Таттэмнің Trumpet Winsock бағдарламасы Windows 3.0 жүйесінде орнатылатын, Winsock 1.0 нұсқаларының санаулы бірі болды, себебі Windows 3.0 жүйесінде Winsock қолдауы болмаған. Trumpet Winsock Windows 3.x үшін ең танымал тегін таратылатын (shareware) Winsock нұсқасы болды. Trumpet Winsock 5.0 Windows 95/98 және Windows NT үшін қолжетімді, сондай-ақ осы операциялық жүйелер үшін Winsock 1.1 стандартына сәйкес IPv6 стекін қамтиды. Wine жобасында BSD сокеттері API негізінде Winsock-тің бастапқы кодты және екілік форматта үйлесімді қайта іске асырылуы бар.