Vypracovane otazky k bakalarskym statnicim
Vypracovane otazky k bakalarskym statnicim
Vypracovane otazky k bakalarskym statnicim
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Učební texty k státní bakalářské zkoušce<br />
Obecná informatika<br />
Architektury počítačů a sítí<br />
študenti MFF<br />
15. augusta 2008<br />
1
5 Architektury počítačů a sítí<br />
Požadavky<br />
• Architektury počítače.<br />
• Procesory, multiprocesory.<br />
• Vstupní a výstupní zařízení, ukládání a přenos dat.<br />
• Architektury OS.<br />
• Procesy, vlákna, plánování.<br />
• Synchronizační primitiva, vzájemné vyloučení.<br />
• Zablokování a zotavení z něj.<br />
• Organizace paměti, alokační algoritmy.<br />
• Principy virtuální paměti, stránkování.<br />
• Systémy souborů, adresářové struktury.<br />
• Bezpečnost, autentifikace, autorizace, přístupová práva.<br />
• ISO/OSI vrstevnatá architektura sítí.<br />
• TCP/IP.<br />
• Spojované a nespojované služby, spolehlivost, zabezpečení protokolů.<br />
5.1 Architektury počítače<br />
Definice (Architektura počítača)<br />
Architektura počítača popisuje „všetko, čo by mal vedieť ten, ktorý programuje v<br />
assembleri / tvorí operačný systém�. Teda:<br />
• z akých častí – štruktúra počítača, usporadanie<br />
• význam častí – funkcia časti, ich vnútorná štruktúra<br />
• ako spolu časti komunikujú – riadenie komukácie<br />
• ako sa jednotlivé časti ovládajú, aká je ich funkčnosť navonok<br />
Definice (Víceúrovňová organizace počítače)<br />
• Mikroprogramová úroveň (priamo technické vybavenie počítača)<br />
• Strojový jazyk počítače (virtuálny stroj nad obvodovým riešením; vybavenie –<br />
popis architektúry a organizácie)<br />
• Úroveň operačního systému (doplnenie predchádzajúcej úrovne o súbor makroinštrukcií<br />
a novú organizáciu pamäti)<br />
• Úroveň assembleru (najnižšia úroveň ľudsky orientovaného jazyka)<br />
• Úroveň vyšších programovacích jazyků (obecné alebo problémovo orientované;<br />
prvá nestrojovo orientovaná úroveň)<br />
• Úroveň aplikačních programů<br />
2
Je teda potrebné definovať<br />
• Inštrukčný súbor (definícia prechodovej funkcie medzi stavmi počítača, formát<br />
inštrukcie, spôsob zápisu, možnosti adresovania operandov)<br />
• Registrový model (rozlišovanie registrov procesoru: podľa voľby, pomocou určenia<br />
registru – explicitný/implicitný register; podľa funkcie registru – riadiaci<br />
register/register operandu)<br />
• Definice specializovaných jednotek (jednotka na výpočet vo floatoch;<br />
fetch/decode/execute jednotky)<br />
• Paralelismy (rozklad na úlohy, ktoré sa dajú spracovať súčasne – granularita<br />
(programy, podprogramy, inštrukcie...))<br />
• Stupeň predikce (schopnosť pripraviť sa na očakávanú udalosť (načítanie inštrukcie,<br />
nastavenie prenosu dát) – explicitná predikcia, štatistika, heuristiky,<br />
adaptívna predikcia)<br />
• Datové struktury a reprezentáciu dát (spôsob uloženia dát v počítači, mapovacie<br />
funkcie medzi reálnym svetom a vnútorným uložením, minimálna a<br />
maximálna veľkosť adresovateľné jednotky)<br />
• Adresové konvencie (ako sa pristupuje k dátovým štruktúram – segment+offset<br />
alebo lineárna adresácia; veľkosť pamäti a jej šírika, „povolené� miesta)<br />
• Řízení (spolupráca procesoru a ostatných jednotiek, interakcia s okolím, prerušenia<br />
– vnútorne/vonkajšie)<br />
• Vstupy a výstupy (metódy prenosu dát medzi procesorom a ostatnými jednotkami/počítačom<br />
a okolím; zahrňuje definície dátových štruktúr, identifikácia<br />
zdroja/cieľa, dátových ciest, protokoly, reakcie na chyby).<br />
• Šíře datových cest<br />
• Stupeň sdílení (na úrovni obvodov – zdieľanie obvodov procesoru a IO; na<br />
úrovni jednotiek – zdieľanie ALU viacerými procesormi)<br />
Základní dvě architektury počítačů<br />
Von Neumannova<br />
• Počítač se skládá z řídící jednotky, ALU, paměti a I/O jednotek<br />
• Štruktúra počítača sa nemení typom úlohy (tj. počítač je programovaný obsahem<br />
paměti).<br />
• Program se nejprve zavede do paměti, z ní se postupně popořadě vybírají instrukce<br />
(a následující krok závisí na předchozím), pořadí lze změnit instrukcemi<br />
skoku.<br />
• Do jedné paměti, dělené na buňky stejné velikosti, se ukládají i zpracovávaná<br />
data. Data jsou reprezentovaná binárně.<br />
• V každém okamžiku je vykonávána jen jedna činnost. Je to architektura SISD<br />
(viz Flynnova taxonomie).<br />
3
Je pevně daná instrukční sada. Strojová instrukce obsahuje operační znak,<br />
který určuje druh operace, počet parametrů atd., a operandovú část – umístnění<br />
jednotlivých operandů. Vykonat jednu instrukci znamená:<br />
• (fetch) načítať inštrukciu z pamäti do procesoru<br />
• (decode) zistiť o akú inštrukciu ide<br />
• (load) pripraviť zdrojové operandy<br />
• (execute) vykonať operáciu<br />
• (store) uloziť cieľové operandy<br />
Při vykonávání programu jsou potřebné různé registry – nejdůležitější jsou: PC<br />
(Program Counter, obsahuje adresu následující instrukce), IR (Instruction Register,<br />
adresa právě vykonávané instrukce), SP (Stack Pointer, ukazatel na vrchol<br />
zásobníku), MAR (memory access register – adresa do operační paměti), MBR<br />
(memory buffer register, dáta čítána/zapisována do paměti).<br />
Struktura jednoprocesorového počítače podle Von Neumanna:<br />
Harvardská<br />
Vytvořena až po Von Neumannově, liší se hlavně tím, že program se ukládá do<br />
jiné paměti než data (tzn. jsou 2 „druhy paměti� – instrukcí a dat). Příklady jsou<br />
DSP procesory a mikrokontrolery (např. AVR od Atmelu, a PIC – mají paměť na<br />
program a data a RISC instrukční sadu; výhoda oddělených pamětí je, že můžou<br />
mít různou bitovou hloubku – 8 bitové data, ale 12-, 14- či 16- bitové instrukce<br />
(např. ARM musí občas použít více než jednou instrukci na zpracování obsahu<br />
plné velikosti)).<br />
Oproti Von Neumannově nehrozí nebezpečí přepsání programu sebou samým,<br />
ale kvůli většímu počtu paměťových sběrnic je náročnější na výrobu. Paměť navíc<br />
nelze dělit podle potřeby (rozdělení je už dané).<br />
5.2 Procesory, multiprocesory<br />
Definice (Procesor)<br />
Procesor (CPU – central processing unit) je ústřední výkonnou jednotkou počítače,<br />
která čte z paměti instrukce a na jejich základě vykonává program.<br />
Základnými súčasťami procesora sú:<br />
4
• řadič nebo řídicí jednotka, která řídí tok programu, tj. načítání instrukcí, jejich<br />
dekódování, načítání operandů instrukcí z operační paměti a ukládání výsledků<br />
zpracování instrukcí<br />
• sada registrů k uchování operandů a mezivýsledků.<br />
• jedna nebo více aritmeticko-logických jednotek (ALU), které provádí s daty<br />
aritmetické a logické operace.<br />
• některé procesory obsahují jednu nebo několik jednotek plovoucí čárky (FPU),<br />
které provádí operace v plovoucí řádové čárce.<br />
Poznámka<br />
Súčasné procesory navyše často obsahujú ďalšie rozsiahle funkčné bloky (cache,<br />
rôzne periférie) – ktoré z „ortodoxného hladiska� nie sú priamo súčasťou jadra<br />
procesoru. Niektoré procesory môžu obsahovať viac jadier (+logiku slúžiacu k<br />
ich vzájomnému prepojeniu). Ďalším trendom je SoC (System on Chip), kde sa<br />
na čipe procesora nachádzajú aj ďalšie subsystémy napr. na spracovanie zvuku,<br />
grafiky alebo pripojenie externých periférií (takéto riešenia sa využívajú väčšinou<br />
v PDA, domácej elektronike, mobiloch atď.).<br />
Dělení podle instruční sady<br />
Podľa inštrukčnej sady je možné procesory rozdeliť na:<br />
• CISC (Complex Instruction Set Computer): poskytuje rozsiahlu inštrukčnú<br />
sadu spolu s rôznymi variantami inštrukcií. Jedna inštrukcia napr. môže vykonať<br />
veľa low-level operácií (načítanie z pamäti, vykonať aritmetickú operáciu a<br />
výsledok uložiť). Takéto inštrukcie zjednodušovali zápis programov (inštrukcie<br />
boli bližšie vyšším programovacím jazykom) a zmenšovali veľkosť programu a<br />
počet prístupov do pamäti – čo bolo v 60tych rokoch dôležité. Avšak nie vždy<br />
je vykonanie jednej zložitej operácie rýchlejšie ako vykonanie viac menej zložitých<br />
miesto toho (napr. kvôli zložitému dekódovaniu a použitiu mikrokódu<br />
na volanie jednoduchých „podinštrukcií�). Príkladmi CISC architektúr procesorov<br />
sú System/360, Motorola 68000 a Intel x86. V súčasnosti napr. x86<br />
rozkladá zložité inštrukcie na „micro-operations� ktoré môžu byť pipeline-ou<br />
spracované paralelne a vyšší výkon je tak dosahovaný na väčšom rozsahu inštrukcií.<br />
Vďaka tomu sú súčasné x86 procesory minimálne rovnako výkonné<br />
ako ozajstné RISC architektúry.<br />
• RISC (Reduced Instruction Set Computer): design CPU ktorý uprednosňuje<br />
jednoduchšiu inštrukčnú sadu a menšiu zložitosť adresovacích modelov – vďaka<br />
čomu je možné dosiahnuť lacnejšiu implementáciu, väčšiu úroveň paralelizmu<br />
a účinnejšie kompilátory. Dôvodom vzniku bolo aj nevyužívanie celej CISC<br />
inštrukčnej sady a upredňostňovania len obmedzenej podmnožiny (designéri<br />
procesorov potom optimalizovali len tieto podmnožiny a tak sa zvyšné inštrukcie<br />
používali ešte menej...). Kvôli väčšiemu počtu inštrukcií však musia<br />
RISC procesory častejšie pristupovať k pamäti... Príkladmi RISC procesorov<br />
sú napr. SPARC a ARM. V architekturách typu Post-RISC jde o spojení<br />
RISCových vlastností s technikami zvýšení výkonu, jako je out-of-order vykonávání<br />
a paralelismus.<br />
5
• VLIW: Very Long Instruction Word or VLIW refers to a CPU architecture<br />
designed to take advantage of instruction level parallelism (ILP). A processor<br />
that executes every instruction one after the other (i.e. a non-pipelined scalar<br />
architecture) may use processor resources inefficiently, potentially leading to<br />
poor performance. The performance can be improved by executing different<br />
sub-steps of sequential instructions simultaneously (this is pipelining), or even<br />
executing multiple instructions entirely simultaneously as in superscalar architectures.<br />
The VLIW approach, on the other hand, executes operation in<br />
parallel based on a fixed schedule determined when programs are compiled.<br />
Since determining the order of execution of operations (including which operations<br />
can execute simultaneously) is handled by the compiler, the processor<br />
does not need the scheduling hardware that the three techniques described<br />
above require. As a result, VLIW CPUs offer significant computational power<br />
with less hardware complexity (but greater compiler complexity) than is<br />
associated with most superscalar CPUs.<br />
• EPIC: (Někdy označován za poddruh VLIW) Explicitly Parallel Instruction<br />
Computing (EPIC) is a computing paradigm that began to be researched in<br />
the 1990s. This paradigm is also called Independence architectures. It was<br />
used by Intel and HP in the development of Intel’s IA-64 architecture, and has<br />
been implemented in Intel’s Itanium and Itanium 2 line of server processors.<br />
The goal of EPIC was to increase the ability of microprocessors to execute<br />
software instructions in parallel, by using the compiler, rather than complex<br />
on-die circuitry, to identify and leverage opportunities for parallel execution.<br />
This would allow performance to be scaled more rapidly in future processor<br />
designs, without resorting to ever-higher clock frequencies, which have since<br />
become problematic due to associated power and cooling issues.<br />
TODO: asi opravit, možná zpřesnit VLIW a EPIC a určitě přeložit<br />
Řekneme, že procesor má ortogonální instrukční sadu, pokud žádná instrukce<br />
nepředpokládá implicitně použití některých registrů. To umožňuje jednodušší práci<br />
algoritmům přidělování registrů v překladačích. Příkladem neortogonální instrukční<br />
sady je i x86.<br />
Další dělení<br />
Ďalej je možné procesory rozdeliť podľa dĺžky operandov v bitoch (8, 16, 32, 64...),<br />
ktorý je procesor schopný spracovať v jednom kroku. V embedded zariadeniach sa<br />
najčastejšie používajú 4- a 8-bitové procesory. V PDA, mobiloch a videohrách 8<br />
resp. 16 bitové. 32 a viac bitov využíajú napr. osobné počítače a laserové tlačiarne.<br />
Dôležitou vlastnosťou je aj taktovacia frekvencia jadra, MIPS (millions of instructions<br />
per second) a jeho rýchlosť. V súčasnosti je ťažké dávať do súvislosti<br />
výkon procesorov s ich frekvenciou (resp. MIPS) – kým Pentium zvládne na výpočet<br />
vo floatoch, jednoduchý 8-bitový PIC na to potrebuje oveľa viac taktov.<br />
Ďalším „problémom� je superskalarita procesorov, ktorá im umožňuje vykonať<br />
viacero nezávislých inštrukcií počas jedného taktu.<br />
6
Techniky pro zvýšení výkonu<br />
Zvyšovať výkon (procesorov) je možné viacerými spôsobmi. Najjednoduchším (a<br />
najpomalším) typom je Subskalárny CPU (načíta a spracúva len jednu inštrukciu<br />
naraz – preto musí celý procesor čakať kým vykonávanie inštrukcie skončí; je tak<br />
zdržovaný dlhšie trvajúcimi inštrukciami).<br />
Pokusy o dosiahnutie skalárneho a lepšieho výkonu vyústili do designov ktoré<br />
sa správajú menej lineárne a viac paralelne. Čo sa týka paralelizmu v procesoroch,<br />
používajú sa dva druhy pojmov na ich klasifikáciu – Instruction level parallelism<br />
(zvyšovanie rýchlosti vykonávania inštrukcií v procesore a teda zväčšovanie využitia<br />
prostriedkov na čipe) a Thread level parallelism (zväčšovanie počtu vlákien,<br />
ktoré dokáže CPU vykonávať naraz).<br />
• pipeline: Zlepšenie je možné dosiahnúť pomocou „instruction pipelining�-u,<br />
ktoré je použíté vo väčšine moderných procesorov. Umožňuje vykonanie viac<br />
ako jednej inštrukcie v jednom kroku vďaka rozloženiu spracovávania inštrukcie<br />
na viac menších krokov:<br />
• superskalarita: Dialša možnosť je použitie superscalar designu, ktorý obsahuje<br />
dlhú inštrukčnú pipeline a viacero identických execution jednotiek.<br />
• Out of order execution<br />
1. Načtení instrukce, případně její rozdrobení na mikroinstrukce<br />
2. Zařazení do vyčkávací stanice (instruction pool)<br />
3. Instrukce čeká na všechny svoje operandy<br />
4. Instrukce se vykoná ve své výkonné jednotce (je vybírána z instruction<br />
poolu nezávisle na ostatních)<br />
5. Výsledky se uchovají ve frontě (reorder buffer)<br />
7
6. Až se všechny starší instrukce zapíší do registrů, zapíše se výsledek této<br />
instrukce (opětovné řazení)<br />
• Predikce skoků – hluboké pipeliny mají problém, pokud podmíněný skok<br />
není proveden; dynamická predicke skoků (historie CPU – vzory nějaké hloubky)<br />
vs. statická (bez nápovědy – skok vpřed se neprovede, skok vzad se provede; s<br />
nápovědou – překladač odhaduje pravděpodobnost skoku)<br />
• Spekulativní vykonávaní – vykonávání kódu, který nemusí být zapotřebí;<br />
významná disproporce mezi rychlostí CPU a paměti; typické využití je značné<br />
předsunutí čtecích operací; CPU provádí i odsouvání zápisových operací<br />
• Data parallelism: SIMD inštrukcie (napr. multimediálne inštrukcie), vektorové<br />
procesory...<br />
Multiprocesory<br />
TODO: jde o copy & paste z Wiki ... předělat česky/slovensky<br />
Definice (Multiprocesor)<br />
O multiprocesoru mluvíme, pokud je použito dvou nebo více procesorů (CPU)<br />
v rámci jednoho počítačového systému. Termín je také používán mluvíme-li o<br />
schopnosti systému využívat více procesorů a/nebo schopnosti rozdělovat úlohy<br />
mezi jednotlivými procesory.<br />
Vztah k datům a instrukcím<br />
In multiprocessing, the processors can be used to execute a single sequence of<br />
instructions in multiple contexts (single-instruction, multiple-data or SIMD, often<br />
used in vector processing), multiple sequences of instructions in a single context<br />
(multiple-instruction, single-data or MISD, used for redundancy in fail-safe systems<br />
and sometimes applied to describe pipelined processors or hyperthreading),<br />
or multiple sequences of instructions in multiple contexts (multiple-instruction,<br />
multiple-data or MIMD).<br />
Symetrie<br />
In a multiprocessing system, all CPUs may be equal, or some may be reserved<br />
for special purposes. A combination of hardware and operating-system software<br />
design considerations determine the symmetry (or lack thereof) in a given system.<br />
For example, hardware or software considerations may require that only one CPU<br />
respond to all hardware interrupts, whereas all other work in the system may be<br />
distributed equally among CPUs; or execution of kernel-mode code may be restricted<br />
to only one processor (either a specific processor, or only one processor<br />
at a time), whereas user-mode code may be executed in any combination of processors.<br />
Multiprocessing systems are often easier to design if such restrictions are<br />
imposed, but they tend to be less efficient than systems in which all CPUs are<br />
utilized equally.<br />
Systems that treat all CPUs equally are called symmetric multiprocessing<br />
(SMP) systems. In systems where all CPUs are not equal, system resources may be<br />
8
divided in a number of ways, including asymmetric multiprocessing (ASMP), nonuniform<br />
memory access (NUMA) multiprocessing, and clustered multiprocessing<br />
(qq.v.).<br />
Těsnost spojení multiprocesorů<br />
• Tightly-coupled multiprocessor systems contain multiple CPUs that are connected<br />
at the bus level. These CPUs may have access to a central shared memory<br />
(SMP or UMA), or may participate in a memory hierarchy with both<br />
local and shared memory (NUMA). The IBM p690 Regatta is an example of<br />
a high end SMP system. Intel Xeon processors dominated the multiprocessor<br />
market for business PCs and were the only x86 option till the release of AMD’s<br />
Opteron range of processors in 2004. Both ranges of processors had their own<br />
onboard cache but provided access to shared memory; the Xeon processors via<br />
a common pipe and the Opteron processors via independent pathways to the<br />
system RAM.<br />
• Chip multiprocessors, also known as multi-core computing, involves more<br />
than one processor placed on a single chip and can be thought of the most<br />
extreme form of tightly-coupled multiprocessing. Mainframe systems with multiple<br />
processors are often tightly-coupled.<br />
• Loosely-coupled multiprocessor systems (often referred to as clusters) are<br />
based on multiple standalone single or dual processor commodity computers<br />
interconnected via a high speed communication system (Gigabit Ethernet is<br />
common). A Linux Beowulf cluster is an example of a loosely-coupled system.<br />
Tightly-coupled systems perform better and are physically smaller than looselycoupled<br />
systems, but have historically required greater initial investments and may<br />
depreciate rapidly; nodes in a loosely-coupled system are usually inexpensive commodity<br />
computers and can be recycled as independent machines upon retirement<br />
from the cluster.<br />
SMP (Symmetric Multiprocessing): viac procesorov so zdieľanou operačnou<br />
pamäťou (nutné mechanizmy na zabránenie nesprávnych náhľadov na pamäť a<br />
migráciu procesov medzi procesormi). SMP systems allow any processor to work<br />
on any task no matter where the data for that task are located in memory; with<br />
proper operating system support, SMP systems can easily move tasks between<br />
processors to balance the workload efficiently.<br />
5.3 Vstupní a výstupní zařízení<br />
K I/O zařízením je možné přistupovat dvěma způsoby: pomocí portů (speciální<br />
adresový port CPU) nebo pamětovým mapováním (namapování do fyzické paměti).<br />
Zařízení mají různé charakteristiky:<br />
• druh – blokové (disk, síťová karta), znakové (klávesnice, myš)<br />
• přístup – sekvenční (datová páska), náhodný (hdd, cd)<br />
9
• komunikace – synchronní (pracuje s daty na žádost – disk), asynchronní<br />
(„nevyžádaná� data – síťová karta)<br />
• sdílení – sdílené (preemptivní, lze odebrat – síťová karta (po multiplexu OS)),<br />
vyhrazené (nepreemptivní – tiskárna, sdílení se realizuje přes spooling). Reálně<br />
se rozdíly stírají.<br />
• rychlost (od několika Bps po GBps)<br />
• směr dat – R/W, R/O (CD-ROM), W/O (tiskárna)<br />
Přenos dat mezi zařízením a CPU/pamětí:<br />
• polling – aktivní čekání na změnu zařízení, přenos provádí CPU<br />
• přerušení – asynchronní přerušení od zařízení, přenos provádí CPU<br />
• DMA (Direct Memory Access) – zařízení si samo řídí přístup na sběrnici<br />
a přenáší data z/do paměti; po skončení přenosu přerušení (oznámení o<br />
dokončení)<br />
Cíle I/O software:<br />
• Nezávislost zařízení – programy nemusí dopředu vědět, s jakým přesně zařízením<br />
budou pracovat – je jedno jestli pracuji se souborem na pevném disku,<br />
disketě nebo na CD-ROM<br />
• Jednotné pojmenování (na UNIXu /dev)<br />
• Připojení (mount) – časté u vyměnitelných zařízení (disketa); možné i u<br />
pevných zařízení (disk); nutné pro správnou funkci cache OS<br />
• Obsluha chyb – v mnoha případech oprava bez vědomí uživatele (velmi často<br />
způsobeno právě uživatelem)<br />
5.4 Architektury OS<br />
Klasická struktura – monolitická<br />
Nejstarší, už IBM 360, Unix, Win., všechny služby uvnitř, prováděny ve chráněném<br />
módu, jádro poměrně velké, „údajně� nejrychlejší. Program zavolá službu OS, přes<br />
tabulku se zjistí adresa přísl. fce, ta se zavolá a vrátí výsledek. Nevýhoda: horší<br />
údržba – je-li v programu chyba, může poškodit zbývající části systému, rozšiřování<br />
za běhu je komplikované.<br />
Virtuální stroje<br />
Původní nápad : Virtual Machine pro IBM360 – oddělit multitasking od OS jako<br />
ext. stroj. Nad HW byla další vrstva – „Virtual Machine� – měla plánovat, vyrábí<br />
pro procesy iluzi holého HW; dneska např. VMWare dělá to samé. Pro IBM360 se<br />
dalo použít v kombinaci s CMS (jednoúlohový) i původního OS360 (rychlejší než<br />
OS360 na holém HW).<br />
Dnes: definuji abstraktní stroj, pro něj překládám programy (.NET, Java) →<br />
přenositelnost, kompatibilita (IBM AS400 – desítky let), problém – pomalé.<br />
10
Mikrojádro<br />
snaha aby část běžící v kernel módu byla co nejmenší (třeba jen cca 10 KB),<br />
nejnovější, experimentální, často pro Distribuované OS (dnes už nepoužívané),<br />
hodně procesů & komunikace (klient/server), mikrojádro řeší jenom komunikaci.<br />
Filesystém apod. jsou procesy – aplikace jim posílají přes jádro požadavky.<br />
Jediný komerční OS – Chorus (ústředny). výhoda: když něco spadne, nepoškodí to<br />
zbytek, moduly jdou měnit za běhu, komunikace jde snadno rozšířit na komunikaci<br />
po síti.<br />
Architektura WinNT<br />
Jádro je poměrně malé (cca 1MB), schopné (pro vyšší vrstvy jsou některé schopnosti<br />
skryté), na jeho vzniku se podíleli schopní Unixáři. Byla zde snaha o malou<br />
velikost, přenositelnost. Jádro je neutrální vzhledem k vyšším vrstvám, nad ním<br />
lze vybudovat různé systémy (Windows subsystém, POSIX, OS/2).<br />
Rozhraní OS a uživ. programů zajišťuje WinAPI, nad ním se nacházejí různé<br />
DLL, mezi kernelem a HW je „hardware abstraction layer�, tj. kernel lze jednoduše<br />
upravit pro jiné architektury (Alpha, IA-64). Grafické drivery jediné mají přímý<br />
přístup k HW (kvůli výkonu), části API (USER, GDI) jsou implementované v<br />
jádře, přechod mezi user a kernel režimem zajišťuje ntdll.dll (a je tedy využíván<br />
všemi programy). Veškeré služby a aplikace běží v user módu nad jádrem.<br />
Architektura Linuxu<br />
• Na úrovni SW – přenositelnost; abstrakce HW.<br />
• nad HW – kernel, nad ním systémová volání, hodně podobné Windows.<br />
11
5.5 Procesy, vlákna, plánování<br />
Procesy a vlákna<br />
Systémové volání je interface mezi OS (kernelspace) a užívatelskými programy (userspace).<br />
Definice (Proces)<br />
Proces je inštancia vykonávaného programu. Kým program je len súbor inštrukcií,<br />
proces je vlastný „výkon� týchto inštrukcií. Proces má vlastný adresný priestor<br />
(pamäť), prostriedky, práva a napr. aj ID (Process ID).<br />
Počas života sa môže proces nachádzať v rôznych stavoch:<br />
• bežiaci – jeden proces na procesor,<br />
• blokovaný – pri použití blokujúceho volania – I/O disku atď.,<br />
• pripravený – skončilo blokovanie; spotreboval všetok pridelený čas resp. vrátil<br />
riadenie systému, čaká na nové pridelenie procesora,<br />
• zombie – po ukončení procesu, keď už nepracuje – ale ešte nebol vymazaný.<br />
Definice (Vlákno)<br />
Vlákno je možnosť pre program ako sa „rozdeliť� na dva alebo viac zároveň (resp.<br />
pseudo-zároveň) vykonávaných úloh. Oproti procesu mu nie je pridelená vlastná<br />
pamäť – je to len miesto vykonávania inštrukcií v programe. Oproti procesu sú<br />
jeho „atribútmi� len hodnota programového čítača, stav registrov CPU a zásobník.<br />
Oproti Windows/Solaris neobsahuje Linux priamu podporu pre vlákna. Miesto<br />
toho podporuje procesy (zhodou okolností :-)) zdieľajúce pamäť. V samotnom jadre<br />
linuxu ale vlákna existujú (kthreads).<br />
Plánovanie<br />
Prideľovanie procesorového času jednotlivým procesom má na starosti plánovač.<br />
Plánovanie pritom môže byť preemptívne alebo nepreemptívne (kooperatívne – alla<br />
Win16).<br />
Ciele plánovania (niektoré z nich sú očividne protichodné):<br />
• Spravodlivosť (každy procesor dostane adekvátnu časť času CPU)<br />
• Efektívnosť (plne vyťažený procesor)<br />
• Minimálna doba odpovede<br />
• Průchodnost (maximálny počet spracovaných procesov)<br />
• Minimálna réžia systému<br />
Kritériá plánovania:<br />
• Viazanosť procesu na dané CPU a I/O (presun procesu na iný procesor zaberie<br />
veľa prostriedkov)<br />
• Proces je dávkovy/interaktívny?<br />
• Priorita procesu (statická (nemenná – okrem „renice�) + dynamická, ktorá sa<br />
mení v čase kvôli spravodlivosti)<br />
12
• Ako často proces generuje výpadky stránok (nejaký popis???)<br />
• Kolik skutočného času CPU proces obdržel<br />
Algoritmy:<br />
• FIFO: nepreemptívny, proces opustí procesor až po skončení<br />
• Round Robin: preemptívne rozšírenie FIFO, po skončení časového kvanta je<br />
proces presunutý na koniec fronty<br />
• Plánovanie s viacerými frontami: niekoľko front, procesu z i-tej fronty<br />
je pridelený procesor až keď vo frontách 1, . . . , i − 1 nie je pripravený ziadny<br />
proces. Ak proces skončil I/O operáciou, je blokovaný a presunutý do fronty<br />
i − 1, ak skončil preempciou, je pripravený a presunutý do fronty i + 1.<br />
• SMP: fronta CPU čakajúcich na pripravené procesy (aktívne (spotrebováva<br />
energiu) vs. pasívne čakanie (špeciálne inštrukcie)), „vzťah�/afinita procesov<br />
k CPU<br />
• TODO: Plánovanie windows vs. linux???<br />
5.6 Synchronizační primitiva, vzájemné vyloučení<br />
Pojmy<br />
Race conditions: výsledek operace závisí na plánování<br />
Vzájemné vyloučení (mutual exclusion): kritickou operaci provádí nejvýše jeden<br />
proces. Podmínky vzájemného vyloučení:<br />
1. Žádné dva procesy nemohou být najednou ve stejné kritické sekci<br />
2. Nemohou být učiněny žádné předpoklady o rychlosti nebo počtu CPU<br />
3. Žádný proces mimo kritickou sekci nesmí blokovat jiný proces<br />
4. Žádný proces nesmí čekat nekonečně dlouho v kritické sekci<br />
Kritická sekce: část programu, kde se provádí kritická operace<br />
Metody dosáhnutí vzájemného vyloučení: aktivní čekání (busy waiting) a pasivní<br />
čekání/blokování.<br />
Aktivní čekání<br />
Vlastnosti: spotřebovává čas procesoru, vhodnější pro předpokládané krátké doby<br />
čekání, nespotřebovává prostředky OS, rychlejší.<br />
Je možné použít např. zakázání přerušení (vhodné pro jádro OS). Používání<br />
zámků nefunguje:<br />
int lock;<br />
void proc(void) {<br />
for (;;) {<br />
nekritická_sekce();<br />
while (lock != 0);<br />
13
}<br />
}<br />
lock = 1;<br />
kritická_sekce();<br />
lock = 0;<br />
ale důsledné střídání ano (to ale porušuje podmínku 3.)<br />
int turn = 0;<br />
void p1(void) void p2(void)<br />
{ {<br />
for (;;) { for (;;) {<br />
while (turn != 0); while (turn != 1);<br />
kritická_sekce(); kritická_sekce();<br />
turn = 1; turn = 0;<br />
nekritická_sekce(); nekritická_sekce();<br />
} }<br />
} }<br />
Petersonovo řešení:<br />
#define N 2 /* počet procesů */<br />
int turn;<br />
int interested[N]; /* kdo má zájem */<br />
void enter_region(int proc) { /* proc: kdo vstupuje */<br />
int other;<br />
}<br />
other = 1-proc; /* číslo opačného procesu */<br />
interested[proc] = TRUE; /* mám zájem o vstup */<br />
turn = proc; /* nastav příznak */<br />
while (turn == proc && interested[other] == TRUE);<br />
void leave_region(int proc) { /* proc: kdo vystupuje */<br />
interested[proc] = FALSE; /* už odcházím */<br />
}<br />
Instrukce TSL (spin-lock) - je nutné aby ji podporoval HW (všechny současné<br />
procesory nějakou mají):<br />
enter_region:<br />
tsl R,lock ; načti zámek do registru R a<br />
; nastav zámek na 1<br />
cmp R,#0 ; byl zámek nulový?<br />
jnz enter_region ; byl-li nenulový, znova<br />
14
et ; návrat k volajícímu - vstup do<br />
; kritické sekce<br />
leave_region:<br />
mov lock,#0 ; ulož do zámku 0<br />
ret ; návrat k volajícímu<br />
Pasivní čekání<br />
Vlastnosti: proces je ve stavu blokován, vhodné pro delší doby čekání, spotřebovává<br />
prostředky OS, pomalejší.<br />
Postup používající Sleep/Wakeup (implementovány OS, atomické operace - sleep<br />
uspí volající proces, wakeup probudí udaný proces) nefunguje (viď Problém producent/konzument).<br />
Semafory... Sémantika:<br />
Down(Semaphore s) {<br />
wait until s > 0, then s := s-1;<br />
/* must be atomic once s > 0 is detected */<br />
}<br />
(pokud je čítač > 0, sníží čítač o 1 a pokračuje dál; pokud je čítač = 0, operace<br />
DOWN se zablokuje a proces je přidán do fronty čekající na tomto semaforu)<br />
Up(Semaphore s) {<br />
s := s+1; /* must be atomic */<br />
}<br />
(pokud je fronta neprázdná, vybere libovolný proces a ten probudí za DOWN; jinak<br />
zvětší čítač o 1)<br />
Init(Semaphore s, Integer v) {<br />
s := v;<br />
}<br />
Je možné „používať� aj sémantiku, kde sa hodnota vždy zníži/zvýši o 1 (a je<br />
možné sa teda dostať do záporných hodnôt semafóru)... Špeciálny (binárny) typ<br />
semaforu, kde sú povolené len hodnoty 0 a 1 (v Up sa miesto s := s + 1 volá s := 1)<br />
sa nazýva mutex a používa sa na riadenie prístupu k jednej premennej.<br />
Monitory<br />
Implementovány překladačem, lze si představit jako třídu C++ (všechny proměnné<br />
privátní, funkce mohou být i veřejné), vzájemné vyloučení v jedné instanci<br />
(zajištěno synchronizací na vstupu a výstupu do/z veřejných funkcí, synchronizace<br />
implementována blokovacím primitivem OS). ???TODO<br />
Zprávy<br />
Operace SEND a RECEIVE, zablokování odesílatele/příjemce, adresace proces/mailbox,<br />
rendez-vous...<br />
RWL - read-write lock, bariéry...<br />
Ekvivalence primitiv - pomocí jednoho blokovacího primitiva lze implementovat<br />
jiné blokovací primitivum.<br />
Rozdíly mezi platformami: Windows - jednotné funkce pro pasivní čekání, čekání<br />
na více primitiv, timeouty. Unix - OS implementuje semafor, knihovna pthread.<br />
15
Klasické synchronizační problémy<br />
Problém producent/konzument<br />
Producent vyrába predmety, konzument ich spotrebúva. Medzi nimi je sklad<br />
pevnej veľkosti (N). Konzument nemá čo spotrebúvať ak je sklad prázdny; producent<br />
prestane vyrábať, ak je sklad plný.<br />
int N = 100;<br />
int count = 0;<br />
void producer(void) {<br />
int item;<br />
while(TRUE) {<br />
produce_item(&item);<br />
if(count==N) sleep ();<br />
enter_item(item);<br />
count++;<br />
if(count == 1) wake(consumer);<br />
}<br />
}<br />
void consumer(void) {<br />
int item;<br />
while(TRUE) {<br />
if(count==0) sleep ();<br />
remove_item(&item);<br />
count--;<br />
if(count==N-1)<br />
wake(producer);<br />
consume_item(&item);<br />
}<br />
}<br />
1. Buffer je prázdny, a konzument práve prečítal count, aby zistil, či je rovný nule<br />
2. Preplánovanie na producenta<br />
3. Producent vytvorí item a zvýši count<br />
4. Producent zistí, či je count rovný jednej. Zistí že áno, čo znamená že konzument<br />
bol predtým zablokovaný (pretože muselo byť 0), a zavolá wakeup<br />
5. Teraz môže dôjsť k zablokovaniu: konzument sa uspí, pretože si myslí, že nemá<br />
čo zobrať; producent bude chvíľu produkovať a dôjde ”preplneniu” ⇒ uspí sa;<br />
spí producent aj konzument :o)<br />
Problém obědvajících filosofů<br />
Pět filosofů sedí okolo kulatého stolu. Každý filosof má před sebou talíř špaget a<br />
jednu vidličku. Špagety jsou bohužel slizké a je třeba je jíst dvěma vidličkami. Život<br />
filosofa sestává z období jídla a období přemýšlení. Když dostane hlad, pokusí se<br />
vzít dvě vidličky, když se mu to podaří, nají se a vidličky odloží.<br />
Problém ospalého holiče<br />
Holič má ve své oficíně křeslo na holení zákazníka a pevný počet sedaček pro<br />
čekající zákazníky. Pokud v oficíně nikdo není, holič se posadí a spí. Pokud přijde<br />
16
první zákazník a holič spí, probudí se a posadí si zákazníka do křesla. Pokud přijde<br />
zákazník a holič už střihá a je volné místo v čekárně, posadí se, jinak odejde.<br />
5.7 Zablokování a zotavení z něj<br />
Prostředek je cokoliv, k čemu je potřeba hlídat přístup (HW zařízení – tiskárny,<br />
cpu; informace – záznamy v DB). Je možné je rozdělit na odnímatelné (lze odejmout<br />
procesu bez následků – CPU, paměť) a neodnímatelné (nelze odejmnout bez<br />
nebezpečí selhání výpočtu – CD-ROM, tiskárna... tento druh způsobuje problémy).<br />
Práce s prostředky probíhá v několika krocích: žádost o prostředek (blokující,<br />
právě tady dochází k zablokování), používání (např. tisk), odevzdání (dobrovolné/při<br />
skončení procesu).<br />
Množina procesů je zablokována, jestliže každý proces z této množiny čeká na<br />
událost, kterou může způsobit pouze jiný proces z této množiny.<br />
Coffmanovy podmínky<br />
Splnenie týchto podmienok je nutné pre zablokovanie:<br />
1. Vzájemné vyloučení – každý prostředek je buď vlastněn právě jedním procesem<br />
nebo je volný.<br />
2. Drž a čekej – procesy aktuálně vlastnící nějaké prostředky mohou žádat o<br />
další.<br />
3. Neodnímatelnost – přidělené prostředky nemohou být procesům odebrány.<br />
4. Čekání do kruhu – existuje kruhový řetěz procesů, kde každý z nich čeká na<br />
prostředek vlastněný dalším článkem řetězu.<br />
Řešení zablokování<br />
• Pštrosí algoritmus – Zablokování se ani nedetekuje, ani se mu nezabraňuje,<br />
ani se neodstraňuje, Uživatel sám rozhodne o řešení (kill). Nespotřebovává<br />
prostředky OS – nemá režii ani neomezuje podmínky provozu. (Nejčastější<br />
řešení – Unix, Windows)<br />
• Detekce a zotavení – Hledá kružnici v orientovaném grafu (hrany vedou<br />
od procesu, který čeká, k procesu, který prostředek vlastní), pokud tam je<br />
kružnice, nastalo zablokování a je třeba ho řešit:<br />
– Odebrání prostředku – dohled operátora, pouze na přechodnou dobu<br />
– Zabíjení procesů z cyklu (resp. mimo cyklus vlastnící identický prostředek)<br />
– Rollback (OS ukládá stav procesů, při zablokování se některé procesy<br />
vrátí do předchozího stavu ⇒ ztracena práce... obdoba u DB)<br />
• Vyhýbání se – Bezpečný stav (procesy/prostředky nejsou zablokovány, existuje<br />
cesta, jak uspokojit všechny požadavky na prostředky spouštěním procesů<br />
v jistém pořadí); Viď. bankéřův algoritmus. Nutné je předem znát všechny<br />
prostředky, které budou programy potřebovat; OS pak dává prostředky tomu,<br />
který je nejblíž svému maximu potřeby a navíc pro který je prostředků dost<br />
na dokončení. Dnes se moc nepoužívá.<br />
17
• Předcházení (prevence) – napadení jedné z Coffmanovy podmínek<br />
1. Vzájemné vyloučení – spooling (prostriedky spravuje jeden systemový<br />
proces, ktory dohliada na to, aby jeho stav bol konzistentny (tiskarna) –<br />
pozor na místo na disku)<br />
2. Drž a čekej – žádat o všechny prostředky před startem procesu. Nejprve<br />
všechno uvolnit a pak znovu žádat o všechny najednou<br />
3. Neodnímatelnost – vede k chaosu<br />
4. Čekání do kruhu – nejvýše jeden prostředek – všechny prostředky jednoznačně<br />
očíslovány, procesy mohou žádat o prostředky jen ve vzestupném<br />
pořadí<br />
• Dvojfázové zamykání – nejprve postupně všechno zamykám (první fáze). Potom<br />
se může pracovat se zamčenými prostředky – a na závěr se už jen odemyká<br />
(druhá fáze) – viď transakční spracování u databází ((striktní/konzervativní)<br />
dvoufázové zpracování)<br />
Bankéřův algoritmus: Bankéř má klienty a těm slíbil jistou výšku úvěru. Bankéř<br />
ví, že ne všichni klienti potřebují plnou výši úvěru najednou. Klienti občas navštíví<br />
banku a žádají postupně o prostředky do maximální výšky úvěru. Až klient<br />
skončí s obchodem, vrátí bance vypůjčené peníze. Bankéř peníze půjčí pouze tehdy,<br />
zůstane-li banka v bezpečném stavu.<br />
5.8 Organizace paměti, alokační algoritmy<br />
Hierarchie paměti (směrem odshora dolů roste velikost, cena na bajt a rychlost<br />
klesá – a naopak. . . ):<br />
• registry CPU — 10ky-100vky bajtů (IA-32: obecné registy pár 10tek), IA-64 –<br />
až kB (extrém), stejně rychlé jako CPU.<br />
• cache — z pohledu aplikací není přímo adresovatelná; dnes řádově MB, rozdělení<br />
podle účelu, několik vrstev. L1 cache (cca 10ky kB) – dělené instrukce/data;<br />
L2 (cca MB) sdílené instr&data, běží na rychlosti CPU (dřív bývala pomalejší),<br />
servery – L3 (cca 10MB). Vyrovnává rozdíl rychlosti CPU a RAM.<br />
Využívá lokality programů – cyklení na místě; sekvenčního přístupu k datům.<br />
Pokud nenajdu co chci v cache – „cache-miss�, načítá se potřebné z RAM (po<br />
blocích), jinak (v 95-7% případů) nastane „cache-hit�, tj. požadovaná data v<br />
cache opravdu jsou a do RAM nemusím.<br />
• hlavní paměť (RAM) — přímo adresovatelná procesorem, 100MB – GB; pomalejší<br />
než CPU; CAS – doba přístupu na urč. místo – nejvíc zdržuje (v 1<br />
sloupci už čte rychle, dat. tok dostatečný), další – latence – doba než data<br />
dotečou do CPU – hraje roli vzdálenost (AMD- integrovaný řadič v CPU)<br />
• pomocná paměť — není přímo adresovatelná, typicky HDD; náh. přístup, ale<br />
pomalejší. 100GB, různé druhy – IDE, SATA, SCSI; nejvíc zdržuje přístupová<br />
doba (čas seeku) cca 2-10ms; obvykle sektor – 512 B; roli hraje i rychlost<br />
otáčení (4200 – 15000 RPM) – taky řádově ms.<br />
• zálohovací paměť — nejpomalejší, z teorie největší, dnes ale neplatí; typicky –<br />
pásky; pro větší kapacitu – autoloadery ; sekvenční přístup; dnes – kvůli rychlosti<br />
často zálohování RAIDem.<br />
18
Správce paměti: část OS, která spravuje paměťovou hierarchii se nazývá<br />
správce paměti (memory manager):<br />
• udržuje informace o volné/plné části paměti<br />
• stará se o přidělování paměti<br />
• a „výměnu paměti s diskem�<br />
Přiřazení adresy<br />
• při překladu (je již známo umístění procesu, generuje se absolutní kód, PS:<br />
statické linkování)<br />
• při zavádění (OS rozhodne o umístění – generuje se kód s relokacemi, PS:<br />
dynamické linkování)<br />
• za běhu (proces se může stěhovat i za běhu, relokační registr)<br />
Overlay – Proces potřebuje více paměti než je skutečně k dispozici. Programátor<br />
tedy rozdělí program na nezávislé části (které s v paměti podle potřeby vyměňnují)<br />
a část nezbytnou pro všechny části. . .<br />
Výměna (swapping) – dělá se, protože proces musí být v hlavní paměti, aby<br />
jeho instrukce mohly být vykonávány procesorem... Jde o výměnu obsahu paměti<br />
mezi hlavní a záložní.<br />
Překlad adresy – nutný, protože proces pracuje v logickém (virtuálním) adresovém<br />
prostoru, ale HW pracuje s fyzickým adresovým prostorem...<br />
Spojité přidělování – přidělení jednoho bloku / více pamětových oddílů (pevně –<br />
paměť pevně rozdělena na části pro různé velikosti bloků/volně – v libovolné části<br />
volné paměti může být alokován libovolně veliký blok)<br />
Informace o obsazení paměti – bitová mapa / spojový seznam volných bloků<br />
(spojování uvolněného bloku se sousedy)<br />
Alokační algoritmy:<br />
• First-fit – první volný dostatečné velikosti – rychlý, občas ale rozdělí velkou<br />
díru<br />
• Next-fit – další volný dostatečné velikosti – jako First-fit, ale rychlejší<br />
• Best-fit – nejmenší volný dostatečné velikosti – pomalý (prohledává celý seznam),<br />
zanechává malinké díry (ale nechává velké díry vcelku)<br />
• Worst-fit – největší volný – pomalý (prohledává celý seznam), rozdělí velké<br />
díry<br />
• Buddy systém – paměť rozdělena na bloky o velikosti 2 n , bloky stejné velikosti<br />
v seznamu, při přidělení zaokrouhlit na nejbližší 2 n , pokud není volný, rozštípnou<br />
se větší bloky na příslušné menší velikosti, při uvolnění paměti se slučují<br />
sousední bloky (buddy)<br />
Fragmentace paměti:<br />
• externí – volný prostor rozdělen na malé kousky, pravidlo 50% – po nějaké<br />
době běhu programu bude cca 50% paměti fragmentováno a u toho to zůstává<br />
• interní – nevyužití celého přiděleného prostoru<br />
• sesypání – pouze při přiřazení adresy za běhu, nebo segmentaci – nelze při<br />
statickém přidělení adresy<br />
19
5.9 Principy virtuální paměti, stránkování, algoritmy pro<br />
výměnu stránek, výpadek stránky, stránkovací tabulky,<br />
segmentace<br />
Virtuální paměť<br />
• procesy pracují s virtuální adresou<br />
• mapování adresy na fyzickou - mapovací tabulky<br />
• obraz virtuální paměti (VAP) částečně v RAM a částečně na disku<br />
• dříve iluze větší paměti, dnes hlavně ochrana přístupu<br />
• stránkování / segmentace<br />
Stránkování<br />
podporované všemi velkými CPU a OS, jednorozměrný VAP<br />
• VAP rozdělen na stránky (velikost je mocnina 2), FAP na rámce (úseky stejné<br />
délky)<br />
• převod stránkovací tabulkou, příznak existence mapování (výpadek stránky →<br />
synchronní přerušení)<br />
• umožnuje oddělené VAP i sdílenou paměť - mapování virtuální stránky 2 procesů<br />
na jednu fyzickou<br />
• víceúrovňové stránkování (např. kvůli velikosti)<br />
20
• TLB (Translation Lookaside Buffer) - asociativní paměť sloužící na rychlé<br />
vyhledání mapování virtuální stránky na fyzickou, využívá lokalitu chování<br />
programů<br />
...nulaúrovňové stránkování - používá pouze TLB, řízeno také OS (oblíbené u<br />
64-bitových CPU - UltraSPARC III)<br />
• inverzní stránkování (např. když FAP je menší než VAP, 64-bitové CPU -<br />
IA-64)<br />
Akce vykonávané při výpadku stránky:<br />
• výjimka procesoru<br />
• uložit stav CPU (kontext)<br />
• zjistit VA<br />
• kontrola platnosti adresy a práv<br />
• nalezení volného rámce<br />
• zrušit mapování na nalezený rámec<br />
• pokud je vyhazovaný rámec vyhazován, spustit ukládání na disk<br />
• načíst z disku požadovanou stránku do rámce<br />
• zavést mapování<br />
• obnovit kontext<br />
Při implementaci stránkování je nutno brat v úvahu:<br />
• znovuspuštění instrukce — je potřeba aby procesor po výpadku zkusil přístup<br />
do paměti znova. dnes umí všechny CPU, např. 68xxx - problémy (přerušení<br />
v půlce instrukce)<br />
21
• sdílení stránek — jednomu rámci odp. víc stránek → pokud s ním něco dělám,<br />
týká se to všech stránek! musím vše ost. odmapovat. musím si pamatovat<br />
mapování pro každý rámec - obrácené tabulky.<br />
• odstranění položky z TLB při rušení mapování — nestačí změnit tabulky, musí<br />
se vyhodit i z TLB (kde to může, ale nemusí být). problém - u multiprocesorů<br />
má každá CPU vlastní TLB, tabulky jsou sdílené → CPU při rušení mapování<br />
musí poslat interrupt s rozkazem ke smazání všem (i sobě), počkat na potvrzení<br />
akce od všech.<br />
Algoritmy pro výměnu stránek<br />
• Optimální stránka (v okamžiku výpadku stránky vybírám stránku, na níž<br />
se přistoupí za největší počet instrukcí) - nelze implementovat<br />
• NRU (Not Recently Used) - každá stránka má příznaky Accessed a Dirty<br />
(typicky implementovatelné v HW, možno simulovat SW); jednou za čas se<br />
smažou všechna A; při výpadku rozdělím stránky podle A,D a vyberu stránku<br />
z nejnižší neprázdné třídy:<br />
A D<br />
0 0 0<br />
1 0 1<br />
2 1 0<br />
3 1 1<br />
• FIFO (vykazuje anomálie - Belady (zvětšení počtu výpadků stránky, když<br />
zvýšíme počet stránek v paměti)), druhá šance (úprava FIFO; pokud A=1,<br />
zařadím na konec FIFO... nevykazuje anomálie)<br />
• Hodiny - modifikace druhé šance: kruhový zoznam stránek + iterátor na<br />
ukazující na nejstarší stránku v zoznamu. Při výpadku (a neexistenci volého<br />
rámce) se zjistí, jestli má *iterator nastavený příznak Accessed. Jestli ne, tato<br />
stránka bude nahrazena - v opačném případě se Accessed příznak zruší a iterator++.<br />
Toto se opakuje, dokud nedojde k výměně. . .<br />
• LRU (Least Recently Used) - často používané stránky v posledním krátkém<br />
časovém úšeku budou znovu použity, čítač použití stránek, možné implementovat<br />
v HW<br />
• NFU (Not Frequently Used) - SW simulace LRU, SW čítač ke každé stránce;<br />
jednou za čas projdu všechna A a přičtu je k odpovídajícím čítačům; vybírám<br />
stránku s nejnižším čítačem; nezapomíná - je možná modifikace se stárnutím<br />
čítače<br />
Segmentace<br />
dnes pouze Intel IA-32, dvojrozměrný VAP<br />
• rozdělení programu na segmenty (napr. podle částí s různými vlastnostmi -<br />
kód, data, zásobníky. . . ), různé délky segmentů, ktoré můžou měnit svoji délku<br />
za běhu<br />
22
• VAP dvourozměrný (segment, offset), FAP jednorozměrný (vyzerá jako při<br />
spojitém pridělování paměti)<br />
• segmentová převodní tabulka (VA se skládá ze dvou častí S:D, v tabulce se<br />
najde adresa segmentu S. . . k této adrese se poté přičte D, co je umístnění<br />
adresy v FA), příznak existence mapování<br />
• při výpadku je nutné měnit celý segment (ty mohou být velké), je možné<br />
segmenty sesypat - ale nelze mít segment větší než FAP<br />
Segmentaci je možné kombinovat se stránkováním (odstraňuje nevýhody segmentace,<br />
neprovádí se výpadky segmentů):<br />
5.10 Systémy souborů, adresářové struktury<br />
Definice (soubor)<br />
Soubor je pojmenovaná množina souvisejících informací, která leží v pomocné<br />
paměti (na disku).<br />
Soubor je abstrakce, která umožňuje uložit informaci na disk a později ji přečíst.<br />
Abstrakce odstiňuje uživatele od podrobností práce s disky.<br />
Soubory<br />
• pojmenování souboru (umožňuje uživateli přístup k jeho datům; přesná pravidla<br />
pojmenování určuje OS - malá vs. velká písmenka, speciální znaky, délka<br />
jména, přípony a jejich význam)<br />
• atributy souborů (opět určuje OS) - jméno, typ, umístění, velikost, ochrana,<br />
časy, vlastník, . . .<br />
• struktura souborů - sekvence bajtů / sekvence záznamů / strom<br />
• typy souborů - běžné soubory, adresáře (systémové soubory vytvářející strukturu<br />
souborového systému), speciální soubory (znakové/blokové, soft linky)<br />
• přístup<br />
– sekvenční – pohyb pouze vpřed, OS může přednačítat<br />
– náhodný – možno měnit aktuální pozici<br />
– paměťově mapované soubory – pojmenovaná virtuální paměť, práce<br />
se souborem instrukcemi pro práci s pamětí, ušetří se kopírování pamětí;<br />
23
mají i problémy (přesná velikost souboru, zvětšování souboru, velikost<br />
souborů)<br />
• volné místo na disku - bitmapa / spojový seznam volných bloků<br />
Uložení souborů<br />
Soubory se ukládají na disk po blocích<br />
• souvislá alokace - souvislý sled bloků<br />
• spojovaná alokace - blok odkazuje na další<br />
• indexová alokace - inode (UNIX)<br />
Adresáře<br />
• zvláštní typ souboru<br />
• operace nad adresáři - hledání souboru / vypsání adresáře / přejmenování,<br />
vytvoření, smazání souboru<br />
• kořen, aktuální adresář, absolutní/relativní cesta<br />
• hierarchická struktura<br />
– strom – jednoznačné pojmenování (cesta)<br />
– DAG – víceznačné pojmenování, ale nejsou cykly<br />
– obecný graf – cykly vytváří problém při prohledávání<br />
• implementace adresářů - záznamy pevné velikosti, spojový seznam, B-stromy<br />
Co musí filesystém umět?<br />
musí splňovat 3 věci: správu souborů (kde jsou, jak velké), správu adresářů (převod<br />
jméno ↔ id) (někdy to dělá jiný prostředek, dnes větš. umí FS sám), správu<br />
volného místa. někdy mohou být i další (odolnost proti výpadkům)<br />
Velikost bloků – blok = nejmenší jednotka pro práci s diskem; disk pracuje s<br />
min. 1 sektorem (typicky 512 B) - někdy by pak bylo moc bloků → OS sdruží<br />
několik sektorů lineáně vedle sebe = 1 blok. velikost: velké = rychlejší práce,<br />
ale vnitřní fragmentace (průměrný soubor má cca pár KB), malé = malá vnitřní<br />
fragmentace, větší režie na info o volném místě/ umístění souboru (zabírá víc<br />
bloků!), navíc fragmentace souborů → zpomalení. dnes má blok cca 2-4KB.<br />
Linky<br />
• Hard link – Na jedna data souboru se odkazuje z různých položek v adresářích<br />
• Soft link – Speciální soubor, který obsahuje jméno souboru<br />
Příklady<br />
• FAT – http://en.wikipedia.org/wiki/File_Allocation_Table<br />
• NTFS – charakteristika, MFT (Master File Table), run list<br />
http://www.digit-life.com/articles/ntfs/<br />
http://www.pcguide.com/ref/hdd/file/ntfs/archSector-c.html<br />
24
• ext2/ext3 – struktura, inode, žurnál<br />
http://www.science.unitn.it/~fiorella/guidelinux/tlk/node95.html<br />
http://www.linux-security.cn/ebooks/ulk3-html/0596005652/understandlk-CHP-18.<br />
html<br />
Plánování pohybu hlav disků<br />
• FCFS (First-Come, First-Served) - žádné plánování, fronta požadavků, jeden<br />
za druhým<br />
• SSTF (Shortest Seek Time First) - krajní žádosti mohou ”hladovět”<br />
• LOOK (výtah), C-LOOK (circular LOOK) - pohyb jen jedním směrem, na<br />
konci otočka<br />
RAID (Redundant Array of Inexpensive Disks)<br />
• JBOD (Just a Bunch of Disks)<br />
• RAID 0 – striping, žádná redundance<br />
• RAID 1 – mirroring, redundance<br />
• RAID 0+1 – mirroring a striping<br />
• RAID 2 – 7-bitový paritní Hammingův kód<br />
• RAID 3 – 1 paritní disk, po bitech na disky<br />
• RAID 4 – 1 paritní disk a striping<br />
• RAID 5 – distribuovaná parita a striping<br />
• RAID 6 – distribuovaná parita – dvojitá P+Q, striping<br />
5.11 Bezpečnost, autentifikace, autorizace, přístupová práva<br />
Definice<br />
• Ochrana – s prostředky OS mohou pracovat pouze autorizované procesy<br />
• Autorizace – zjištění oprávněnosti požadavku<br />
• Bezpečnost – zabraňuje neautorizovaný přístup do systému<br />
• Právo – povolení/zakázání vykonávat nějakou operaci<br />
• Doména ochrany – množina párů (objekt:práva)<br />
– ACL (Access Control List) – ke každému objektu seznam práv pro<br />
uživatele/skupiny<br />
– C-list (Capability List) – ke každému uživateli/skupině seznam práv<br />
pro objekty<br />
25
Autentifikace<br />
Identifikace něčím, co uživatel ví, má nebo je.<br />
• Hesla<br />
– slovníkový útok (80–90% hesel je jednoduchých), hrubá síla<br />
– vynucování délky a složitosti hesla<br />
• Model otázka/odpověď<br />
• Fyzický objekt – smartcards, USB klíče<br />
• Biometrika – otisky prstů, rohovka, hlas<br />
TODO: autorizace, přístupová práva<br />
5.12 Architektura ISO/OSI<br />
Úvod<br />
Definice<br />
Síťový model je ucelená představa o tom, jak mají být sítě řešeny (obsahuje:<br />
počet vrstev, co má která vrstva na starosti; neobsahuje: konkrétní představu<br />
jak která vrstva plní své úkoly - tedy konkrétní protokoly). Příkladem je referenční<br />
model ISO/OSI (konkrétní protokoly vznikaly samostatně a dodatečně).<br />
Síťová architektura navíc obsahuje konkrétní protokoly - napr. rodina protokolů<br />
TCP/IP.<br />
Referenčný model ISO/OSI (International Standards Organization / Open Systems<br />
Interconnection) bol pokusom vytvoriť univerzálnu sieťovú architektúru - ale<br />
skončil ako sieťový model (bez protokolov). Pochádza zo „sveta spojov� - organizácie<br />
ISO, a bol „oficiálnym riešením�, presadzovaným „orgánmi štátu�; dnes už prakticky<br />
odpísaný - prehral v súboji s TCP/IP. ISO/OSI bol reakciou na vznik proprietárnych<br />
a uzavretých sietí. Pôvodne mal model popisovať chovanie otvorených systémov<br />
vo vnútri aj medzi sebou, ale bolo od toho upustené a nakoniec z modelu ostal len<br />
sieťový model (popis funkcionality vrstiev) a konkrétne protokoly pre RM ISO/OSI<br />
boli vyvíjané samostatne (a dodatočne zaraďované do rámca ISO/OSI).<br />
Model vznikal maximalistickým spôsobom - obsahoval všetko čo by mohlo byť<br />
v budúcnosti potrebné. Vďaka rozsiahlosti štandardu sa implementovali len jeho<br />
niektoré podmnožiny - ktoré neboli (vždy) kompatibilné. Vznikol GOSIP (Government<br />
OSI Profile) určujúci podmnožinu modelu, ktorú malo mať implementované<br />
všetko štátne sieťové vybavenie. Naproti tomu všetkému TCP/IP vzniklo naopak -<br />
najprv navrhnutím jednoduchého riešenia, potom postupným obohacovaním o nové<br />
vlastnosti (tie boli zahrnuté až po preukázaní „životaschopnosti�).<br />
7 vrstev<br />
Kritériá pri návrhu vrstiev boli napr.: rovnomerná vyťaženosť vrstiev, čo najmenšie<br />
dátové toky medzi vrstvami, možnosť prevziať už existujúce štandardy (X.25), odlišné<br />
funkcie mali patriť do odlišných vrstiev, funkcie na rovnakom stupni abstrakcie<br />
26
mali patriť do rovnakej vrstvy. Niektoré vrstvy z finálneho návrhu sa používajú málo<br />
(relačná a prezentačná), niektoré zase príliš (linková - rozpadla sa na 2 podvrstvy<br />
LLC+MAC).<br />
aplikační vrstva vrstvy orientované na podporu aplikací<br />
prezentační vrstva<br />
relační vrstva<br />
transportní vrstva přispůsobovací vrstva<br />
síťová vrstva vrstvy orientované na přenos dat<br />
linková vrstva<br />
fyzická vrstva<br />
Fyzická vrstva sa zaoberá prenosom bitov (kódovanie, modulácia, synchronizácia...)<br />
a ponúka teda služby typu pošli a príjmi bit (pričom neinterpretuje význam<br />
týchto dát). Pracuje sa tu s veličinami ako je šírka pásma, modulačná a prenosová<br />
rýchlosť.<br />
Linková vrstva prenáša vždy celé bloky dát (rámce/frames), používa pritom<br />
fyzickú vrstvu a prenos vždy funguje len k priamym susedom. Môže pracovať spoľahlivo<br />
či nespoľahlivo, prípadne poskytovať QoS/best effort. Ďalej zabezpečuje riadenie<br />
toku - zaistenie toho, aby vysielajúci nezahltil príjemcu. Delí sa na dve podvrstvy<br />
- MAC (prístup k zdieľanému médiu - rieši konflikty pri viacnásobnom prístupe k<br />
médiu) a LLC (ostatné úlohy).<br />
Sieťová vrstva prenáša pakety (packets) - fakticky ich vkladá do linkových<br />
rámcov. Zaručuje doručenie paketov až ku konečnému adresátovi (tj. zabezpečuje<br />
smerovanie). Môže používať rôzne algoritmy smerovania - ne/adaptívne, izolované,<br />
distribuované, centralizované... (v architektúre TCP/IP je to IP vrstva)<br />
Transportná vrstva zabezpečuje komunikáciu medzi koncovými účastníkmi<br />
(end-to-end) a môže meniť nespoľahlivý charakter komunikácie na spoľahlivý, menej<br />
spoľahlivý na viac spoľahlivý, nespojovaný prenos na spojovaný... Príkladom sú<br />
napr. TCP a UDP. Ďalšou úlohou je rozlišovanie jednotlivých entit (na rozdiel od<br />
napr. sieťovej vrstvy) v rámci uzlov - procesy, démony, úlohy (rozlišuje sa zväčša<br />
nepriamo - napr. v TCP/IP pomocou portov).<br />
Relačná vrstva zaisťuje vedenie relácií - šifrovanie, synchronizáciu, podporu<br />
transakcií. Je to najkritizovanejšia vrstva v ISO/OSI modele, v TCP/IP úplne<br />
chýba.<br />
Prezentačná vrstva slúži na konverziu dát, aby obe strany interpretovali dáta<br />
rovnako (napr. reálne čísla, rôzne kódovanie textov). Ďalej má na starosti konverziu<br />
dát do formátu, ktorý je možné preniesť: napr. linearizácia viacrozmerných polí,<br />
dátových štruktúr; konverzia viacbajtových položiek na jednotlivé byty (little vs. big<br />
endian). Poznámka: Zápis čísla 1234H v Big endian je [12:34:–:–] (sun, motorola), v<br />
Little endian [–:–:34:12] (intel, amd, ethernet).<br />
Aplikačná vrstva mala pôvodne obsahovať aplikácie - ale tých je veľa a nebolo<br />
možné ich štandardizovať. Teraz teda obsahuje len „jadro� aplikácií - tie, ktoré malo<br />
zmysel štandardizovať (email a pod.). Ostatné časti aplikácií (GUI) boli vysunuté<br />
nad aplikačnú vrstvu.<br />
27
Kritika<br />
Model ISO/OSI:<br />
• je príliš zložitý, ťažkopádny a obtiažne implementovateľný<br />
• je príliš maximalistický<br />
• nerešpektuje požiadavky a realitu bežnej praxe<br />
• počítal skôr s rozľahlými sieťami ako s lokálnymi<br />
• niektoré činnosti (funkcie) zbytočne opakuje na každej vrstve<br />
• jednoznačne uprednostňuje spoľahlivé a spojované prenosové služby (ale tie<br />
sú spojené s veľkou réžiou ⇒ spoľahlivosť si efektívnejšie zabezpečia koncové<br />
uzly)<br />
Možnosť nespoľahlivého/nespojovaného spojenia bolo pridané do štandardu až<br />
dodatočne, napriek tomu bol porazený architektúrou TCP/IP. Používajú sa však<br />
niektoré prevzaté prokoly - X.400 (elektronická pošta), X.500 (adresárové služby -<br />
odľahčením vznikol úspešný protokol LDAP).<br />
5.13 Rodina protokolů TCP/IP (ARP, IPv4, IPv6, ICMP,<br />
UDP, TCP) – adresace, routing, fragmentace, spolehlivost,<br />
flow control, congestion control, NAT<br />
ISO/OSI TCP/IP<br />
aplikační vrstva aplikační vrstva<br />
prezentační vrstva<br />
relační vrstva<br />
transportní vrstva transportní vrstva<br />
síťová vrstva síťová vrstva (též IP vrstva)<br />
linková vrstva vrstva síťového rozhraní<br />
fyzická vrstva<br />
Obvyklé označenie je TCP/IP protocol suite (súčasťou je viac ako 100 protokolov).<br />
Architektúra vznikla postupne (v akademickom prostredí, neskôr sa rozšírila aj<br />
do komerčnej sféry) – najprv vznikli protokoly, potom vrstvy – a od vzniku sa toho<br />
zmenilo len málo (zmeny sú aditívne). Je to najpoužívanejšia sieťová technológia (IP<br />
over everything, everything over IP). Prístup autorov bol, na rozdiel od ISO/OSI,<br />
od jednoduchšieho k zložitejšiemu – najprv sa vytvárajú jednoduché riešenia, ktoré<br />
sa postupne obohacujú. Až sa riešenie prakticky overí (2 nezávislé implementácie),<br />
vznikne štandard. TCP/IP predpokladá že siete sú typu nespojované, nespoľahlivé<br />
a best effort. Všetká inteligencia je sústredená do koncových uzlov, sieť je „hlúpa�<br />
ale rýchla.<br />
TCP/IP bol pôvodne určený pre ARPAnet – nemohol mať teda žiadnu centrálnu<br />
časť a musel byť robustný voči chybám (nespoľahlivé/nespojované prenosy). Dôraz<br />
sa kládol aj na ”internetworking”. Nebolo však požadované zabezpečenie, mobilita<br />
ani kvalita služieb.<br />
TCP/IP nedefinuje rôzne siete (čo sa hardvérových vlastností týka) a technológie<br />
vo vrstve sieťového rozhrania – iba sa snaží nad nimi prevádzkovať protokol IP<br />
28
(okrem SLIP a PPP pre dvojbodové spoje). V sieťovej vrstve je IP protokol, v<br />
transportnej jednotné transportné protokoly (TCP a UDP), v aplikačnej potom<br />
jednotné základy aplikácií (email, prenos súborov, remote login...).<br />
Adresace, IPv4, IPv6<br />
Data se v IP síti posílají po blocích nazývaných datagramy. Jednotlivé datagramy<br />
putují sítí zcela nezávisle, na začátku komunikace není potřeba navazovat spojení či<br />
jinak „připravovat cestu� datům, přestože spolu třeba příslušné stroje nikdy předtím<br />
nekomunikovaly.<br />
IP protokol v doručování datagramů poskytuje nespolehlivou službu, označuje<br />
se také jako best effort – „nejlepší úsilí�; tj. všechny stroje na trase se datagram<br />
snaží podle svých možností poslat blíže k cíli, ale nezaručují prakticky nic. Datagram<br />
vůbec nemusí dorazit, může být naopak doručen několikrát a neručí se ani za<br />
pořadí doručených paketů. Pokud aplikace potřebuje spolehlivost, je potřeba ji implementovat<br />
v jiné vrstvě síťové architektury, typicky protokoly bezprostředně nad<br />
IP (viz TCP).<br />
Pokud by síť často ztrácela pakety, měnila jejich pořadí nebo je poškozovala, výkon<br />
sítě pozorovaný uživatelem by byl malý. Na druhou stranu příležitostná chyba<br />
nemívá pozorovatelný efekt, navíc se obvykle používá vyšší vrstva, která ji automaticky<br />
opraví.<br />
V IPv4 je adresou 32bitové číslo, zapisované po jednotlivých bajtech, oddělených<br />
tečkami. Takových čísel existuje celkem 2 32 . Určitá část adres je ovšem rezervována<br />
pro vnitřní potřeby protokolu a nemohou být přiděleny. Dále pak praktické důvody<br />
vedou k tomu, že adresy je nutno přidělovat hierarchicky, takže celý adresní prostor<br />
není možné využít beze zbytku. To vede k tomu, že v současnosti je již znatelný<br />
nedostatek IP adres, který řeší různými způsoby: dynamickým přidělováním (tzn.<br />
např. každý uživatel dial-up připojení dostane dočasnou IP adresu ve chvíli, kdy<br />
se připojí, ale jakmile se odpojí, je jeho IP adresa přidělena někomu jinému; při<br />
příštím připojení pak může tentýž uživatel dostat úplně jinou adresu), překladem<br />
adres (NAT) a podobně. Ke správě tohoto přidělování slouží specializované síťové<br />
protokoly, jako např. DHCP.<br />
Pôvodný koncept adries počítal so štruktúrou adresy IPv4 v tvare sieť:počítač,<br />
kde bolo delenie častí pevne dané. Neskôr sa to ale ukázalo ako príliš hrubé delenie<br />
a lokálna časť adresy (v rámci jednej podsiete) može mäť dnes promenlivú dĺžku.<br />
Obecne platí, že medzi adresami v rovnakej podsieti (majú rovnakú sieťovú časť)<br />
je možné dopravovať dáta priamo – dotyční účastníci sú prepojení jedným ethernetom<br />
alebo inou lokálnou sieťou. V opačnom prípade sa dáta dopravujú smerovačmi/routermi.<br />
Hranicu v adrese medzi adresou siete a počítača určuje dnes maska<br />
podsiete. Jedná sa o 32 bitovú hodnotu, ktorá obsahuje jednotky tam, kde je v<br />
adrese určená sieť.<br />
Adresovanie sietí bolo v prvopočiatkoch internetu vyriešené staticky – prvých<br />
8 bitov adresy určovalo sieť, zvyšok jednotlivé počítače (existovať tak mohlo<br />
max. 256 sietí). S nástupom lokálnych sietí bolo tento systém potrebné zmeniť –<br />
zaviedli sa triedy IP adries. Existovalo 5 tried (A(začiatok 0, hodnoty prvého bajtu<br />
0-127, maska 255.0.0.0), B(10, 128-191, 255.255.0.0), C(110, 192-223, 255.255.255.0),<br />
D(1110, 224-239, určené na multicast) a E(1111, 240-255, určené ako rezerva)). Po-<br />
29
stupom času sa ale aj toto rozdelenie ukázalo ako nepružné a bol zavedený CIDR<br />
(Classless Inter-Domain Routing) systém v ktorom je možné hranicu medzi adresou<br />
siete a lokálnou časťou adresy umiestniť ľubovoľne (označuje sa potom ako kombinácia<br />
prefixu a dĺžky vo forme 192.168.0.0/24, kde 24 znamená že adresu tvorí<br />
prvých 24 bitov – jiný zápis je pomocí už zmiňované masky podsítě, tj. 192.168.0.0<br />
s maskou 255.255.255.0).<br />
Medzi adresami existujú niektoré tzv. vyhradené adresy, ktoré majú špeciálny<br />
význam.<br />
• Adresa s (binárnymi) nulami v časti určujúcej počítač (192.168.0.0 (/24)) znamená<br />
„táto sieť�, resp. „táto stanica�.<br />
• Adresa s jednotkami v časti určujúcej počítač (192.168.0.255 (/24)) znamená<br />
broadcast – všesmerové vysielanie.<br />
• Adresy 10.0.0.0 – 10.255.255.255, 172.16.0.0 – 172.31.255.255 a 192.168.0.0 –<br />
192.168.255.255 sa používajú na adresovanie interných sietí – smerovače tieto<br />
adresy nesmie smerovať ďalej do internetu.<br />
IPv6 je trvalejším riešením nedostatku adries – zatiaľ sa ale rozširuje veľmi<br />
pozvolna. Adresa v IPv6 má dĺžku 128 bitov (oproti 32), čo znamená cca. 6×10 23 IP<br />
adries na 1m 2 zemského povrchu – umožňuje teda, aby každé zariadenie na zemi malo<br />
vlastnú jednoznačnú adresu. Adresa IPv6 sa zapisuje ako osem skupín po štyroch<br />
hexadecimálnych číslach (napr. 2001:0718:1c01:0016:0214:22ff:fec9:0ca5) – pričom<br />
úvodné nuly v číslach je možné vynechať. Ak po sebe nasleduje niekoľko nulových<br />
skupín, je možné použiť len znaky :: – napr. ::1 miesto 0000:0000:.......:0001. Toto<br />
je možné použiť len raz v zápise adresy. RFC 4291 zavádza 3 typy adries:<br />
• inidividuálne / unicast – identifikujú práve jedno rozhranie<br />
• skupinové / multicast – určuje skupinu zariadení, ktorým sa má správa<br />
dopraviť<br />
• výberové / anycast – určuje tiež skupinu zariadení, dáta sa však doručia<br />
len jednému z členov (najbližšiemu)<br />
IPv6 neobsahuje všesměrové (broadcast) adresy. Byly nahrazeny obecnějším modelem<br />
skupinových adres a pro potřeby doručení dat všem zařízením připojeným k<br />
určité síti slouží speciální skupinové adresy (např. ff02::1 označuje všechny uzly na<br />
dané lince).<br />
IPv6 zavádí také koncepci dosahu (scope) adres. Adresa je jednoznačná vždy jen<br />
v rámci svého dosahu. Nejčastější dosah je pochopitelně globální, kdy adresa je jednoznačná<br />
v celém Internetu. Kromě toho se často používá dosah linkový, definující<br />
jednoznačnou adresu v rámci jedné linky (lokální sítě, např. Ethernetu). Propracovanou<br />
strukturu dosahů mají skupinové adresy (viz níže).<br />
Adresní prostor je rozdělen následovně:<br />
prefix význam<br />
::/128 neurčená<br />
::1/128 smyčka (loopback)<br />
ff00::/8 skupinové<br />
fe80::/10 individuální lokální linkové<br />
ostatní individuální globální<br />
30
Výběrové adresy nemají rezervovánu svou vlastní část adresního prostoru. Jsou<br />
promíchány s individuálními a je otázkou lokální konfigurace, aby uzel poznal, zda<br />
se jedná o individuální či výběrovou adresu.<br />
Strukturu globálních individuálních IPv6 adres definuje RFC 3587. Je velmi jednoduchá<br />
a de facto odpovídá (až na rozměry jednotlivých částí) výše uvedené struktuře<br />
IPv4 adresy.<br />
n bitů 64-n bitů 64 bitů<br />
globální směrovací prefix adresa podsítě adresa rozhraní<br />
Globální směrovací prefix je de facto totéž co adresa sítě, následuje adresa podsítě<br />
a počítače (přesněji síťového rozhraní). V praxi je adresa podsítě až na výjimky<br />
16bitová a globální prefix 48bitový. Ten je pak přidělován obvyklou hierarchií, jejíž<br />
stávající pravidla jsou:<br />
• první dva bajty obsahují hodnotu 2001 (psáno v šestnáctkové soustavě)<br />
• další dva bajty přiděluje regionální registrátor (RIR)<br />
• další dva bajty přiděluje lokální registrátor (LIR)<br />
Reálná struktura globální individuální adresy tedy vypadá následovně:<br />
16 bitů 16 bitů 16 bitů 16 bitů 64 bitů<br />
2001 přiděluje RIR přiděluje LIR adresa podsítě adresa rozhraní<br />
Adresa rozhraní by pak měla obsahovat modifikovaný EUI-64 identifikátor. Ten<br />
získáte z MAC adresy jednoduchým postupem: invertuje se druhý bit MAC adresy<br />
a doprostřed se vloží dva bajty obsahující hodnotu fffe. Z ethernetové adresy<br />
00:14:22:c9:0c:a5 tak vznikne identifikátor 0214:22ff:fec9:0ca5.<br />
Adresy začínajúce hodnotou ff sú tzv. ”skupinové adresy” – štyri nasledujúce bity<br />
v nej obsahujú príznaky, ďalšie štyri potom dosah (napr. interface-local, link-local,<br />
admin-local, site-local, organization-local, global...)<br />
IPv6 ďalej podporuje QoS a bezpečnosť (IPsec).<br />
Routing<br />
Pojmem směrování (routing, routování) je označováno hledání cest v počítačových<br />
sítích. Jeho úkolem je dopravit datový paket určenému adresátovi, pokud možno co<br />
nejefektivnější cestou. Síťová infrastruktura mezi odesílatelem a adresátem paketu<br />
může být velmi složitá. Směrování se proto zpravidla nezabývá celou cestou paketu,<br />
ale řeší vždy jen jeden krok – komu data předat jako dalšímu (tzv. „distribuované<br />
směrování�). Ten pak rozhoduje, co s paketem udělat dál.<br />
V prípade, že je cieľová stanica packetu v rovnakej sieti ako je odosielateľ, o<br />
doručenie sa postará linková vrstva. V opačnom prípade musí odosielateľ určiť najvhodnejší<br />
odchodzí smer a poslať datagram smerovaču vo zvolenom smere.<br />
Základní datovou strukturou pro směrování je směrovací tabulka (routing table).<br />
Představuje vlastně onu sadu ukazatelů, podle kterých se rozhoduje, co udělat s<br />
kterým paketem. Směrovací tabulka je složena ze záznamů obsahujících:<br />
31
• cílovou adresu, které se dotyčný záznam týká. Může se jednat o adresu individuálního<br />
počítače, častěji však je cíl definován prefixem, tedy začátkem<br />
adresy. Prefix mívá podobu 147.230.0.0/16. Hodnota před lomítkem je adresa<br />
cíle, hodnota za lomítkem pak určuje počet významných bitů adresy. Uvedenému<br />
prefixu tedy vyhovuje každá adresa, která má v počátečních 16 bitech<br />
(čili prvních dvou bajtech) hodnotu 147.230.<br />
• akci určující, co provést s datagramy, jejichž adresa vyhovuje prefixu. Akce<br />
mohou být dvou typů: doručit přímo adresátovi (pokud je dotyčný stroj s<br />
adresátem přímo spojen) nebo předat některému ze sousedů (jestliže je adresát<br />
vzdálen).<br />
Směrovací rozhodnutí pak probíhá samostatně pro každý procházející datagram.<br />
Vezme se jeho cílová adresa a porovná se směrovací tabulkou následovně:<br />
• Z tabulky se vyberou všechny vyhovující záznamy (jejichž prefix vyhovuje<br />
cílové adrese datagramu).<br />
• Z vybraných záznamů se použije ten s nejdelším prefixem. Toto pravidlo vyjadřuje<br />
přirozený princip, že konkrétnější záznamy (jejichž prefix je delší, tedy<br />
přesnější; specielním případem je host-specific route) mají přednost před obecnějšími<br />
(co může být např. i default route; ps: agregace).<br />
Zajímavou otázkou je, jak vznikne a jak je udržována směrovací tabulka. Tento<br />
proces mají obecně na starosti směrovací algoritmy. Když jsou pak pro určitý algoritmus<br />
definována přesná pravidla komunikace a formáty zpráv nesoucích směrovací<br />
informace, vznikne směrovací protokol (routing protocol). Směrovací algoritmy<br />
můžeme rozdělit do dvou základních skupin: na statické a dynamické. Často se také<br />
mluví o statickém a dynamickém směrování, které je důsledkem činnosti příslušných<br />
protokolů.<br />
Při statickém (též neadaptivním) směrování se směrovací tabulka nijak nemění.<br />
Je dána konfigurací počítače a případné změny je třeba v ní provést ručně.<br />
Tato varianta vypadá jako nepříliš atraktivní, ve skutečnosti ale drtivá většina zařízení<br />
v Internetu směruje staticky.<br />
Dynamické (adaptivní) směrování průběžně reaguje na změny v síťové topologii<br />
a přizpůsobuje jim směrovací tabulky. Na vytváranie tabuliek existuje niekoľko<br />
algoritmov – routovacích protokolov (vector-distance/link-state) – RIP, BGP,<br />
OSPF.<br />
Distribuované směrování<br />
V distribuovaném směrování může výpočet cesty (směru předání paketu) provádět<br />
buď každý uzel nezávisle, nebo mohou uzly kooperovat (distribuovaný výpočet).<br />
Rozlišuje se také četnost aktualizace informací. Dva základní algoritmy distribuovaného<br />
směrování jsou:<br />
• vector distance – každý uzel si udržuje tabulku vzdáleností, přímí sousedé si<br />
vyměňují informace o cestách ke všem uzlům, tj. jde o distribuovaný výpočet,<br />
přenáší se dost informací. Trpí problémem „count-to-infinity� – tj. když 1<br />
uzel přestane existovat, postupně si jeho sousedé mezi sebou přehazují vzdálenost,<br />
postupně o 1 zvětšovanou (do nekonečna). Řeší se pomocí technik „split<br />
32
horizon� (neinzeruj vzdálenost zpět) a „poisoned reverse� (inzeruj zpět nekonečno),<br />
někde ale přesto selhává.<br />
• link state – každý uzel hledá změny svých sousedů a pokud k nějaké dojde,<br />
pošle floodem informaci do celé sítě. Výpočet vzdáleností dělá každý uzel sám.<br />
Tyto algoritmy se používají u některých známých směrovacích protokolů:<br />
• RIP (Routing Information Protocol) – protokol z BSD Unixu, typu vector distance.<br />
Počítá s max. 16 přeskoky, změny se updatují 2x za minutu. Informace<br />
ve směrovací tabulce může zahrnovat max. 25 sítí, používá split horizon &<br />
poisoned reverse. Hodí se ale jen pro malé sítě.<br />
• OSPF (Open Shortest Path First) – jde o protokol typu link state, uzly si<br />
počítají vzdálenosti do všech sítí Dijkstrovým algoritmem. Pro zjišťování změn<br />
se posílají pakety ”HELLO” a ”ECHO”. Má lepší škálovatelnost, hodí se pro<br />
větší sítě.<br />
Hierarchické směrování, autonomní systémy<br />
Hierarchické směrování znamená rozdělení sítě do oblastí (areas) a směrování mezi<br />
nimi jen přes vstupní body. Je vhodné pro velké, složitě propojené nebo různým<br />
způsobem spravované sítě. Nad oblastmi se vytvoří propojení – backbone area<br />
(páteřní systém), přes které se směrování mezi oblastmi provádí. Celému tomuto<br />
(areas + backbone area) se říká autonomní systém. Detailní směrovací informace<br />
neopouštějí jednotlivé oblasti.<br />
Pro směrování v rámci jedné oblasti i mezi oblastmi v rámci jednoho autonomního<br />
systému slouží jeden z tzv. interior gateway protocols, může být použit např.<br />
OSPF nebo RIP, případně další jako IGRP (interior gateway routing protocol,<br />
typu vector distance) nebo EIGRP (enhaced IGRP, hybrid mezi vector distance<br />
a link state). Mezi jednotlivými autonomními systémy (přes AS boundary routers)<br />
se směruje pomocí exterior gateway protocolu, jedním z nich je např. Border<br />
Gateway Protocol (BGP).<br />
Díky existenci autonomních systémů jde např. při peeringu stanovit, který<br />
provoz půjde přes peering a který výše po upstreamu do páteřních sítí.<br />
Fragmentace<br />
Maximum transmission unit (MTU) je maximální velikost paketu, který je<br />
možné přenést z jednoho síťového zařízení na druhé. Obvyklá hodnota MTU v<br />
případě Ethernetu je cca 1500 bajtů, nicméně mezi některými místy počítačové<br />
sítě (spojených například modemem nebo sériovou linkou) může být maximální<br />
délka přeneseného paketu nižší. Hodnotu MTU lze zjistit prostřednictvím protokolu<br />
ICMP. Při posílání paketů přes několik síťových zařízení je samozřejmě důležité<br />
nalézt nejmenší MTU na dané cestě. Hodnota MTU je omezena zdola na 576 bajtů.<br />
U přenosového protokolu TCP je při směrování paketu do přenosového kanálu<br />
s nižším MTU než je délka paketu, provedena fragmentace paketu. U protokolu<br />
UDP není fragmentace paketu podporována a paket je v takovém případě zahozen.<br />
Pokud dorazí na směrovač paket o velikosti větší, než kterou je přenosová trasa<br />
schopna přenést (např. při přechodu z Token Ringu používajícího 4 kByte pakety<br />
33
na Ethernet používajícího maximálně 1,5 kByte pakety), musí směrovač zajistit<br />
tzv. fragmentaci, neboli rozebrání paketu na menší části a cílový uzel musí zajistit<br />
opětovné složení, neboli defragmentaci.<br />
Fragmenty procházejí přes síť jako samostatné datagramy. Aby byl koncový uzel<br />
schopen fragmenty složit do originálního datagramu, musí být fragmenty příslušně<br />
označeny. Toto označování se provádí v příslušných polích IP hlavičky.<br />
Pokud nesmí být datagram fragmentován, je označen v příslušném místě IP hlavičky<br />
příznakem „Don‘t Fragment�. Jestliže takto označený paket dorazí na směrovač,<br />
který by jej měl poslat prostředím s nižším MTU a tudíž je nutnost provést<br />
fragmentaci, provede směrovač jeho zrušení a informuje odesílatele chybovou zprávou<br />
ICMP.<br />
Aby byl cílový uzel schopen složit originální datagram, musí mít dostatečný buffer<br />
do něhož jsou jednotlivé fragmenty ukládány na příslušnou pozici danou offsetem.<br />
Složení je dokončeno v okamžiku, kdy je vyplněn celý datagram začínající fragmentem<br />
s nulovým offsetem (identification a fragmentation offset v hlavičke) a končící<br />
segmentem s příznakem „More Data Flag� (resp. More Fragments) nastaveným na<br />
False.<br />
V IPv4 je možné fragmentované pakety ďalej deliť; naproti tomu v IPv6 musí<br />
fragmentáciu zabezpečiť odosielateľ – nevyhovujúce pakety sa zahadzujú.<br />
Spolehlivost, Flow control, Congestion control<br />
Keďže TCP/IP funguje nad obecne nespojovanými a nespoľahlivými médiami, spoľahlivosť<br />
ktorú TCP poskytuje nie je „skutočná�, ale len „softvérovo emulovaná�<br />
– medziľahlé uzly o spojení nič nevedia, fungujú nespojovane (pre komunikáciu sa<br />
používa sieťová vrstva, transportná „existuje� iba medzi koncovými uzlami). Je teda<br />
nutné ošetriť napr. nespoľahlivosť infraštruktúry (strácanie dát, duplicity – pričom<br />
stratiť sa môže aj žiadosť o vytvorenie pripojenia, potvrdenie...) a reboot uzlov<br />
(uzol stratí históriu, je potrebné ošetriť existujúce spojenia...).<br />
Používa sa celá rada techník, kde základom je kontinuálne potvrdzovanie: príjemca<br />
posiela kladné potvrdenia; odosielateľ po každom odoslaní spúšťa časovač a<br />
ak mu do vypršania nepríde potvrdenie, posiela dáta znovu. Potvrdzovanie nie je<br />
samostatné ale vkladá sa do paketov cestujúcich opačným smerom – piggybacking.<br />
TCP priebežne kontroluje „dobu obrátky� a vyhodnocuje vážený priemer a rozptyl<br />
dôb obrátky. Čakaciu dobu (na potvrdenie) potom vypočítava ako funkciu tohto<br />
váženého priemeru a rozptylu. Výsledný efekt je potom ten, že čakacia doba je tesne<br />
nad strednou dobou obrátky. V prípade konštantnej doby obrátky sa čakacia doba<br />
približuje strednej dobe obrátky; ak kolíše, čakacia doba sa zväčšuje.<br />
Dáta v TCP sa príjímajú/posielajú po jednotlivých byteoch – interne sa však<br />
bufferujú a posielajú až po naplnení buffera (pričom aplikácia si môže vyžiadať<br />
okamžité odoslanie – operácia PUSH). TCP si potrebuje označovať jednotlivé byty<br />
v rámci prúdu (keďže nepracuje s blokmi) – napr. kvôli potvrdzovaniu; používa sa<br />
na to 32-bitová pozícia v bytovom prúde (začína sa od náhodne zvoleného čísla).<br />
TCP sa snaží riadiť tok dát – aby odosielateľ nezahlcoval príjemcu a kvôli<br />
tomu nedochádzalo k stráte dát. Podstata riešenia je tzv. metóda okienka. Okienko<br />
udáva veľkosť voľných bufferov na strane prijímajúceho a odosielateľ môže posielať<br />
dáta až do „zaplnenia� okienka. Príjemca spolu s každým potvrdením posiela aj<br />
34
svoju ponuku – údaj o veľkosti okienka (window advertisment)., ktorý hovorí koľko<br />
ešte dát je schopný prijať (naviac k práve potvrdeným). Znovu – používa sa metóda<br />
kontinuálneho potvrďovania.<br />
Väčšina strát prenášaných dát ide skôr na vrub zahlteniu ako chybám HW a<br />
transportné protokoly môžu nevhodným chovaním zhoršovať dôsledky. TCP každú<br />
stratu dát chápe ako dôsledok zahltenia – nasadzuje opatrenia proti zahlteniu<br />
(congestion control). Po stráte paketu ho pošle znovu ale neposiela ďalšie a čaká<br />
na potvrdenie (tj. prechod z kontinuálneho potvrdzovania na jednotlivé ⇒ vysiela<br />
menej dát ako mu umožňuje okienko). Ak príde potvrdenie včas, zdvojnásobí množstvo<br />
odosielaných dát – a tak pokračuje kým nenarazí na aktuálnu veľkosti okienka<br />
(postupne sa tak vracia na kontinuálne potvrdzovanie).<br />
Dôležitou vlastnosťou je aj korektné chovanie pri naväzovaní a rušení spojenia<br />
(v prostredí, kde môže dôjsť k spomaleniu, strate, duplicite...) – používa sa tzv.<br />
3-fázový handshake. Vytvorenie spojenia prebieha nasledovne:<br />
1. Klient pošle serveru SYN paket (v pakete je nastavený príznak SYN) spolu s<br />
náhodným sequence number (X).<br />
2. Server tento paket prijme, zaznamená si sequence number (X) a pošle späť<br />
paket SYN-ACK. Tento paket obsahuje pole Acknowledgement, ktoré označuje<br />
ďalšie číslo (sequence number), ktoré tento host očakáva (X+1). Tento host<br />
rovno vytvorí spätnú session s vlastným sekvenčným číslom (Y).<br />
3. Klient odpovie so sekvenčným číslom (X+1) a jednoduchým Acknowledgement<br />
číslom (Y+1) – čo je sekvenčné číslo servera+1.<br />
Pak už spojení považováno za navázané. Rušenie spojenia funguje podobne, posílají<br />
se pakety FIN (finish), FIN+ACK a ACK. Pokud více než nějaký určitý počet<br />
pokusů o odeslání (po spočítaných time-outech) jednoho z 3-way handshake paketů<br />
selže (druhá strana neodešle to, co mělo následovat), spojení se považuje za přerušené<br />
(i u navazování, i u rušení).<br />
NAT<br />
TODO: přeložit ty copy & paste z Wiki<br />
Network address translation (zkráceně NAT, česky překlad síťových adres) je<br />
funkce síťového routeru pro změnu IP adres packetů procházejících zařízením, kdy se<br />
zdrojová nebo cílová IP adresa převádí mezi různými rozsahy. Nejběžnější formou je<br />
tzv. maškaráda (maskování), kdy router IP adresy z nějakého rozsahu mění na svoji<br />
IP adresu a naopak – tím umožňuje, aby počítače ve vnitřní síti (LAN) vystupovaly<br />
v Internetu pod jedinou IP adresou. Router si drží po celou dobu spojení v paměti<br />
tabulku překladu adres.<br />
Překlad síťových adres je funkce, která umožňuje překládání adres. Což znamená,<br />
že adresy z lokální sítě přeloží na jedinečnou adresu, která slouží pro vstup do jiné sítě<br />
(např. Internetu), adresu překládanou si uloží do tabulky pod náhodným portem,<br />
při odpovědi si v tabulce vyhledá port a pošle pakety na IP adresu přiřazenou k<br />
danému portu. NAT je vlastně jednoduchým proxy serverem (na sieťovej vrstve).<br />
35
Komunikace<br />
Klient odešle požadavek na komunikace, směrovač se podívá do tabulky a zjistí,<br />
zdali se jedná o adresu lokální, nebo adresu venkovní. V případě venkovní adresy<br />
si do tabulky uloží číslo náhodného portu, pod kterým bude vysílat a k němu si<br />
přiřadí IP adresu. Během přeposílání „ven� a změny adresy v paketu musí NAT<br />
také přepočítat CRC checksum TCP i IP (aby pakety nebyly zahazovány kvůli<br />
špatnému CRC, protože změněná adresa je jejich součástí).<br />
Výhodami NAT sú umožnenie pripojenie viacerých počítačov do internetu cez<br />
jednu zdieľanú verejnú IP adresu, a zvýšenie bezpečnosti počítačov za NATom (aj<br />
keď je to security through obscurity a nie je dobré postaviť bezpečnosť iba na<br />
NATe). Nevýhodami potom sú nefungujúce protokoly (napr. aktívne FTP) – čo<br />
je zrejmé z fungovania NATu.<br />
NAT Traversal<br />
NAT traversal refers to an algorithm for the common problem in TCP/IP networking<br />
of establishing connections between hosts in private TCP/IP networks that<br />
use NAT devices.<br />
This problem is typically faced by developers of client-to-client networking<br />
applications, especially in peer-to-peer and VoIP activities. NAT-T is commonly<br />
used by IPsec VPN clients in order to have ESP packets go through NAT.<br />
Many techniques exist, but no technique works in every situation since NAT<br />
behavior is not standardized. Many techniques require a public server on a wellknown<br />
globally-reachable IP address. Some methods use the server only when<br />
establishing the connection (such as STUN), while others are based on relaying all<br />
the data through it (such as TURN), which adds bandwidth costs and increases<br />
latency, detrimental to conversational VoIP applications.<br />
Druhy uspořádání NATu<br />
• Static NAT : A type of NAT in which a private IP address is mapped to a public<br />
IP address, where the public address is always the same IP address (i.e., it has<br />
a static address). This allows an internal host, such as a Web server, to have<br />
an unregistered (private) IP address and still be reachable over the Internet.<br />
• Dynamic NAT — A type of NAT in which a private IP address is mapped to<br />
a public IP address drawing from a pool of registered (public) IP addresses.<br />
Typically, the NAT router in a network will keep a table of registered IP<br />
addresses, and when a private IP address requests access to the Internet, the<br />
router chooses an IP address from the table that is not at the time being used<br />
by another private IP address. Dynamic NAT helps to secure a network as it<br />
masks the internal configuration of a private network and makes it difficult for<br />
someone outside the network to monitor individual usage patterns. Another<br />
advantage of dynamic NAT is that it allows a private network to use private<br />
IP addresses that are invalid on the Internet but useful as internal addresses.<br />
• PAT — PAT (NAT overloading) je další variantou NATu. U této varianty<br />
NATu se více inside local adres mapuje na jednu inside global adresu na různých<br />
portech. Tedy máme jednu veřejnou adresu a vnitřní síť oadresovanou<br />
36
ARP<br />
inside local adresami. Překladová tabulka je rozšířena o dvě položky: inside local<br />
port – port, ze kterého byl paket odeslán a inside global port – číslo portu,<br />
na který je paket odeslaný ze zdrojového portu počítače mapován. Výhodou<br />
je, že se tak připojuje více počítačů přes jednu IP adresu.<br />
Address Resolution Protocol (ARP) se v počítačových sítích s IP protokolem<br />
používá k získání ethernetové (MAC) adresy sousedního stroje z jeho IP adresy.<br />
Používá se v situaci, kdy je třeba odeslat IP datagram na adresu ležící ve stejné<br />
podsíti jako odesílatel. Data se tedy mají poslat přímo adresátovi, u něhož však<br />
odesílatel zná pouze IP adresu. Pro odeslání prostřednictvím např. Ethernetu ale<br />
potřebuje znát cílovou ethernetovou adresu.<br />
Proto vysílající odešle ARP dotaz (ARP request) obsahující hledanou IP adresu<br />
a údaje o sobě (vlastní IP adresu a MAC adresu). Tento dotaz se posílá linkovým<br />
broadcastem – na MAC adresu identifikující všechny účastníky dané lokální sítě<br />
(v případě Ethernetu na ff:ff:ff:ff:ff:ff). ARP dotaz nepřekročí hranice dané podsítě,<br />
ale všechna k ní připojená zařízení dotaz obdrží a jako optimalizační krok si zapíší<br />
údaje o jeho odesílateli (IP adresu a odpovídající MAC adresu) do své ARP cache.<br />
Vlastník hledané IP adresy pak odešle tazateli ARP odpověď (ARP reply) obsahující<br />
vlastní IP adresu a MAC adresu. Tu si tazatel zapíše do ARP cache a může odeslat<br />
datagram.<br />
Informace o MAC adresách odpovídajících jednotlivým IP adresám se ukládají do<br />
ARP cache, kde jsou uloženy do vypršení své platnosti. Není tedy třeba hledat MAC<br />
adresu před odesláním každého datagramu – jednou získaná informace se využívá<br />
opakovaně. V řadě operačních systémů (Linux, Windows XP) lze obsah ARP cache<br />
zobrazit a ovlivňovat příkazem arp.<br />
Alternativou pro počítač bez ARP protokolu je používat tabulku přiřazení MAC<br />
adres IP adresám definovanou jiným způsobem, například pevně konfigurovanou.<br />
Tento přístup se používá především v prostředí se zvýšenými nároky na bezpečnost,<br />
protože v ARP se dá podvádět – místo skutečného vlastníka hledané IP adresy může<br />
odpovědět někdo jiný a stáhnout tak k sobě jeho data.<br />
ARP je definováno v RFC 826. Používá se pouze pro IPv4. Novější verze IP protokolu<br />
(IPv6) používá podobný mechanismus nazvaný Neighbor Discovery Protocol<br />
(NDP, „objevování sousedů�).<br />
Ačkoliv se ARP v praxi používá téměř výhradně pro překlad IP adres na MAC<br />
adresy, nebyl původně vytvořen pouze pro IP sítě. ARP se může použít pro překlad<br />
MAC adres mnoha různých protokolů na síťové vrstvě. ARP byl také uzpůsoben tak,<br />
aby vyhodnocoval jiné typy adres fyzické vrstvy: například ATMARP se používá k<br />
vyhodnocení ATM NSAP adres v protokolu Classical IP over ATM.<br />
ICMP<br />
ICMP protokol (anglicky Internet Control Message Protocol) je jeden z<br />
jádrových protokolů ze sady protokolů internetu. Používají ho operační systémy po-<br />
37
čítačů v síti pro odesílání chybových zpráv – například pro oznámení, že požadovaná<br />
služba není dostupná nebo že potřebný počítač nebo router není dosažitelný.<br />
ICMP se svým účelem liší od TCP a UDP protokolů tím, že se obvykle nepoužívá<br />
sítovými aplikacemi přímo. Jedinou výjimkou je nástroj ping, který posílá ICMP<br />
zprávy „Echo Request� (a očekává příjem zprávy „Echo Response�) aby určil, zda<br />
je cílový počítač dosažitelný a jak dlouho paketům trvá, než se dostanou k cíli a<br />
zpět.<br />
ICMP protokol je součást sady protokolů internetu definovaná v RFC 792. ICMP<br />
zprávy se typicky generují při chybách v IP datagramech (specifikováno v RFC 1122)<br />
nebo pro diagnostické nebo routovací účely. Verze ICMP pro IPv4 je známá jako<br />
ICMPv4. IPv6 používá obdobný protokol: ICMPv6.<br />
ICMP zprávy se konstruují nad IP vrstvou; obvykle z IP datagramu, který ICMP<br />
reakci vyvolal. IP vrstva patřičnou ICMP zprávu zapouzdří novou IP hlavičkou<br />
(aby se ICMP zpráva dostala zpět k původnímu odesílateli) a obvyklým způsobem<br />
vzniklý datagram odešle. Například každý stroj (jako třeba mezilehlé routery), který<br />
forwarduje IP datagram, musí v IP hlavičce dekrementovat políčko TTL („time to<br />
live�, „zbývající doba života�) o jedničku. Jestliže TTL klesne na 0 (a datagram není<br />
určen stroji provádějícímu dekrementaci), router přijatý paket zahodí a původnímu<br />
odesílateli datagramu pošle ICMP zprávu „Time to live exceeded in transit� („během<br />
přenosu vypršela doba života�).<br />
Každá ICMP zpráva je zapouzdřená přímo v jediném IP datagramu, a tak (jako<br />
u UDP) ICMP nezaručuje doručení. Ačkoli ICMP zprávy jsou obsažené ve standardních<br />
IP datagramech, ICMP zprávy se zpracovávají odlišně od normálního zpracování<br />
prokolů nad IP. V mnoha případech je nutné prozkoumat obsah ICMP zprávy<br />
a doručit patřičnou chybovou zprávu aplikaci, která vyslala původní IP paket, který<br />
způsobil odeslání ICMP zprávy k původci.<br />
Mnoho běžně používaných síťových diagnostických utilit je založeno na ICMP<br />
zprávách. Příkaz traceroute je implementován odesíláním UDP datagramů se speciálně<br />
nastavenou životností v TTL políčku IP hlavičky a očekáváním ICMP odezvy<br />
„Time to live exceeded in transit� nebo „Destination unreachable�. Příbuzná utilita<br />
ping je implementována použitím ICMP zpráv „Echo� a „Echo reply�.<br />
Nejpoužívanější ICMP datagramy:<br />
• Echo: požadavek na odpověď, každý prvek v síti pracující na IP vrstvě by na<br />
tuto výzvu měl reagovat. Často to z různých důvodů není dodržováno.<br />
• Echo Reply: odpověď na požadavek<br />
• Destination Unreachable: informace o nedostupnosti cíle, obsahuje další upřesňující<br />
informaci<br />
– Net Unreachable: nedostupná cílová síť, reakce směrovače na požadavek<br />
komunikovat se sítí, do které nezná cestu<br />
– Host Unreachable: nedostupný cílový stroj<br />
– Protocol Unreachable: informace o nemožnosti použít vybraný protokol<br />
– Port Unreachable: informace o nemožnosti připojit se na vybraný port<br />
• Redirect: přesměrování, používá se především pokud ze sítě vede k cíli lepší<br />
cesta než přes defaultní bránu. Stanice většinou nepoužívají směrovací protokoly<br />
a proto jsou informovány touto cestou. Funguje tak, že stanice pošle<br />
38
datagram své, většinou defaultní, bráně, ta jej přepošle správným směrem a<br />
zároveň informuje stanici o lepší cestě.<br />
– Redirect Datagram for the Network: informuje o přesměrování datagramů<br />
do celé sítě<br />
– Redirect Datagram for the Host: informuje o přesměrování datagramů<br />
pro jediný stroj<br />
• Time Exceeded: vypršel časový limit<br />
– Time to Live exceeded in Transit: během přenosu došlo ke snížení TTL<br />
na 0 aniž byl datagram doručen<br />
– Fragment Reassembly Time Exceeded: nepodařilo se sestavit jednotlivé<br />
fragmenty v časovém limitu(např pokud dojde ke ztrátě části datagramů)<br />
Ostatní datagramy jsou používány spíše vzácně, někdy je používání ICMP znemožněno<br />
zcela špatným nastavením firewallu.<br />
UDP, TCP<br />
UDP – nespoľahlivý nespojovaný prenos datagramov... pridáva len porty<br />
TCP – porty+spoľahlivý spojovaný prenos streamov...<br />
...ďalšie info viď kapitolu o BSD Sockets :-)<br />
5.14 Spojované a nespojované služby, spolehlivost, zabezpečení<br />
protokolu<br />
TODO: všechno<br />
39