3. Zabezpečení dat při přenosech

Problém při komunikaci v reálné síti:  
-------------------------------------
 -ztrácení a poškozování paketů
 -duplikace a změna pořadí paketů v sítích  s alternativními cestami

Nutnost zavedení zpětné vazby do přenosu:

  potvrzovací - zpět ACK/NAK
  detekční - zpět CRC
  informační - zpět celý rámec

Poznámka: mohou se ztrácet nejen informační pakety, ale i potvrzení.

Protokol - soubor syntaktických a sémantických pravidel (včetně definice
           časových poměrů) pro komunikaci.

Potvrzovací schémata

Problém tří armád: teoreticky nemožné ověřit správnost doručení potvrzení
ze strany přijímače


Pozitivní potvrzování, negativní potvrzování, kombinované potvrzování

Potvrzování a timeouty - volba vhodného timeoutu, řeší problém deadlocku 
                         při ztrátě potvrzení,
                         komplikuje formální popis protokolu (nutnost zavedení
                         časového kontextu).
Problém volby velikosti timeoutu: efektivita při nutnosti retransmise
                                  vs. předčasné retransmise

* stop-and-wait: vysílač vyšle jediný rámec a čeká na potvrzení. 
                 Na kanálech s velkým zpožděním velmi neefektivní

* skupinové potvrzování (pipelining): efektivní pro spoje s velkou dobou 
                                      zpoždění
      Continuous ARQ (Automatic Retransmission Request): na full-duplex kanálu,
                                                         efektivita až 100%

  Protokoly využívající metody klouzavého okénka (sliding window)
  ...............................................................


   Stanice smí vyslat i více rámců (počet dán šířkou vysílacího okna). 
   Při odeslání se pro každý rámec nastartuje časovač pro potvrzení.
   ACK se posílá od každého přijatého rámce, popř. do časového limitu od času
   příchodu prvního dosud nepotvrzeného rámce


   Pro vyloučení duplikace při retransmisi jsou jednotlivé rámce číslovány
   sekvenčními čísly. 

   * vysílací okno - buffer s vyslanými rámci, které dosud nebyly potvrzeny 
                     a možná budou muset být vyslány znovu
   * přijímací okno - buffer na přijímané rámce, které ještě nemohly být
                      doručeny vyšší vrstvě přijímače, protože dosud chybí
		      některý z předchozích rámců v řadě
                       

   Obě okénka "kloužkou" po sekvenčních číslech

   Vysílač:

   Seq# ------------------------------------------------->

   +-------------+---------------------+-----------------+
   |  vyslané a  |  vyslané, ale       |  budoucí rámce  |
   |  potvrzené  |  dosud nepotvrzené  |  od vyšší       |
   |  rámce      |  rámce              |  vrstvy         |
   +-------------+---------------------+-----------------+

   
Znázornění protokolu sliding window


   Používají se dvě varianty sliding window protokolu:

   1) Go-back-N: šířka okna přijímače 1 rámec

    Chování při poškození rámce:

    a) chyba v rámci i:
     - přijímač pošle NAK nebo mlčí (převod na ztrátu rámce v síti)
     - vysílač při příjmu NAK opakuje všechny rámce vysílacího okna od i znovu

    b) rámec se ztratí:
     - přijímač očekává rámec i-1, ten se ztratil, ale přišel jeho 
       následník i. Přijímač odešle NAK i 
       (nebo mlčí, čímž se převede na ztrátu rámce)

    c) rámec i se ztratí a další se nevysílají: 
     - vysílač vytimeoutuje a rámec i pošle znovu

    Chování při poškození potvrzení:

    - pokud se ztratí ACK i, může jej nahradit ACK s vyšším číslem,
      pokud příjde před timeoutem vysílače pro rámec i. Pokud se to nestihne,
      vyšle vysílač rámec i a zbytek vysílacího okna znovu
    - Poškozený/ztracený NAK i: vysílač vytimeoutuje a vyšle všechny rámce
      svého okna znovu od i včetně

    Pozn.: Šířka okna musí být aspoň o jednu menší než počet seq. čísel
           (nerozlišili bychom ztrátu ztrátu všech rámců okna)

   2) Selective repeat: šířka okna přijímače více než jeden rámec

   - retransmise jen těch rámců, které vytimeoutují nebo jsou přijímačem
     explicitně odmítnuty (NAK).
   - přijímač musí obsahovat buffery na rámce, které příjdou za chybovým
     a uchovávat je do doplnění celé sekvence (a jejího poskytnutí aplikaci).
  

    Pozn.: Maximální šířka okna: polovina sekvenčních čísel
           (z důvodu překrývání vysílacího a přijímacího okna).

    Pozn.: Negativní potvrzování se často nepoužívá, řeší se timeouty
           na straně vysílače. Může však urychlit opravu chyb.

   
Srovnání go-back-N a selective repeat

Poznámka: Maximální šířka přijímacího okna může být stanovena pevně.
          Inzerování aktuální šířky přijímacího okna v povrzeních však můžeme
          protokol současně použít pro řízení toku dat od vysílače
          (flow control)-využito v TCP. Vysílací okno se pak dynamicky
	  upravuje tak, aby nepřesahovalo šířku přijímacího okna.

Poznámka: piggybacking - připojování potvrzení k informačním rámcům
                         ve druhém směru.

Poznámka: Sliding window se obvykle aplikuje na spojové/síťové vrstvě 
          modelu OSI-RM.

Spojová vrstva

-přenos mezi sousedními systémy
-přenášená informace seskupována do rámců (frame): 
   křídlová značka,hlavička,tělo,kontrolní součet,křídlová značka

   hlavička: adresy (cíl,zdroj), řídící bity

Znakově a bitově orientované protokoly
--------------------------------------

> Bajtově(znakově) orintované protokoly - závislé na použité znakové sadě
  (ASCII/EBCDIC/...). Řídící znaky vyhrazeny, ne na fixních pozicích.
  Použití v terminálových a řídících systémech s asynchronními linkami.

> Bitově orientované protokoly
   - rámce dohodnutého formátu ohraničené křídlovýmu
     značkami (flag, 01111110). 
     Pro přenos tohoto vzoru v datech se používá bit stuffing,
     při vysílání 01111110 vysílač vkládá dodatečnou nulu před šestou
     jedničku - přijímač tuto vloženou nulu z dat odstraní.
   - rámce lze oddělit i vhodným kódováním (např. porušení pravidel
     střídání polarity u kódu AMI).
  


Používané protokoly spojové vrstvy
==================================

* Znakově orientované protokoly

BSC: Binary Synchronous Control (bisync) 
----------------------------------------
IBM, kolem 1965
- half duplex
- point to point i multipoint
- definovaná sada řídících znaků (SYN,STX,ETX,DLE,...)


* Bitově orientované protokoly:

HDLC (ISO) - High-level Data Link Control 
-----------------------------------------
Historie:
- odvozen z protokolu SDLC (Synchronous Data Link Control) - z IBM SNA,
  přijato ANSI a pak ISO 3309, 4335, 7478, 7776, 7809
- původně pro komunikaci mainframe s terminály
- CCITT přijalo a modifikovalo jako LAP (Link Access Procedure) pro X.25,
  později opět modifikace CCITT jako LAPB (kompatibilnější s pozdější
  verzí HDLC)
- synchronní plně duplexní komunikace v konfiguraci dvoubodové i vícebodové
- stále používán (nebo jeho mutace LAP, LAPB, LAPD, LAPM, LAPF, ...),
  v ISDN, Frame Relay, X.25, jako enkapsulace na sériových linkách ve WAN,
  mezi modemy, ... 

 Přenosové režimy:
  > Normal Response Mode, NRM: primární řídící stanice a řada podřízených 
                               sekundárních
  > Asynchronous Response Mode, ARM: sekundární stanice smí samovolně začít
                                     komunikovat s primární
  > Asynchronous Balanced Mode, ABM: stanice současně primární i sekundární,
                                     každá smí samovolně zahájit vysílání
 Typy rámců: 
  > I (Information): uživatelská data ve spojově orientovaném režimu 
  > U (Unnumbered): nečíslované rámce, uživatelská data nebo řídící funkce
  > S (Supervisory): bez uživatelské informace, číslované, použití pro
                     navazování a rušení spojení, informace o stavu, potvrzování

 Formát rámce:
          01111110, adresa, control, data, checksum, 01111110
 
  Na prázdné linkce neustálý tok křídlových značek.

  adresa - použita na linkach s více terminály; na point-to-point linkách
           někdy použita pro rozlišeni příkazu a odpovědi, obvykle nevyužito

  control - seq #, potvrzování, ...
    I: 0,Seq#(3),P/F(1),Next#(3)
    S: 10,Type(2),P/F(1),Next#(3)
     Type:
     0: ack frame (RECEIVER READY,RR) - pokud není do čeho piggybackovat
     1: NAK (REJECT) - indikace chyby přenosu (pole Next# udává první
                       špatně přijatý rámec)
     2: RECEIVER NOT READY: jako typ 0 (potvrzuje přijetí, ale pozastavení
                       vysílače, přijímač má dočasné problémy, komunikace
                       se obnoví po RR, REJECT,...)
     3: SELECTIVE REJECT: žádost o retransmisi specifikovaného rámce, 
                       v SDLC a LAPB není použit (tam pouze režim go-back-N)

    U: 11,Type(2),P/F(1),Modifier(3)
     - pro řízení nebo nespolehlivou nespojovanou službu, v různych mutacích
       protokolu rozdílné použití (příkazy):

      DISC (Disconnect) - informace o vypínáni stanice
      SNRM (Set Normal Response Mode) - po přihlášení stanice na linku, vynucení
                                  seq # na 0, režim master-slave, pro terminály.
      SABM (Set Asynchronous Balanced Mode) - reset linky, oba partneři 
                                  na stejné úrovni.

      SNRME/SABME: jako SNRM/SABM, ale "extended" frame format, 7-bitová seq #
                              (užitečné zejména na linkách s velkým zpožděním,
                               např. družicové spoje).
      FRMR (Frame Reject) - indikuje, ze přišel rámec s nesprávnou sémantikou.

      UA (Unnumbered Acknowledgement) - potvrzování řídících příkazů v U rámcich
                 Sekvenení čísla nepotřebná, protože v jedne chvíli může být
                 vyslán jen jeden (nepotvrzený) příkaz


  Bit P/~F (Poll/Final):
   Význam poll: výzva terminálu k vysíláni (řízení řídícím počítačem).
   Význam final: při vysílání nastavuje terminál ve všech rámcích, mimo
                 posledního, bit na P (tedy not Final).

   Jiné použití: vynucení Next# (ACK) od protistanice v S rámci 
                 (namísto čekání na piggybacked informaci)

  Protokol sliding window, 3/7-bitova sekvenční čísla. 

.........................................................................


Z HDLC je odvozena řada protokolů, liší se délkou rámce a formátem
pole adresy a řídícího pole v rámci. Zpravidla je povolená podmnožina příkazu
HDLC, odpovídající režimu SABME.


LAPB: Link Access Procedure Balanced  
------------------------------------
 - podmnožina HDLC, pouze SABM režim,
   jiný formát řídícího pole, adresa využita pro specifikaci povelu
 - pouze na linkách bod-bod
 - povolené povely podmnožinou HDLC: RR,RNR,REJ,SABM,DISC,DM,UA,FRMR
 - číslování rámců modulo 8
 - používán v sítích X.25 (v tomto doporučení také specifikován)


LAPD: Link Access Procedure on D-Channel
----------------------------------------
 - mutace HDLC, použití v ISDN na 2.vrstvě u D-kanálu
 - pouze SABME režim, jinak odpovídá LAPB
 - řídící pole odpovídá extended režimu HDLC, 8 bitů pro seq. čísla
 - adresové pole 1-2 oktety:
    SAPI - Service Access Point Identifier
    C/R  - Command/Response
    TEI  - Terminal Equipment Identifier


LAPF: Link Access Procedure on Frame Relay
------------------------------------------
 - rámce 5-8189 B
 - nemá řídící pole, spojeno s adresovým polem:
    DLCI: Data Link Connection Identifier
    C/R - Command/Response
    DE - Discard Eligible - nastavuje stanice pro explicitní označení
         provozu s nižší prioritou nebo frame handler při překročení CIR
         (Commited Information Rate, dohodnutá rámcová rychlost)
    FECN - Forward Explicit Congestion Notification - síť oznamuje příjemci
           stav přetížení
    BECN - Backward Explicit Congestion Notification - síť nebo příjemce, který
           obdržel FECN oznamuje odesílateli stav přetížení

  
LAPM: Použití v modemech
------------------------


Logical Link Control - IEEE 802.2
---------------------------------
Podle ISO 8802 se linková vrstva OSI dělí na podvrstvy MAC (Media Access
Control) a LLC (Logical Link Control). Informace a formáty rámců LLC jsou
nezávislé na typu použité sítě. LLC vrstva přidává hlavičku LLC, vychází z HDLC.

Funkce vrsvy LLC
- error-control, flow-control
- zakrývá rozdíly mezi sítěmi projektu 802, společný formát a rozhraní 
  k síťové vrstvě

Typy služeb:
 1) nespojovaná služba nepotvrzovaná - nejrozšířenější, není flow control
    a error control, detekci chyb a zahazování chybných rámců řeší MAC vrstva
 2) spojovaná služba - služba s navazováním logického spojení, korekce chyb,
    flow control, sekvencování rámců. Režim odpovída Extended Asynchronous
    Balanced Mode v HDLC.
 3) nespojovaná služba s potvrzováním - nejméně využívaná

Formát rámce LLC: 
           DSAP, SSAP, řízení, data
           (umístěn v datové části MAC rámce)

 DSAP-Destination Service Access Point, SSAP-Source Service Access Point
 - identifikují komunikující procesy na cílovém a zdrojovém počítači

 V poli řízení podmnožina příkazů z HDLC.

 Pozn.: Enkapsulace SNAP:
  Je-li DSAP=AAh, řízení=AAh: jde o tzv. SNAP enkapsulaci. V tomto případě 
  za polem řízení následuje identifikace výrobce (03h) a 2-bajtový kód protokolu
  (odpovídající EtherType z MAC rámce 802.3). Lokální sítě podporující
  enkapsulaci LLC musí podporovat i enkapsulaci SNAP. 


Serial Line IP (SLIP)
---------------------

- RFC-1055.
- pro provoz na dvoubodových asynchronních sériových linkách

- definuje velmi jednoduchý formát rámce, přímo vkládá IP-pakety:

  vyhrazuje znaky END (0300) a ESC (0333).
  * END ukončuje rámec, někdy se používá i před začátkem paketu, aby přijímač
    zahodil případná přijatá data, která na lince vznikla vlivem rušení
  * místo znaku END v datech se pošle ESC 0334, místo ESC se pošle ESC 0335

  Délka rámců (podle implementace BSD) 1006 B.

- nezabezpečuje detekci chyb při přenosu
  Pozn.: IP-protokol má kontrolní součet pouze ze záhlaví a kontrolní součet 
         v protokolu UDP je nepovinný).

 - rámec protokolu SLIP nenese informaci o přenášeném protokolu síťové vrstvy,
   není tedy na jedné lince možné přenášet více protokolů současně

 - jednoduchý, minimální konfigurace (IP adresy obou stran),
   žádné SW dohadování parametrů mezi konci linky

Compressed SLIP (CSLIP), RFC-1144:
 - komprese hlaviček IP, stavový - na jedné lince lze současně komprimovat
   max. 255 spojení => nevhodné pro propojování páteřních směrovačů.


Point to Point Protocol (PPP)
-----------------------------
 - RFC 1661, 1662
 - rámce podobné HDLC (U-rámce)
 - na synchronních i asynchronních linkách
 - dvoubodový spoj
 - detekce chyb v rámci
 - možnost přenosu více protokolů na lince současně
 - možnost autentizace (PAP,CHAP)
 - dohoda mezi konci linky na parametrech přenosu 

 Pomocné protokoly:
  Link Control Protocol (LCP) - navazování spojení, autentikace, testování
                                spojení, ...


  Network Control Protocols (NCP) - skupina protokolů, specifických pro
        jednotlivé přenášení síťové protokoly, slouží pro dohadování parametrů
        specifických pro jednotlivé síťové protokoly. Např. IPCP je pro protokol
        IP, IPXCP pro IPX atd. Každý takový protokol je popsán ve zvláštním RFC.

Možnosti autentikace uživatelů:

 - terminálový dialog: zadání jména a hesla ještě před spuštěním protokolu PPP

 - Protokol Password Authentication Protocol (PAP): Jméno uživatele a heslo
                                              zasíláno jako cleartext

 - Challenge Handshake Authentication Protocol (CHAP):
     Oba konce sdílí stejný šifrovací klíč (symetrické šifrování). Stanice,
     která autentizaci inicializujei, vygeneruje náhodný řetězec jako 
     dotaz, který odešle druhé straně. Druhá strana tento řetězec zašifruje
     pomocí sdíleného klíče a odešle zpět, příjemce zašifruje původní řetězec
     svým heslem a porovná s přijatým. Heslo tedy nikdy neputuje linkou
     v čisté podobě.