Протокол команд scs
В термінології SCSI взаємодія йде між ініціатором і цільовим пристроєм. Ініціатор посилає команду цільовому пристрою, який потім відправляє відповідь ініціаторові.
Команди SCSI посилаються у вигляді блоків опису команди (Command Descriptor Block, CDB). Довжина кожного блоку може складати 6, 10, 12 або 16 байт. У останніх версіях SCSI блок може мати змінну довжину. Блок складається з однобайтового коду команди і параметрів команди.
Після отримання команди цільовий пристрій повертає значення 00h у разі успішного отримання, 02h у разі помилки або 08h у випадку, якщо пристрій зайнятий. У випадку, якщо пристрій повернув помилку, ініціатор зазвичай посилає команду запиту стану. Пристрій повертає Key Code Qualifier (KCQ).
Всі команди SCSI діляться на чотири категорії: N (non-data), W (запис даних від ініціатора цільовим пристроєм), R (читання даних) і B (двосторонній обмін даними). Всього існує порядка 60 різних команд SCSI, з яких найчастіше використовуються:
Test unit ready — перевірка готовності пристрою.
Inquiry — запит основних характеристик пристрою.
Send diagnostic — вказівка пристрою провести самодіагностику і повернути результат.
Request sense — повертає код помилки попередньої команди.
Read capacity — повертає ємкість пристрою.
Format Unit Read (4 варіанти) — читання.
Write (4 варіанти) — запис.
Write and verify — запис і перевірка.
Mode select — установка параметрів пристрою.
Mode sense — повертає поточні параметри пристрою.
Кожен пристрій на SCSI-шині має як мінімум один номер логічного пристрою (LUN — англ. Logical Unit Number). У деяких складніших випадках один фізичний пристрій може представлятися набором LUN.
Для можливості роботи декількох незалежних цільових пристроїв SCSI, в UNIX-подібних операційних системах застосовується адресація з довільно призначається драйвером ідентифікатора цільового пристрою (SCSI target id) та номери LUN, сконфигурированного на ньому. Сімейство стандартів SCSI включає в себе ряд стандартів рівня апаратури, стандарти SAM і SPC, що описують найголовніші команди і структури типу розгорнутої інформації про помилку, і специфічних для класу пристроїв стандартів.
Одним з останніх є MMC — Multimedia Command Set, повністю описує систему команд приводів CD / DVD / Blu-Ray, у тому числі їх різновидів з можливістю запису. Деякі приводи, наприклад, виробництва Asus і Pioneer, використовують конкуруючий стандарт Mt. Fuji, що відрізняється від MMC в деяких нюансах.
Поняття сокету
Данна стаття розглядає ряд питань, пов'язаних з поняттям сокет, його призначенням, використанням у Windows, перевагами Winsock, а також піднімає питання функцій APIWinsock.
Загальні поняття про сокет
В процесі мережевого з'єднання два процеси обмінюються даними. Сокет (socket) представляє собою абстрактну точку мережевого з'єднання, [2] а якщо говорити більш конкретніше, то сокет, є кінцевою точкою мережевих комунікацій. Кожен сокет, що використовується, має тип і асоційований з ним процес. Сокети існують у серединікомунікаційних доменів. Домени це абстракції, які мають конкретну структуру адресації і безліч протоколів, які визначають різні типи сокетів у середині домена. Прикладамикомунікаційних доменів можуть бути: UNIX домен, Internet домен, і т.д.
У Internet домені, сокет – це комбінація IP адреси і номера порту, яка однозначно визначає окремий мережевий процес у всій глобальній мережі Internet. Два сокети, один для хоста-одержувача, інший для хоста-відправника, визначають з'єднання для протоколів, орієнтованих на встановлення зв'язку, таких, як TCP. [3]
Сокети Windows
Можливість взаємодії з іншими системами забезпечується в Windows підтримкою сокетів Windows Sockets – сумісного і майже точного аналога сокетів Берклі (BerkeleySockets), що де-факто грають роль промислового стандарту.
Оскільки інтерфейс Winsock повинен відповідати промисловому стандарту, прийняті у ньому угоди про правила привласнення імен і стилі програмування дещо відрізняються від тих, з якими ми звикли стикатися в процесі роботи з функціями Windows. Слід зазначити, що Winsock API не є частиною Win32/64. Крім того, Winsock надає додаткові функції що не відповідають стандартам; ці функції використовуються лише у разі крайньої необхідності. [1]
У UNIX інтерфейс сокетів був вбудований в систему. Інтерфейс Winsock не входить до складу Windows, а реалізований у вигляді динамічно завантаженої бібліотеки DLL. [2]
До переваг Winsock можна віднести наступне:
· Перенесення вже існуючого коду, написаного для Berkeley Sockets API, здійснюється безпосередньо.
· Системи Windows легко вбудовуються в мережі, що використовують, як версію Ipv4 протоколу TCP/IP, так і версію IPv6, що поступово розповсюджується.
· Сокети можуть використовуватися спільно з введенням/виведенням Windows, що перекривається, що, окрім всього іншого, забезпечує можливість масштабування серверів при збільшенні кількості активних клієнтів.
· Сокети можна розглядати, як дескриптори (типу HANDLE) файлів при використанні функцій ReadFile і WriteFile, та з деякими обмеженнями, при використанні інших функцій. Ця можливість виявляється зручною в тих випадках, коли потрібне використання асинхронного введення/виведення і портів завершення введення/виведення.
· Існують також додаткові, непереносимі розширення. [1]
Функції сокетів
API Winsock містить набір функцій. Специфікація Winsock розбиває їх на три групи:
· функції сокетів в стилі Берклі, включені в Winsock API;
· функції для роботи з базами даних, що дозволяють програмам отримувати інформацію про імена доменів, протоколи і т.д.
· функції, що розподіляють набір функцій інтерфейсу сокетів Берклі.
Крім того, всі функції можна розділити на дві великі групи: блокуючі і не блокуючі.
Блокуюча функція примушує програму, що викликала її, чекати закінчення мережевої операції введення/виведення. Як приклад приведемо декілька функцій цієї групи:
аccept – підтверджує запит на встановлення з'єднання. Утворює новий сокет і сполучає його з видаленим комп'ютером, що запрошує з'єднання. Початковий сокет повертається в стан прийому вхідних запитів.
closesocket – закриває одну сторону в з'єднанні сокетів;
connect – встановлює з'єднання на вказаному сокеті;
recv – приймає дані із сполученого сокета;
send – передає дані через сполучений сокет;
sendto – передає дані через сполучений або не сполучений сокет; [2]
Не блокуюча функція не примушує програму, що викликала її, чекати закінчення мережевої операції введення/виведення. Вони перетворюють інформацію або мають справу злокальним сокетом. Як приклад приведемо декілька функцій цієї групи.
bind – привласнює ім'я неініціалізованому сокету;
getsockname – повертає ім'я вказаного локального сокета;
getsockopt – повертає опції вказаного сокета;
htonl – перетворює порядок байтів в 32-розрядному числі з машинно-незалежного в мережевий;
htons – перетворює порядок байтів в 16-розрядному числі з машинно-незалежного в мережевий;
inet_addr – перетворює рядок з IP-адресою у форматі десяткового з крапкою в 32-розрядне число в мережевому форматі;
inet_ntoa – перетворює IP-адрес у формат десяткового з крапкою;
listen – встановлює вказаний сокет в стан прослуховування запитів на вхідне з'єднання. Сама функція не проводить мережевих операцій введення/виведення;
ntohl – перетворює порядок байтів 32-розрядного числа з мережевого в машинно-залежний;
setsockopt – встановлює опції сокета;
shutdown – закриває одну сторону видаленого з'єднання;
socket – утворює точку мережевого з'єднання і повертає дескриптор сокета.
Висновоки
У даній статті були розглянуті базові поняття про сокети. Інтерфейс Windows Sockets надає можливість використання API, промислового стандарту, що відповідає вимогам, та гарантує роботу програм на різному устаткуванні і майже повну переносимість на рівні початкового коду. WinSock здатний підтримати практично будь-який мережевийпротокол, проте в більшості випадків застосовується протокол TCP/IP. [1]
