Automatický odevzdávací server

Podobné dokumenty
Úloha č.1 - TCP Server

TFTP Trivial File Transfer Protocol

SPINEL. Komunikační protokol. Obecný popis. Verze 1.0

Počítačové sítě Transportní vrstva. Transportní vrstva

Analýza aplikačních protokolů

PROTOKOL RDS. Dotaz na stav stanice " STAV CNC Informace o stavu CNC a radiové stanice FORMÁT JEDNOTLIVÝCH ZPRÁV

6. Transportní vrstva

TMU. USB teploměr. teploměr s rozhraním USB. měření teplot od -55 C do +125 C. 26. května 2006 w w w. p a p o u c h. c o m

Zabezpečení dat při přenosu

Vlastnosti podporované transportním protokolem TCP:

ZAŘÍZENÍ PRO VZDÁLENÝ SBĚR A PŘENOS DAT FIRMWARE

Operační systémy. Cvičení 1: Seznámení s prostředím

Přednáška 3. Opakovače,směrovače, mosty a síťové brány

Počítačové sítě II. 14. Transportní vrstva: TCP a UDP. Miroslav Spousta, 2005

Platební systém XPAY [

Protokoly: IP, ARP, RARP, ICMP, IGMP, OSPF

Transportní vrstva. RNDr. Ing. Vladimir Smotlacha, Ph.D.

CCNA 2/10 Další funkce TCP/IP Aleš Mareček Jaroslav Matějíček 1

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

1. Připojení k Internetu

1. DATOVÉ SCHRÁNKY OBECNÝ PŘÍSTUP K DATOVÉ SCHRÁNCE DATOVÉ ZPRÁVY... 3

Connection Manager - Uživatelská příručka

Datum vytvoření. Vytvořeno 18. října Očekávaný výstup. Žák chápe pojmy URL, IP, umí vyjmenovat běžné protokoly a ví, k čemu slouží

Elektronická evidence tržeb Seminář pro vývojáře pokladních systémů

Počítačové sítě Systém pro přenos souborů protokol FTP

7. Aplikační vrstva. Aplikační vrstva. Počítačové sítě I. 1 (5) KST/IPS1. Studijní cíl. Představíme si funkci aplikační vrstvy a jednotlivé protokoly.

Identifikátor materiálu: ICT-3-03

Popis programu EnicomD

Internet. Počítačová síť, adresy, domény a připojení. Mgr. Jan Veverka Střední odborná škola sociální Evangelická akademie

Dokumentace. k modulu. podnikový informační systém (ERP) Datové schránky

Elektronická pošta. elementární služba, výchozí pro některé další jedna z prvních síťových služeb vůbec. základní principy popisují

Základy počítačových sítí Model počítačové sítě, protokoly

Telemetrický komunikační protokol JETI

Software pro vzdálenou laboratoř

Protokol TELNET. Schéma funkčních modulů komunikace protokolem TELNET. Telnet klient. login shell. Telnet server TCP/IP.

JAK ČÍST TUTO PREZENTACI

Vyčtení / zapsání hodnot z/do OMC8000 pomocí protokolu UDP

Funkční specifikace ABOKWS. Aplikační rozhraní elektronického bankovnictví ABO-K. Verze 0.5

Komunikační protokol MODBUS RTU v displejích TDS

Průvodce studenta WebCT

Protokol TELNET. Schéma funkčních modulů komunikace protokolem TELNET. Telnet klient. login shell. Telnet server TCP/IP TCP/IP.

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

mbank.cz mtransfer Okamžitá notifikace o mtransferu Dokumentace pro externího partnera

SEMESTRÁLNÍ PROJEKT Y38PRO

TAOS321. Administrace. příručka správce systému. informační terminál systému JSVV

Ing. Jitka Dařbujanová. , SSL, News, elektronické konference

Nastavení telefonu Nokia N9

Komunikační protokol MODBUS RTU v displejích TDS

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Money S3 - Elektronická podání 1. Obsah

Popis funkcí a parametrů programu. Reliance External communicator. Verze 1.5.0

Faxový server společnosti PODA s.r.o.

Měření teploty, tlaku a vlhkosti vzduchu s přenosem dat přes internet a zobrazování na WEB stránce

Nastavení telefonu Nokia Lumia 925

Nastavení telefonu Nokia 3220

Nastavení telefonu Samsung S5610

pozice výpočet hodnota součet je 255

Nastavení telefonu Windows Phone 8S by HTC

UŽIVATELSKÁ PŘÍRUČKA PRO HOMEBANKING PPF banky a.s.

Analýza protokolů rodiny TCP/IP, NAT

Použití UART a radia na platformě micro:bit

Dispatcher PDA Dokumentace

Y36PSI Protokolová rodina TCP/IP

Cvičení č. 3. Sdílené prostředky a synchronizace Program Banka. 4 body

Nová áplikáce etesty Př í přává PC ž ádátele

Reliance. Komunikační driver Johnson Controls verze 1.5.4

Nastavení telefonu Samsung S5220 Star 3

Úvod do počítačových sítí

Úvod Virtuální kanál TCP Datagramová služba UDP URL TCP, UDP, URL. Fakulta elektrotechnická

Inovace a zkvalitnění výuky prostřednictvím ICT Počítačové sítě Vrstvový model TCP/IP Ing. Zelinka Pavel

Nastavení telefonu Nokia 113

Internetový obchod ES Pohoda Web Revolution

Nápověda pro možnosti Fiery 1.3 (klient)

EU-OPVK:VY_32_INOVACE_FIL9 Vojtěch Filip, 2013

Nastavení telefonu LG G2 D802

LAN adaptér. Návod k použití

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Fakulta informačních technologií

Komunikační protokol

PODMÍNKY POSKYTOVÁNÍ PŘÍSTUPU K PORTÁLU NAMĚŘENÝCH DAT POMOCÍ WEBOVÝCH SLUŽEB SPOLEČNOSTI ČEZ DISTRIBUCE, A. S.

Komunikační protokoly počítačů a počítačových sítí

Super Hot Multiplayer vzdálené sledování finančních dat. Konfigurace sítě. Strana: 1 / 8

Práce s ovými schránkami v síti Selfnet

PRT3 tiskový modulu manuál pro EVO ústředny

plussystem Příručka k instalaci systému

Počítačové sítě 1 Přednáška č.6 Transportní vrstva

Semestrální projekt do předmětu SPS

Kódování signálu. Problémy při návrhu linkové úrovně. Úvod do počítačových sítí. Linková úroveň

ČSOB Business Connector Instalační příručka

Modul účetnictví: Kontrolní výkaz DPH (SK) Podklady ke školení

Kerio IMAP Migration Tool

SDC aplikace. Podrobný návod na zprovoznění RS485 RTS vysílače

POKYNY K REGISTRACI PROFILU ZADAVATELE

Nastavení telefonu LG P880 Optimus 4X HD

ROZŠÍŘENÉ FAXOVÉ FUNKCE

NAHLAŠOVÁNÍ UBYTOVANÝCH CIZINCŮ PŘES PORTÁL UBYPORT

Nastavení telefonu Nokia 515

Komunikační protokol MODBUS RTU v senzoru vlhkosti a teploty THT

Technologie počítačových sítí 8. přednáška

Transkript:

Automatický odevzdávací server http://baryk.felk.cvut.cz/ A7B36PSI a AD7B36PSI Počítačové sítě Jiří Smítka a Jan Kubr Katedra počítačů ČVUT v Praze, FEL Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Úloha č.1 - TCP Server a Client Situace Robot Karel se pohybuje po městě. Město tvoří 2-D plocha rozdělená na pole o souřadnicích (x,y). Ve městě nejsou žádné překážky. Robot umí provést krok vpřed, otočit se doleva a zvednout značku. Poskytuje také informaci o své pozici ve městě. Robot se může pohybovat pouze ve městě, mimo město havaruje. Město má rozměr 37 x 37 polí, souřadnice x a y mohou nabývat hodnot z intervalu <-18,18>. Na pozici (0,0) je značka. Úkol robota je dojít ke značce, zvednout ji a přečíst tajemství. Obecné schema komunikace Server představuje robota, kterého ovládá klient. Využívá se komunikačního protokolu TCP, server naslouchá na portu, který je zvolen v intervalu 3000 až 3999 (včetně). Protokol je textově orientovaný a lze jej vyzkoušet např. pomocí příkazu telnet adresa_serveru 3999 (v případě portu 3999). Po navázání spojení klientem vygeneruje server náhodně souřadnice robota a jeho orientaci. Souřadnice robota nechť jsou zvoleny v intervalu <- 17,17> pro x i y. Klient si zjistí souřadnice robota. Protože klient nemá možnost přímo zjistit pozici robota a jeho orientaci, musí provést např. otočení a 1 krok a porovnat nové souřadnice robota (z odpovědí s kódem 240). Poté dovede robota pomocí příkazů ke značce. Značku zvedne. Při úspěšném zvednutí server prozradí text pod značkou a ukončí spojení. Pokud na daném místě značka není, server ohlásí chybu a také ukončí spojení (klient má pouze jeden pokus na zvednutí značky). Bezprostředně po navázání spojení server odešle text se svojí identifikací zakončený znaky \r\n (konec řádky) (viz seznam odpovědí, kód 210). Dále již pouze čeká na příkazy klienta a posílá odpovědi na ně. Struktura dat Příkazy Příkazy posílá klient serveru. Struktura: oslovení + mezera + jméno příkazu zakončené znaky \r\n Příklad: \r\n Odpovědi Odpověď se posílá na každý příkaz. Struktura: kód <mezera> řetězec odpovědi zakončený znaky \r\n kde kód je číslo (textová reprezentace). Možné odpovědi: odpověď vysvětlení 210 Text pozdravu robota Počáteční identifikace posílaná serverem. Posílá server ihned po navázání spojení. 240 OK (x,y) Poslední operace byla úspěšná. Hodnoty x a y jsou nové souřadnice robota (textová reprezentace). 260 USPECH Text tajemství Úspěšné zvednutí značky. Zároveň přečte tajemství značky (řetězec znaků). 500 NEZNAMY PRIKAZ Zadaný příkaz nebyl rozpoznán. Nebyla provedena žádná akce. 530 HAVARIE Robot vyšel mimo město a pravděpodobně havaroval. 550 NELZE ZVEDNOUT ZNACKU Na zadané pozici se nenachází značka.

571 PROCESOR FUNGUJE Pokus o opravu procesoru, který je v pořádku. 572 ROBOT SE ROZPADL Robot měl vadný procesor a přesto měl provést krok. 580 SELHANI PROCESORU x Robot má vadný procesor číslo x (číslo od 1 do 9, textová reprezentace). Po odeslání odpovědí s kódem 260,530,550,571 a 572 se ihned ukončí spojení ze strany serveru. Po odeslání odpovědi s kódem 500 nebo 580 spojení zůstává navázané. V textu pozdravu robota (odpověď 210) je třeba nalézt oslovení, abychom mohli posílat robotovi příkazy. Oslovení se může ukrývat kdekoliv v textu pozdravu a lze ho nalézt jako podřetězec s formátem: Oslovuj mne JMÉNO. Jméno je řetězec libovolných znaků kromě \r, \n, \0 a tečky. Mezera nesmí být na začátku nebo na konci jména, uprostřed však ano. Jméno může být dlouhé až 512 bytů, minimálně však 1 byte. Na velikosti písmen ve jméně záleží. Není podporováno žádné kódování češtiny. Pokud použijete kódování češtiny, bude vše pravděpodobně chodit. V případě UTF může být problém, pokud druhý byte znaku obsahuje \r,\n,mezeru nebo tečku. V případě serveru není povoleno rekurzivní vnořování konstrukce Oslovuj mne Oslovuj mne Oslovuj mne Robote. Není též povoleno ani takové rekurzivní vnoření, kdy jedna z variant není platná, neboť přesahuje maximální povolenou délku. Příklady: Oslovuj _ mne _ Honzo. Honzo Oslovuj _ mne _ Oslovuj _ mne _ Honzo.. nepovolená konstrukce (rekurze), klient může chápat oslovení různě Oslovuj _ mne _.Oslovuj _ mne _ Honzo. Honzo (povolená konstrukce, není rekurze, první jméno není platné, protože je prázdné, je to tedy součást textu pozdravu) Oslovuj _ mne Oslovuj _ mne _ Honzo. Honzo (povolená konstrukce, není rekurze, první jméno není platné, protože začíná mezerou, je to tedy součást textu pozdravu) Oslovuj _ mne _ Jene _.Oslovuj _ mne _ Honzo. Honzo (povolená konstrukce, není rekurze, první jméno není platné, protože končí mezerou, je to tedy součást textu pozdravu) Oslovuj _ mne _ Jene. Oslovuj _ mne _ Honzo. nepovolená konstrukce, víc než jedno oslovení splňující syntaxi Robot může mít poruchu a nesplnit příkaz (odpověď 580). V tomto případě je třeba robota opravit příkazem OPRAVIT a poté zavolat původní příkaz znovu. Opravit lze pouze procesor v poruše, jinak robot ukončí spojení se zprávou 571. Pokud má robot vadný procesor a je volán příkaz, bude spojení ukončeno se zprávou 572. Na začátku má robot všechny procesory v pořádku. Robot nevydrží větší množství kroků a po desátém příkazu (těsně po sobě) mu už určitě některý procesor selže. Může se však selhat i dříve. Seznam příkazů Příkaz Syntaxe: oslovení \r\n Význam: Provede krok robota směrem, kterým je robot orientován. Po provedení tohoto příkazu se souřadnice x nebo y zvýší nebo sníží o jedničku. Oslovení je třeba zjistit z odpovědi 210. Robot nesmí být porouchaný, jinak se rozpadne (zpráva 572). Pokud není porouchaný, může se porouchat (zpráva 580). Kódy možných odpovědí: 240,530,580,572 Příkaz VLEVO

Syntaxe: oslovení VLEVO\r\n Význam: Změní orientaci robota. Robot se otočí o 90 stupňů doleva. Oslovení je třeba zjistit z odpovědi 210. Kódy možných odpovědí: 240 Příkaz ZVEDNI Syntaxe: oslovení ZVEDNI\r\n Význam: Zvedne značku. Pokud není robot na souřadnici (0,0), dojde k chybovému hlášení serveru. Po zavolání tohoto příkazu server vždy ukončí spojení. Oslovení je třeba zjistit z odpovědi 210. Kódy možných odpovědí: 260,550 Příkaz OPRAVIT Syntaxe: oslovení OPRAVIT n\r\n kde n je číslo od 1 do 9 a označuje číslo procesoru, který selhal. Význam: Opraví zadaný procesor robota. Opravit lze pouze ten procesor, který byl odpovědí 580 označen jako vadný. Pokud má robot vadný procesor a nebude opraven, nelze provést další příkaz. Ostatní příkazy jsou vykonány. Oslovení je třeba zjistit z odpovědi 210. Kódy možných odpovědí: 240,571 Jiné příkazy robot nezná. Na chybně zadané příkazy server reaguje odpovědí s kódem 500. Příklad komunikace kurzíva = text zobrazený v terminálu při spuštění a po ukončení spojení tučně = server (robot) normálně = klient xsmitka@fray1:/home/zam/xsmitka>telnet baryk.felk.cvut.cz 3999 Trying 147.32.232.173 Connected to baryk.felk.cvut.cz. Escape character is '^]'. 210 Ahoj, tady je robot verze 1.6. Oslovuj mne. VLEVO 240 OK (13,7) 240 OK (12,7) 580 SELHANI PROCESORU 8 OPRAVIT 8 240 OK (12,7) 580 SELHANI PROCESORU 3 OPRAVIT 3 240 OK (12,7) 240 OK (11,7)

580 SELHANI PROCESORU 3 OPRAVIT 3 240 OK (11,7) 240 OK (10,7) 580 SELHANI PROCESORU 9 OPRAVIT 9 240 OK (10,7) 240 OK (9,7) 240 OK (8,7) 240 OK (7,7) 240 OK (6,7) 240 OK (5,7) 240 OK (4,7) 240 OK (3,7) 240 OK (2,7) 240 OK (1,7) 240 OK (0,7) VLEVO 240 OK (0,7) 240 OK (0,6) 240 OK (0,5) 240 OK (0,4) 240 OK (0,3) 580 SELHANI PROCESORU 7 OPRAVIT 7 240 OK (0,3)

240 OK (0,2) 240 OK (0,1) 240 OK (0,0) ZVEDNI 260 USPECH Kobyla ma maly bok. Connection to baryk.felk.cvut.cz closed by foreign host. xsmitka@fray1:/home/zam/xsmitka> Požadavky programuje se jak klientská, tak serverová část, klient umí vyzvednout tajemství zcela automaticky bez zásahu člověka (během celého spojení), klientská i serverová část musí 100% fungovat s protistranou na serveru baryk.felk.cvut.cz (viz níže), klient má možnost navázat se stejným serverem více spojení paralelně i postupně za sebou (bez restartu serveru), server i klient musí být stabilní a odolní proti neočekávaným vstupům, programy by měly vypisovat alespoň základní informace o svém stavu (např. posílané a přijímané příkazy či odpovědi), IP adresa nebo DNS jméno serveru a port se zadávají jako parametr v příkazové řádce při spuštění klienta (tzn. není zadrátovaná ve zdrojového kódu), syntaxe viz níže, klient viditelně vypíše v případě úspěšného zvednutí značky její tajemství, server musí vypisovat informace o aktuálně obslouženém klientovi (aby bylo možno říct, komu byla odpověď odeslána), zdrojový text musí být komentovaný, v hlavičce všech zdrojových textů musí být uveden autor, povolené programovací jazyky jsou následující: Java, C, C++. při implementaci pište klientskou i serverovou část do jednoho zdrojového souboru. Tento soubor můžete pojmenovat jakkoliv, avšak s příponou.c,.cpp nebo.java. Tyto soubory musí být přeložitelné řádkovým překladačem (gcc/g++/javac). Odevzdává se pouze tento jeden zdrojový kód, neimplementujte tedy nic do dalších souborů mimo něj. pokud použijete jazyk Java, napište na začátek zdrojového textu package robot a třídu s metodou main pojmenujte Robot. Můžete použít připravenou šablonu, která je k dispozici ke stažení mezi příklady programů. po spuštění se program musí rozhodnout, zda je server nebo klient, a to podle parametrů v příkazové řádce: role klienta:./robot <server> <port> role serveru:./robot <port> kde <server> je jméno nebo IP adresa serveru a <port> je číslo portu, na kterém server naslouchá.

každý student má povinnost průběžně uploadovat aktuální stav svého zdrojového kódu přes WWW rozhraní serveru baryk.felk.cvut.cz. Předpokládá se, že vždy po ukončení práce na programu nahrajete svůj kód na server Baryk. Také se předpokládá, že pokud k danému dni není záznam o uploadu Vašeho programu, tak jste na programu tento den nepracoval(a). Jinak řečeno, uploadováním svého programu vykazujete činnost (stejně jako v komerčním prostředí) a zároveň se chráníte před obviněním z nepoctivého jednání (přečtěte si obecné požadavky na úlohy na hlavní stránce předmětu). Implementační poznámky nepoužívejte pro komunikaci metodu PrintStream.println(příkaz). Zjednodušeně udělá ekvivalent následujícího: print(příkaz + System.getProperty( line.separator ), kde line.separator je na různých platformách různý. Používejte metody, které znáte a víte přesně, co dělají. BufferedReader.readLine() se pro server opravdu nehodí, viz Javadoc - BufferedReader.readLine(). Dejte si pozor na časovou složitost IO operací, i když se to nezdá, mohou výrazně zpomalit běh programu, viz. malý test rychlosti. Testování Testování klienta Referenční server pro první úlohu běží na adrese baryk.felk.cvut.cz na portu 3999. Proti tomuto serveru lze zkoušet Vaše řešení klienta. Funkčnost serveru lze ověřit zadáním příkazu: telnet baryk.felk.cvut.cz 3999 Testování serveru Testování Vašeho serveru testovacím klientem není možné provádět přímo z učebny (neprojde NATem). Proto bylo na serveru Baryk vyrobeno rozhraní, přes které můžete uploadovat svůj zdrojový kód a Baryk jej: 1. zaarchivuje 2. přeloží 3. spustí v roli serveru 4. na požádání otestuje Překlad bude proveden podle použitého jazyka takto: C gcc -o robot source.c -lpthread C++ g++ -o robot source.c -lpthread Java javac source.java Pokud není Váš počítač schován za NATem, lze v rámci sítě ČVUT využít i testování přes síť. Na webové stránce http://baryk.felk.cvut.cz/cgibin/robottcp zadáte IP adresu a port, na kterém běží Vaše implementace serveru. Po odeslání této informace bude Váš server otestován naším klientem. Výsledek bude zobrazen. K dispozici máte seznam nejčastějších chyb, které mohou při testování nastat, a jejich popis.

Termín a způsob odevzdání Úlohu je třeba odevzdat do 8. týdne (podle termínu Vašeho cvičení, tj. cvičení, kam jste zapsáni podle rozvrhu). Za každý týden prodlení je penalizace -0,5 bodu (jako přelom týdne se počítá konec cvičení). Úlohu není možné odevzdat po zápočtovém týdnu. Odevzdat lze pouze takovou úlohu, která: 210) Postup odevzdání: je přeložitelná na serveru baryk.felk.cvut.cz komunikuje se serverem baryk.felk.cvut.cz (v případě klienta; stačí otevřít spojení a přijmout úvodní zprávu 210) je schopná testování přes rozhraní serveru baryk.felk.cvut.cz (v případě serveru; testovací klient musí správně přijmout úvodní zprávu 1. otestujte svoje řešení proti serveru Baryk (klienta i server) i svého klienta a servera proti sobě 2. připravte si zdrojové texty k nahlédnutí 3. připravte si internetový prohlížeč na server Baryk a připravte se na překlad zdrojového kódu 4. spusťte terminál, nastavte adresář s Vaší úlohou jako aktuální a zadejte příkaz ls -l 5. zavolejte cvičícího Bodování Za odevzdání automaticky získáváte 8 bodů, ze kterých Vám může být stržena penalizace: server nezpracovává požadavky klienta paralelně: -2 chybně implementovaný protokol na straně klienta: -3 chybně implementovaný protokol na straně serveru: -3 nestabilita: -3 malá odolnost vůči nestandardním vstupům: -3 klient nevyzvedává tajemství plně automaticky: -3 chyby v programu, které se neprojevily přímo: dle povahy -1 až -5 nečistý zdrojový kód: -1 zdrojový kód nebyl průběžně uploadován na server Baryk: -5

Úloha č.2 - UDP Klient Situace Robot Karel byl vyslán na průzkumnou misi do hlubokého vesmíru na planetu Indri VIII. Bohužel však během několika hodin po přistání přestal komunikovat. V řídícím centru si dlouho vědci mysleli, že robot havaroval, protože jeho poslední hlášení obsahovalo řetězec 594 ROBOT SE ROZPADL. Kód 594 sice nebyl ve specifikaci definovaný, vědci se však domnívali, že jde o malou chybu vzniklou během přenosu. Přelom nastal po 14 dnech, kdy do řídícího centra přišla náhle zpráva: 200 Au., která vyvolala paniku. Okamžitě bylo zahájeno skenování, které přineslo pouze dva nové poznatky. Prvním poznatkem byl fakt, že robot stále žije a občas komunikuje. Druhým závěrem bylo zjištění, že si ohnul tykadlo a ztratil teplotní senzor. Nastalo období, kdy vědci zkoušeli všechno, co je napadlo, jen aby získali kontrolu nad robotem. Nedařilo se. Až jednou kdosi omylem vyzkoušel přečíst data ze ztraceného teplotního senzoru. Teplotu sice vědci nezjistili, avšak nastal významný moment: procesor se během čtení teploty zrestartoval tak šťastně, že jeho datový segment byl nastaven na hodnotu, kterou nebohý robot celou dobu hledal. Jak bylo později zjištěno, ohnuté tykadlo zkratovalo hlavní procesor a došlo k opakovaným restartům robota. Když po dvou týdnech tykadlo vlivem atmosféry zkorodovalo, procesor obnovil činnost, ovšem bez několika klíčových bloků. Blok zavaděče operačního systému sice fungoval, operační systém však nezavedl, protože jeden z CD-ROMů měl v sobě díru. Navíc byl zavaděč zmatený a tak se svou špatnou hodnotou datového segmentu, kterou získal z díry v CD-ROMu, rozesílal zmatené zprávy. Poté, co vědci pochopili, co se s robotem děje, úspěšně obnovili zavaděč a nastartovali robota do režimu, kdy lze načíst základní údaje ze senzorů a také provést upload nového firmwaru. V tomto režimu se robot nachází i nyní. Úkoly Vaším úkolem je: 1. načíst fotografii okolí, aby mohli vědci zjistit, v jakém terénu se robot nachází 2. provést upload nového firmwaru do robota Obecné schema komunikace Robot komunikuje pomocí protokolu UDP a přijímá data na portu 4000. Proces zavaděče v robotovi budeme nazývat serverem a proces, který s robotem komunikuje, klientem. Formát paketu identifikátor 'spojení' sekvenční číslo číslo potvrzení příznak data 4B 2B 2B 1B 0-255B identifikátor 'spojení' - vygenerovaný serverem (pro umožnění transportu dat více souborů najednou), sekvenční číslo - číslo prvního byte v posílaných datech,

číslo potvrzení - číslo očekávaného byte v přijímaných datech (číslo potvrzení + délka dat), příznak - uveden dále, data - přenášená data Identifikátor spojení a sekvenční čísla se přenášejí v reprezentaci network byte order (big endian). Příklad: dekadicky hexadecimálně pořadí bytů 1234 04D2h 04h D2h 34566 8706h 87h 06h Identifikátor spojení Identifikátor spojení je nenulové číslo. Při navazování spojení posílá klient identifikátor spojení nastavený na nulu. Při další komunikaci použije klient identifikátor spojení, který mu vrátí server v prvním paketu. číslo bitu Příznaky 7 6 5 4 3 2 1 0 příznak - - - - - SYN FIN RST příznak SYN FIN RST význam Otevření nového spojení. Posílá klient i server (pouze) na začátku v prvním paketu. V datové části musí být právě 1 byte s kódem příkazu. Ukončení spojení. Posílá klient i server, pokud již nemají žádná další data k odeslání. Paket s nastaveným příznakem FIN již nemůže obsahovat žádná data. Ukončení spojení nelze odvolat. Oba směry spojení se uzavírají zvlášť. Sekvenční číslo se po odeslání FIN již nesmí zvětšit. Zrušení spojení kvůli chybě. Posílá klient i server v případě detekování logické chyby v hodnotách v hlavičce. Např. přijatý paket neobsahuje příznak SYN a ID spojení není evidováno. Nebo je hodnota potvrzovacího čísla menší, než byla v posledním přijatém paketu (klesá). Pozor na přetečení sekvenčních a potvrzovacích čísel. Žádná z komunikujících stran po odeslání paketu s příznakem RST již dále neukončuje spojení standardním způsobem - spojení je přenosem paketu s příznakem RST definitivně ukončeno. Jednotlivé příznaky (SYN, FIN, RST) nelze spolu kombinovat. Sekvenční číslo a číslo potvrzení Sekvenční číslo je pořadové číslo prvního bytu v proudu posílaných dat. Na začátku je toto číslo nastaveno na nulu. Nastavení příznaku SYN nebo FIN toto číslo nemění. Číslo potvrzení sděluje protistraně pořadové číslo očekávaného bytu v proudu přijímaných dat. Potvrzuje zároveň všechny byty s nižším pořadovým číslem. Tato čísla nemají znaménko a mohou přetéct. Přetečení nemá na komunikaci vliv. Data

Délka dat je určena velikostí paketu mínus velikost hlavičky. Poslat lze najednou maximálně 255 bytů dat, takže nejmenší velikost datagramu je 9 B (pouze hlavička) a největší 9 + 255 = 264 B. Data lze poslat pouze v paketu bez nastaveného příznaku FIN a RST. Pokud má paket nastaven příznak SYN, musí být v datové část 1 byte s kódem příkazu. Data poslaná klientem i serverem se v číslují pomocí sekvenčního čísla, avšak pouze tehdy, pokud není nastaven žádný příznak (zejména SYN). Popis protokolu Navázání spojení Iniciátorem spojení je vždy klient. Klient pošle první datagram s příznakem SYN a s identifikátorem spojení, sekvenčním číslem a číslem potvrzení nastaveným na nulu. Datová část musí obsahovat právě 1 byte s kódem příkazu: příkaz 01h 02h význam Download fotografie okolí Upload nového firmwaru Server odpoví datagramem s nastaveným příznakem SYN, nenulovým identifikátorem spojení a se sekvenčním číslem a číslem potvrzení nastavenými na nulu. Datová část obsahuje 1 byte s kódem příkazu, který bude proveden. Po přijetí tohoto datagramu klientem je navázáno spojení. V dalším paketu začne klient nebo server odesílat data (podle poslaného příkazu). Pokud se ztratí paket s příznakem SYN odeslaný klientem, musí klient po 100 ms odeslat nový. Pokud se ztratí paket s příznakem SYN odeslaný serverem, musí klient po 100 ms odeslat nový SYN paket. V případě downloadu začne zřejmě server odesílat data, klient však nezná číslo spojení a tak tato data nemůže přijmout. Toto serverem polootevřené spojení se po 20. opakování stejného paketu uzavře (bude odeslán paket s příznakem RST a nastaveným identifikátorem spojení). V případě uploadu se toto spojení uzavře po 20. opakování SYN paketu. Poznámka: Data odeslaná serverem budou zcela určitě doručena klientovi, který o spojení žádal. Zdálo by se tedy, že v případě downloadu nemusí server odesílat paket s příznakem SYN (mohl by odeslat rovnou část dat). Protože však klient může podle této specifikace navázat více spojení najednou, tedy odeslat více inicializačních paketů najednou (třeba s různými příkazy), musí klient počkat na SYN paket s číslem spojení. Potom si také podle kódu příkazu (v datové části v odpovědi od serveru) může správně přiřadit čísla spojení. Přenos dat Data lze posílat až po navázání spojení. Posílání dat je neslučitelné s nastavováním libovolných příznaků (SYN, RST, FIN) (v této terminologii nechápeme příkaz v prvním paketu poslaným klientem jako data). V dalším textu nazveme vysílačem tu stranu, která data odesílá a přijímačem protistranu. Pokud posílá některá ze stran soubor dat delší než 255 bajtů (což je v této úloze vždy), používá se okénkové potvrzovací schéma s fixní velikostí okénka W = 2040 bytů a timeoutem Tout = 100 ms.

Vysílač se snaží mít v komunikačním kanále právě tolik nepotvrzených bytů odesílaného proudu dat, jako je velikost okénka. Při zahájení komunikace zapíše do kanálu W bytů a čeká na potvrzení. Přijímač reaguje na všechny příchozí pakety odesláním potvrzovacího paketu (paketu s nastaveným potvrzovacím číslem). Potvrzovací číslo popisuje pořadové číslo očekávaného bytu v proudu přijímaných dat, takže každé potvrzovací číslo potvrzuje příjem všech dat až do tohoto pořadového čísla (bez něj). Pokud přijme přijímač data mimo pořadí, zapamatuje si je a odešle potvrzovací číslo nastavené za poslední přijatý byte v proudu dat bez mezer. Jakmile jsou mezery zaplněny nově přijatými daty, posune přijímač potvrzovací číslo tak, aby opět ukazovalo za poslední přijatý byte v celistvém proudu přijímaných dat. Data mimo pořadí jsou tedy nakonec využita, přijímač je však zprvu nepotvrzuje. Potvrzuje vždy pouze přijatý datový proud bez mezer. Jakmile vysílací strana přijme paket s takovým potvrzením, které snižuje počet nepotvrzených dat v odesílaném proudu, odešle další data, tak, aby bylo v kanále opět W nepotvrzených bytů (říkáme, že posune okénko). Vysílač si pamatuje čas odeslání posledního paketu (označme T). Pokud server nepřijme do času T + Tout žádné nové potvrzení, které snižuje počet nepotvrzených dat, odešle vysílač W bytů od nevyššího přijatého potvrzovacího čísla (říkáme, že odešle celé okénko). Nastaví také T na novou hodnotu. Vysílač posílá vždy maximální možné množství dat v jednom paketu (255 bytů). Vyjímkou je poslední datový paket, který může obsahovat méně dat. Pokud vysílač přijme 3x po sobě stejné potvrzovací číslo, odešle ihned do kanálu 1 paket s maximálním možným množstvím dat od pořadového čísla shodného s přijatým potvrzovacím číslem a nastaví T na novou hodnotu. Ukončení spojení Pokud vysílač odešle celý soubor a má všechna odeslaná data potvrzená, uzavře spojení nastavením příznaku FIN. Tento příznak nelze kombinovat s odesláním posledních dat. Přijímač vzápětí odešle také paket s příznakem FIN. Spojení je oboustranně ukončeno v momentě, kdy obě strany, které již odeslaly paket s nastaveným příznakem FIN, obdrží paket s nastaveným příznakem FIN a potvrzovacím číslem se stejnou hodnotou, jako je sekvenční číslo. Pokud dojde 20x po sobě k opakovanému odvysílání paketu se stejným sekvenčním číslem, je spojení přerušeno, klient musí vypsat chybu při přenosu. To platí i při uzavírání spojení, kdy je odesílán příznak FIN. Příkazy příkaz 01h - fotografie okolí Jakmile robot odešle první paket s nastaveným příznakem SYN, začne ihned odesílat fotografii okolí. Pokud byl první paket (SYN) ztracen, spojení po marném odeslání 20 stejných paketů expiruje (klient žádá o nové spojení posláním nového SYN paketu). Poslaná fotografie je ve formátu PNG a posílá se pouze její obsah, nikoliv název souboru nebo nějaká další informace. Každá odeslaná fotografie je jedinečná (fotografie získané v rámci různých spojení se liší). příkaz 02h - upload nového firmwaru Jakmile klient přijme od serveru první paket s nastaveným příznakem SYN, začne odesílat obsah souboru s firmwarem. Neposílá se žádná jiná doplňující informace, jako např. jméno souboru nebo jeho délka. Přijetí chybného paketu

Po přijetí chybného paketu odešle příjemce (klient i server) paket s příznakem RST. Chybný paket je paket, který: neobsahuje platné ID spojení a nemá nastaven příznak SYN nemá potvrzovací číslo v intervalu <seq - velikost okénka, seq> kde seq je sekvenční číslo příjemce má nastaven více příznaků najednou má nastaven příznak SYN a datová část neobsahuje platný příkaz (délka dat není 01h a/nebo příkaz není 01h nebo 02h) má nastaven příznak FIN a zároveň obsahuje data Pozor, sekvenční a potvrzovací čísla mohou přetéct, což nesmí mít na komunikaci vliv. Příklady komunikace Příklady komunikace jsou na zvláštní stránce. Chybovost sítě Možné chyby na síti: ztráta libovolného paketu, duplikace libovolného paketu, prohození libovolných paketů, proměnné zpoždění sítě. Server tyto chyby emuluje. Může se stát, že server 20x způsobí ztrátu stejného paketu a dojde k odeslání paketu s příznakem RST a rozpadu spojení. Tato chyba není na závadu při odevzdávání úlohy (přenos se při odevzdávání zopakuje). Požadavky program musí 100% fungovat s protistranou na serveru baryk.fit.cvut.cz (viz níže), program musí být stabilní a odolný proti neočekávaným vstupům, přenesený soubor (download i upload) nesmí být poškozen, program se musí umět vyrovnat s faktem, že UDP pakety se občas ztratí, zduplikují či prohodí, program by měl vypisovat alespoň základní informace o svém stavu (např. posílané a přijímané příkazy či odpovědi), IP adresa nebo DNS jméno serveru se zadává jako parametr v příkazové řádce při spuštění programu (tzn. není zadrátovaná ve zdrojového kódu), syntaxe viz níže, zdrojový text musí být komentovaný, v hlavičce všech zdrojových textů musí být uveden autor, povolené programovací jazyky jsou následující: Java, C, C++.

program pište do jednoho zdrojového souboru. Tento soubor můžete pojmenovat jakkoliv, avšak s příponou.c,.cpp nebo.java. Tyto soubory musí být přeložitelné řádkovým překladačem (gcc/g++/javac). Odevzdává se pouze tento jeden zdrojový kód, neimplementujte tedy nic do dalších souborů mimo něj. pokud použijete jazyk Java, napište na začátek zdrojového textu package robot a třídu s metodou main pojmenujte Robot. Můžete použít připravenou šablonu, která je k dispozici ke stažení mezi příklady programů. program musí přijímat parametry z příkazové řádky s následující syntaxí: Download fotografie (příkaz 01h):./robot <server> Výsledná fotografie bude uložena v souboru foto.png. Upload firmwaru (příkaz 02h):./robot <server> <firmware.bin> <server> je jméno nebo IP adresa serveru a <firmware> je soubor s novým firmwarem pro robota. Příklad volání: java robot.robot 81.25.17.115 /data/firmware.bin každý student má povinnost průběžně uploadovat aktuální stav svého zdrojového kódu přes WWW rozhraní serveru Baryk. Předpokládá se, že vždy po ukončení práce na programu nahrajete svůj kód na server Baryk. Také se předpokládá, že pokud k danému dni není záznam o uploadu Vašeho programu, tak jste na programu tento den nepracoval(a). Jinak řečeno, uploadováním svého programu vykazujete činnost (stejně jako v komerčním prostředí) a zároveň se chráníte před obviněním z nepoctivého jednání (přečtěte si obecné požadavky na úlohy na hlavní stránce předmětu). Testování Testovací server běží na baryk.fit.cvut.cz na portu 4000. Proti tomuto serveru můžete zkoušet funkčnost Vašeho řešení klienta. Výsledek testování bude zobrazen na webu serverubaryk. Pro testování uploadu firmwaru do robota využijte poslední verzi firmwaru, která je k dispozici o pár řádek níže. K dispozici je i staticky přeložený UDP server, který běží na serveru Baryk (pouze pro Linux). Poznámky k jeho použití: Ověřte si občas, není-li k dispozici novější verze. Server spusťte např. takto:./kareludp-server 1000 - foto/aa2e0000.png firmware/firmware-karel-1.6.0.bin kde 1000 je UID uživatele, pod kterým server poběží, foto/aa2e0000.png je cesta k fotografii a firmware/firmware-karel-1.6.0.bin je akceptovaný firmware. Ke stažení soubor odkaz sha1 firmware v1.6.0 firmware-karel-1.6.0.bin ea0fc5e48008b827f845b427f3ce8ff574db2da8 kareludp v1.7.0 - server a klient kareludp-1.7.0.tar.bz2 starší verze f3fc2e4e115e976f04005c9a9dfe576aeb15d641

kareludp v1.6.4 - server a klient kareludp-1.6.4.tar.bz2 kareludp v1.6.2 - server a klient kareludp-1.6.2.tar.bz2 kareludp v1.6.1 - server a klient kareludp-1.6.1.tar.bz2 kareludp v1.6.0 - server a klient kareludp-1.6.0.tar.bz2 eb1969f518e9590f7662393865ba3c61190ef289 913197b594a6caa551752085807f2d7c738f35d1 a238274eb544a7c911ece18d627938be5041e92c 176cc437eb0d9546bed79511cca8046089a6f3e7 Obraz virtuálního stroje pro lokální testování Termín a způsob odevzdání Úlohu je třeba odevzdat do 12. týdne (podle termínu Vašeho cvičení, tj. cvičení, kam jste zapsáni podle rozvrhu). Odevzdat lze pouze takový program, který: je přeložitelný na serveru baryk.felk.cvut.cz dodržuje syntaxi příkazové řádky (je tedy možno jej otestovat na serveru baryk.felk.cvut.cz) komunikuje se serverem baryk.felk.cvut.cz a je schopný úspěšně stáhnout fotografii (pro odevzdání stačí předvést úspěšné stažení souboru s fotografií bez ohledu na následky u serveru či klienta) Postup odevzdání: 1. otestujte svoje řešení na serveru Baryk 2. připravte si zdrojové texty k nahlédnutí 3. připravte si internetový prohlížeč na server Baryk a připravte se na překlad zdrojového kódu 4. spusťte terminál, nastavte adresář s Vaší úlohou jako aktuální a zadejte příkaz ls -l 5. zavolejte cvičícího Bodování Za úlohu můžete dostat max. 8 bodů. Penalizace: program neumí stáhnout fotografii: nelze odevzdat! program neumí provést upload firmwaru: -4 nebylo korektně uzavřeno spojení: -1 chybně implementovaný okénkový protokol: dle povahy -1 až -4 nestabilita: -3 malá odolnost vůči nestandardním vstupům: -3 chyby v programu, které se neprojevily přímo: dle povahy -1 až -5

nečistý zdrojový kód: -1 zdrojový kód nebyl průběžně uploadován na server Baryk: -5 Literatura Demo aplet pro lepší pochopení okénkového komunikačního schématu Doporučená literatura Odkazy Sliding window demo Reliable Message Transport Protocol Wikipedia - BSD sockets Rozhraní Sockets - Java Rozhraní Sockets klient TCP a UDP - Java Transportní rozhraní - BSD sockets Unix sockets FAQ - vynikající