11/2/2013 12:27new

Předmětová anketa je sice pro studenty krásnou cenou útěchy, ale rozhodně
nedodává mnohdy klíčové informace. S koncem semestru jsem tedy vytáhl své
studenty do hospody na takové neformální zhodnocení. Jedna z poznámek, které
považuju za klíčové, byla že příklady které jsme brali na cvičeních jsou příliš
učebnicové. Namísto jednotlivých příkladů jsem se tedy rozhodl zpracovat jeden
rozsáhlý, na kterém budou studenti postupně pracovat a na konci hodiny jej
kombinovat do většího celku.

Úvod a terminologie: V ranných fázích počítačových sítí vznikla potřeba přenášet
mezi univerzitami a jejich počítači (mnohdy o zcela rozdílných vlastnostech)
nějakým jednoduchým způsobem zprávy, soubory a stejně tak na vzdáleném stroji
pracovat.

O 1. a 3. úkol se postaral zejména protokol Telnet, elegantní ve své
jednoduchosti. Je prostý - zajišťuje pouze to že se na vzdálený stroj připojíte
a cokoliv co napíšete u sebe a odentrujete se dostane na druhou stranu. Problém
číslo 2 pak řeší protokol FTP, který je i dnes masivně využíván a bez něhož by
nikdy nedošlo k tak velkému rozvoji internetu.

FTP jako takové je založeno na dvou komunikačních kanálech - kontrolním a
datovém. Kontrolní kanál je v podstatě jen obyčejný telnet, pouze ho nenajdeme
na portu pro tuto službu obvykém (port - číslo 0-65535 - je jakási značka, která
určuje program kterému data zasíláme na cílovém stroji). Datový kanál pak slouží
pro samotný přenos souborů a informací o nich. Původní specifikace počítala s
různými druhy počítačů, pozdější verze přinesly řadu rozšíření. Protože se ale
má jednat o výukový příklad, budou mít studenti za úkol napsat pouze velmi
jednoduchého klienta ovládaného z příkazové řádky.

Příkazy:
open <host>[ port]
open <host>[:port]
-- otevřou ftp spojení
list
-- získá výpis adresáře na ftp
cd
-- změní pracovní adresář na ftp
get <soubor na ftp> [cílový adresář]
-- stáhne soubor
put <soubor [cílový adresář na ftp]
-- nahraje soubor
quit
-- ukončí program

Vlastní cvičení jsem pak rozvrhl takto:
1) takřka identické s ostatními skupinami, základní orientace a pojmy,
představení zbytku semestru
2) prvotní návrh uživatelského rozhraní, čtení příkazů uživatele ze vstupu a
odpověď programu
3) identické cvičení s ostatními skupinami
4) parsování (analýza) příkazů uživatele, program už pozná co po něm uživatel
vlastně chce, program vypíše na obrazovku příkazy pro telnet; jednoduché
testování pomocí programů telnet a netcat
5) nahrazení statických bufferů v programu za dynamicky alokované buffery (tzn.
program bude mít menší průměrnou aktuální spotřebu paměti)
6) spojovaný seznam, struktura iovec, načtení souboru a jeho příprava pro přenos
7) struktury, oprávnění k souborům, výpis vzdáleného adresáře
8) přenos souborů
9) nedodělky, testování kódu
10) nácvik na zápočtový příklad
11) bezpečnost kódu, testy
12) zápočtový příklad