Számítógépes Hálózatok 3. gyakorlat
Áramkörkapcsolt hálózatok ÓRAI FELADAT (1 PONT) Számítógépes Hálózatok Gyakorlat 2
Topológia cs1.json D A S1 S4 C B S2 S3 Irányítatlan legyen a gráf!!! Számítógépes Hálózatok Gyakorlat 3
Lehetséges áramkörök cs1.json D A S1 S4 C B S2 S3 Irányítatlan legyen a gráf!!! Számítógépes Hálózatok Gyakorlat 4
Igények cs1.json D A S1 S4 C B S2 S3 Irányítatlan legyen a gráf!!! Számítógépes Hálózatok Gyakorlat 5
Feladat Adott a cs1.json, ami tartalmazza egy irányítatlan gráf leírását. A gráf végpont (end-points) és switch (switches) csomópontokat tartalmaz. Az élek (links) kapacitással rendelkeznek (valós szám). Tegyük fel, hogy egy áramkörkapcsolt hálózatban vagyunk és valamilyen RRP-szerű erőforrás foglaló protokollt használunk. Feltesszük, hogy csak a linkek megosztandó és szűk erőforrások. A json tartalmazza a kialakítható lehetséges útvonalakat (possible-cicuits), továbbá a rendszerbe beérkező, két végpontot összekötő áramkörigényeket kezdő és vég időponttal. A szimuláció a t=1 időpillanatban kezdődik és t=duration időpillanatban ér véget. Készíts programot, ami leszimulálja az erőforrások lefoglalását és felszabadítását a JSON fájlban megadott topológia, kapacitások és igények alapján! A program bemenete: cs1.json A program kimenete: Minden igény lefoglalását és felszabadítását írassuk ki a stdout-ra. Foglalás esetén jelezzük, hogy sikeres vagy sikertelen volt-e. Megj.: sikertelen esetben az igénnyel más teendőnk nincs, azt eldobhatjuk. Pl.: 1. igény foglalás: A<->C st:1 sikeres 2. igény foglalás: B<->C st:2 sikeres 3. igény felszabadítás: A<->C st:5 4. igény foglalás: D<->C st:6 sikeres 5. igény foglalás: A<->C st:7 sikertelen Számítógépes Hálózatok Gyakorlat 6
Pyton socket, host név feloldás Socket csomag használata import socket gethostname() hostname = socket.gethostname() gethostbyname() hostname = socket.gethostbyname( www.example.org ) gethostbyname_ex() hostname, aliases, addresses = socket.gethostbyname_ex(host) gethostbyaddr() hostname, aliases, addrs = socket.gethostbyaddr('157.181.161.79') Számítógépes Hálózatok Gyakorlat 7
Feladat1 Irassuk ki a gethosname() fv. eredményét! Következő hostnevekre futtassuk meg a gethostbyname() és a gethostbyname_ex() fveket: 'homer', 'www', 'www.python.org', inf.elte.hu Kérdezzük le a gethostbyaddr() fv segítségével a következő IP címek hostneveit: 157.181.161.79, 157.181.161.16 Számítógépes Hálózatok Gyakorlat 8
Port számok és protkolok Bizonyos protokolokhoz tartoznak fix portszámok, konstansok (szállítási protokolok)! getservbyname() import urlparse parsed_url = urlparse.urlparse(url) port = socket.getservbyname(parsed_url.scheme) getservbyport() print urlparse.urlunparse( (socket.getservbyport(port), 'example.com', '/', '', '', '') ) getprotobyname() print socket.getprotobyname( icmp ) Számítógépes Hálózatok Gyakorlat 9
Feladat2.a. Kérdezzük le a portszámot a követekző URLekhez: 'http://www. example.com', 'https://www. example.com', 'ftp://example.com', 'gopher://gopher. example.com', 'smtp://mail.example.com', 'imap://mail.example.com', 'imaps://mail.example.com', 'pop3://pop.example.com', 'pop3s://pop.example.com', Számítógépes Hálózatok Gyakorlat
Feladat2.b. Készítsük el a következő portokhoz az urleket: 80, 443, 21, 70, 25, 143, 993, 1, 995 Kérdezzük le 1..0-ig a fentartott portokat! Kérdezzük le a szállítói réteghez tartozó konstanst a következő protokolokhoz: icmp, tcp, udp Számítógépes Hálózatok Gyakorlat 11
Szerver adatok lekérdezése getaddrinfo() for response in socket.getaddrinfo('www.python.org', 'http'): family, socktype, proto, canonname, sockaddr = response for response in socket.getaddrinfo('www.python.org', 'http socket.af_inet, # family socket.sock_stream, # socktype socket.ipproto_tcp, # protocol socket.ai_canonname, # flags): family, socktype, proto, canonname, sockaddr = response Számítógépes Hálózatok Gyakorlat 12
Feladat3 Kérdezzük le a www.python.org http szerverének az információit! Kérdezzük le a www.inf.elte.hu oldal http servernevét, ahol meg van adva a név flag (AI_CANNONNAME) Számítógépes Hálózatok Gyakorlat 13
Little endian, big endian 16 és 32 bites pozitív számok kódolása htons(), htonl() host to network short / long ntohs(), ntohl() network to host short / long Számítógépes Hálózatok Gyakorlat 14
TCP Számítógépes Hálózatok Gyakorlat 15
TCP socket() bind() listen() accept() sock = socket.socket(socket.af_inet, socket.sock_stream) server_address = ('localhost', 000) sock.bind(server_address) sock.listen(1) connection, client_address = sock.accept() Számítógépes Hálózatok Gyakorlat 16
TCP send(), sendall() recv() close() connection.sendall(data) data = connection.recv(16) connection.close() connect() server_address = ( localhost, 000) sock.connect(server_address) Számítógépes Hálózatok Gyakorlat 17
HÁZI FELADAT I. (1 PONT) Számítógépes Hálózatok Gyakorlat 18
Feladat Készítsünk egy olyan server-kliens alkalmazást, amely a getaddrinfo() alapján visszaad mindent egy adott hostról. A kliens küldjön egy hostnevet kérésnek és a szerver válaszolja meg azt! Számítógépes Hálózatok Gyakorlat 19
VÉGE Számítógépes Hálózatok Gyakorlat 21