1

Тема: Як працюють формати та протоколи?

Хай. От все в компутері по суті являється послідовністю бітів, ну тобто музичка, картинки і т.д. щось типу
1010100101010010010100010010101010. А як тоді компутір розуміє, де що є? Якщо навіть вказано, що файл починається з 11111, а закінчується 00000, то в середині файлу теж може зустрітись така послідовність бітів?

2

Re: Як працюють формати та протоколи?

Ні. Все в комп'ютері може бути представлене послідовністю бітів - але не є нею, хоча б тому, що біт - поняття інформаційне, а інформації без носія не буває. І комп'ютер точно "знає", що контакт №34 іде перед контактом №35.
Що ж до конкретних випадків, коли дійсно йдеться про передачу послідовності з невідомим початком (мережею чи при читанні з конкретної доріжки диску, то там зазвичай використовується надлишкове кодування, яке дозволяє позначати початок і закінчення передачі. Наприклад, з 4 можливих напруг використовуються тільки дві для кодування 0 і 1, а решта означає, що передача зараз не йде; якщо ж це неможливо - то до кожного байту додається ще один біт, контрольний, і, скажімо, комбінація з 4 конкретних помилкових байтів є ознакою початку чи закінчення передачі.

Подякували: FakiNyan1

3 Востаннє редагувалося koala (16.04.2014 12:54:27)

Re: Як працюють формати та протоколи?

Але все це відбувається на багато глибшому рівні, ніж файли; для файлової системи диск являє собою просто пристрій пам'яті, якому можна надати "координати" комірки пам'яті - кілька чисел - і отримати у відповідь блок даних і розмір цього блоку.
Ну, якщо ще заглиблюватися, то якраз для дисків розмір визначений, це для мережі довжину можна отримати; а ще точніше - у дисків зараз два апаратні рівні абстракції, тобто система думає, що в диска одні фізичні параметри, а насправді вони зовсім інші, і електроніка диску імітує параметри для системи...

4

Re: Як працюють формати та протоколи?

FakiNyan
У файлових системах завжди вказують адресу початку файла, та його точну довжину. Сам же індекс файлової системи завжди розміщується у фіксованому місці на диску.
Якщо з якоїсь причини кінець даних заздалегідь не відомий і доводиться використовувати спеціальну послідовність байтів як ознаку кінця потоку, тоді застосовують екранування. Тобто відправник переглядає увесь потік перед відправкою отримувачу й заміняє послідовності байтів, які збігаються з ознакою кінця потоку, іншими послідовностями. Наприклад подвоєною ознакою кінця потоку. Докладніше російською: Экранирование символов.
Щоправда у способу з ознакою кінця є серйозний недолік: якщо потік може модифікувати третя сторона, або автор відправника забув про екранування, то стають можливими атаки типу Переповнення буфера та SQL ін'єкція. Доречі у делфі перша помилка практично неможлива, бо там усі стандартні динамічні типи даних містять поле з власною довжиною.

Подякували: FakiNyan1