This shows you the differences between two versions of the page.
isrm:laboratoare:04 [2019/03/12 23:22] mbarbulescu |
isrm:laboratoare:04 [2019/03/14 21:05] (current) mbarbulescu [Taskuri] |
||
---|---|---|---|
Line 3: | Line 3: | ||
===== Materiale ajutătoare ===== | ===== Materiale ajutătoare ===== | ||
- | * Pentru cei curioși, mai ales pentru matematica din spate recomandăm, pentru acest laborator, capitolul 2 din cartea [[http://web.cs.ucdavis.edu/~liu/289I/Material/book-goldsmith.pdf|Wireless Communications - Andrea Goldsmith]] | + | * Pentru cei curioși, mai ales pentru matematica din spate, recomandăm, pentru acest laborator, capitolul 2 din cartea [[http://web.cs.ucdavis.edu/~liu/289I/Material/book-goldsmith.pdf|Wireless Communications - Andrea Goldsmith]] |
+ | * Celor curioși cu privire la bazele mecanismelor de retransmisie din TCP recomandăm [[http://www.pcvr.nl/tcpip/tcp_time.htm|capitolul 21 din TCP Illustrated]] | ||
===== Modelul Two Ray Ground ===== | ===== Modelul Two Ray Ground ===== | ||
Line 31: | Line 32: | ||
===== Modelul Shadowing ===== | ===== Modelul Shadowing ===== | ||
- | Semnalul transmis printr-un canal wireless va experimenta variații aleatoare din cauza unor blocaje cauzate de obiecte aflate în calea semnalului. Puterea la receptor e influențată nu doar de distanță, dar și de obiectele întâlnite de semnal, unele sunt fixe altele mobile | + | Semnalul transmis printr-un canal wireless va experimenta variații aleatoare din cauza unor blocaje ale obiectelor aflate în calea semnalului. Puterea la receptor e influențată nu doar de distanță, dar și de obiectele întâlnite de semnal, unele fiind fixe altele mobile |
(exemplu: Wi-Fi indoor: este influențat de pereți, mobilă și oamenii din cameră, care se mișcă). Modelarea unui astfel de canal folosește modele statistice pentru a caracteriza atenuarea unui semnal care ajunge la receptor. | (exemplu: Wi-Fi indoor: este influențat de pereți, mobilă și oamenii din cameră, care se mișcă). Modelarea unui astfel de canal folosește modele statistice pentru a caracteriza atenuarea unui semnal care ajunge la receptor. | ||
Line 45: | Line 46: | ||
* AGC (automatic gain control) | * AGC (automatic gain control) | ||
* capacitatea de a decoda un MCS mare (''802.11ac'' a introdus LDPC coding - o tehnică mai bună de codare a datelor decât cele tradiționale) | * capacitatea de a decoda un MCS mare (''802.11ac'' a introdus LDPC coding - o tehnică mai bună de codare a datelor decât cele tradiționale) | ||
+ | |||
+ | Ce arme au atât transmițătorul cât și receptorul pentru a combate ambele fenomene: MIMO (Multiple Input, Multiple Output) - folosirea de mai multe antene la transmisie și recepție (la ''802.11ac'' avem un maxim de 4x4) și STBC (Space Time Block Coding) - o tehnică de a transmite mai multe copii a unui stream de date pe mai multe antene pentru a asigura fiabilitatea datelor transmise. Cele două capabilități sunt //advertised// de AP (access point) în beacon iar stațiile îi transmit AP-ului dacă le au în cadrul probe request-ului. | ||
În ns-2: | În ns-2: | ||
Line 72: | Line 75: | ||
</file> | </file> | ||
- | Scriptul acceptă parametrii ''-dist'' pentru a seta distanța sursă-destinație, și ''-tries'' pentru a seta numărul maxim de încercări de transmitere a cadrului. Cele două perechi nu se influențează reciproc din cauza distanței mari, iar ''S1->D1'' folosește **UDP**, în timp ce ''S2->D2'' folosește **TCP**. Practic se rulează două experimente pentru aceeași distanță de comunicare, si acelasi regim de retransmisii. Scriptul afișează debitul în ''bps'' obținut de cele 2 fluxuri și generează fișierul shadow2.tr care poate fi analizat pentru a contoriza pachetele în diverse scenarii. | + | Scriptul acceptă parametrii ''-dist'' pentru a seta distanța sursă-destinație (în metri), și ''-tries'' pentru a seta numărul maxim de încercări de transmitere a cadrului. Cele două perechi nu se influențează reciproc din cauza distanței mari, iar ''S1->D1'' folosește **UDP**, în timp ce ''S2->D2'' folosește **TCP**. Practic se rulează două experimente pentru aceeași distanță de comunicare, si acelasi regim de retransmisii. Scriptul afișează debitul în ''bps'' obținut de cele 2 fluxuri și generează fișierul ''shadow2.tr'' care poate fi analizat pentru a contoriza pachetele în diverse scenarii. |
+ | |||
+ | Exemplu de rulare: | ||
+ | |||
+ | <code bash> | ||
+ | student@isrm-vm:~/lab-04$ ns ./shadow2.tcl -tries 4 -dist 100 | ||
+ | Starting Simulation... | ||
+ | loss-monitor for flow 0 | ||
+ | nlost_ 568 | ||
+ | npkts_ 3155 | ||
+ | bytes_ 4669400 | ||
+ | lastPktTime_ 25.194375494945955 | ||
+ | expected_ 3723 | ||
+ | sending time : 25.0 | ||
+ | |||
+ | Throughput 0 1474016.0 bps | ||
+ | |||
+ | |||
+ | loss-monitor for flow 2 | ||
+ | sending time: 25.0 lastack: 2413 srtt: 313 | ||
+ | datab: 3702560 retr: 143080 | ||
+ | Throughput 2 1127353.6000000001 | ||
+ | </code> | ||
===== Plan de organizare a datelor intermediare ===== | ===== Plan de organizare a datelor intermediare ===== | ||
Line 110: | Line 135: | ||
* tries=1 de ce TCP nu obține debit maxim, chiar în condiții optime (livrare 100%)? | * tries=1 de ce TCP nu obține debit maxim, chiar în condiții optime (livrare 100%)? | ||
* de ce scade capacitatea UDP când crește numărul de încercări? (({{:isrm:laboratoare:04:unq-sent.png?direct&200|}} )) | * de ce scade capacitatea UDP când crește numărul de încercări? (({{:isrm:laboratoare:04:unq-sent.png?direct&200|}} )) | ||
+ | |||
+ | |||
+ | ===== Soluția laboratorului ===== | ||
- Scripturile folosite și graficele obținute sunt disponibile în Media Manager/[[http://ocw.cs.pub.ro/courses/?tab_files=files&do=media&ns=isrm%2Flaboratoare%2F04| Rezultate]] | - Scripturile folosite și graficele obținute sunt disponibile în Media Manager/[[http://ocw.cs.pub.ro/courses/?tab_files=files&do=media&ns=isrm%2Flaboratoare%2F04| Rezultate]] | ||
- | <hidden> | + | Mai jos le aveti scrise: |
+ | |||
+ | <spoiler> | ||
<solution> | <solution> | ||
- | Test cu tab de rezolvare | + | <code bash> |
- | </solution> | + | #!/bin/bash |
- | </hidden> | + | # |
+ | # acest script creează 2 fișiere de date: thr și pdr cu date în funcție de distanță (coloana 1) | ||
+ | # thr conține pentru fiecare distanță debitul/throughput în Mbps obținut pentru tries=1,4,10 de TCP și UDP | ||
+ | # pdr conține pentru fiecare distanță numărul de pachete primite/trimise de MAC, și unice primite/trimise de MAC. | ||
+ | # fiecare grup de 4 numere este repetat pentru tries=1,4,10 | ||
+ | # | ||
+ | # după rularea acestui script se rulează 'gnuplot shadow2.plot.txt' pentru a obține toate graficele | ||
+ | # | ||
+ | d=50 | ||
+ | echo "# dist UDP0 TCP0 UDP4 TCP4 UDP10 TCP10" > thr | ||
+ | echo "# dist (macrecv macsent unqsent unqrecv)0 (...)4 (...)10" > pdr | ||
+ | while [ $d -le 250 ]; do | ||
+ | echo "$d " | ||
+ | echo -n "$d " >> thr | ||
+ | echo -n "$d " >> pdr | ||
+ | tries=0 | ||
+ | for tries in 1 4 10; do | ||
+ | ns ./shadow2.tcl -tries $tries -dist $d | grep Throughput | awk '{udp=$3; getline; printf("%5.3f %5.3f ", udp/1e6, $3/1e6);}' >> thr | ||
+ | macsent=$(cat shadow2.tr | grep MAC | grep '^s' | grep cbr | awk '$3 <= 25.0' | wc -l) | ||
+ | macrecv=$(cat shadow2.tr | grep MAC | grep '^r' | grep cbr | awk '$3 <= 25.0' | wc -l) | ||
+ | unqsent=$(cat shadow2.tr | grep MAC | grep '^s' | grep cbr | awk '$3 <= 25.0 {print $47}' | uniq -c| wc -l) | ||
+ | unqrecv=$(cat shadow2.tr | grep MAC | grep '^r' | grep cbr | awk '$3 <= 25.0 {print $47}' | uniq -c| wc -l) | ||
+ | echo -n "$macrecv $macsent $unqsent $unqrecv " >> pdr | ||
+ | tries=$(($tries+1)) | ||
+ | done | ||
+ | echo "" >> thr | ||
+ | echo "" >> pdr | ||
+ | d=$(($d+10)) | ||
+ | done | ||
+ | </code> | ||
+ | |||
+ | <code gnuplot> | ||
+ | set term png | ||
+ | set xlabel 'Distance[m]' | ||
+ | set ylabel 'Throughput[Mbps]' | ||
+ | set key left | ||
+ | set grid | ||
+ | set yrange [0:*] | ||
+ | set xtics 20 | ||
+ | set xrange [50:250] | ||
+ | set key top right | ||
+ | |||
+ | set out 'thr-udp.png' | ||
+ | plot\ | ||
+ | './thr' using 1:2 t 'tries=1' w l lw 3, \ | ||
+ | '' using 1:4 t 'tries=4' w l lw 3, \ | ||
+ | '' using 1:6 t 'tries=10' w l lw 3 | ||
+ | |||
+ | |||
+ | set out 'thr-tcp.png' | ||
+ | plot\ | ||
+ | './thr' using 1:3 t 'tries=1' w l lw 3, \ | ||
+ | '' using 1:5 t 'tries=4' w l lw 3, \ | ||
+ | '' using 1:7 t 'tries=10' w l lw 3 | ||
+ | |||
+ | ####################################################### | ||
+ | #probabilitatea de reușită în maximum r încercări | ||
+ | # unque_recv/unique_sent | ||
+ | f(x)=1-(1-x)**r | ||
+ | |||
+ | set ylabel 'PDR(packed delivery ratio)' | ||
+ | set out 'mac-pdr.png' | ||
+ | set key right top # bottom left | ||
+ | set xrange [*:300] | ||
+ | plot\ | ||
+ | './pdr' using 1:($5/$4) t 'simulation tries=1 (PHY)' w l lw 3, \ | ||
+ | '' using 1:($9/$8) t 'simulation tries=4' w l lw 3, \ | ||
+ | r=4 '' using 1:(f($5/$4)) t 'analysis tries=4' w p pt 5, \ | ||
+ | '' using 1:($13/$12) t 'simulation tries=10' w l lw 3, \ | ||
+ | r=10 '' using 1:(f($5/$4)) t 'analysis tries=10' w p pt 4 | ||
+ | |||
+ | set key left bottom | ||
+ | set ylabel 'Unique frames sent' | ||
+ | set out 'unq-sent.png' | ||
+ | plot\ | ||
+ | './pdr' using 1:($4) t 'tries=1' w l lw 3, \ | ||
+ | '' using 1:($8) t 'tries=4' w l lw 3, \ | ||
+ | '' using 1:($12) t 'tries=10' w l lw 3 | ||
+ | |||
+ | set ylabel 'UDP Throughput [Mbps]' | ||
+ | set out 'udp-cap.png' | ||
+ | set key top | ||
+ | set xrange [0:1] | ||
+ | set xtics 0.1 | ||
+ | set xlabel 'PHY delivery ratio' | ||
+ | |||
+ | plot \ | ||
+ | './thr' using ($2/1.7):2 t 'tries=1' w l lw 3, \ | ||
+ | './thr' using ($2/1.7):4 t 'tries=4' w l lw 3, \ | ||
+ | '' using ($2/1.7):6 t 'tries=10' w l lw 3 | ||
+ | |||
+ | set ylabel 'TCP Throughput [Mbps]' | ||
+ | set key top left | ||
+ | set out 'tcp-cap.png' | ||
+ | plot \ | ||
+ | './thr' using ($2/1.7):3 t 'tries=1' w l lw 3, \ | ||
+ | './thr' using ($2/1.7):5 t 'tries=4' w l lw 3, \ | ||
+ | '' using ($2/1.7):7 t 'tries=10' w l lw 3 | ||
+ | </code> | ||
+ | |||
+ | Rularea laboratorului: | ||
+ | |||
+ | <code bash> | ||
+ | student@isrm-vm:~/lab-04$ chmod a+x run.sh | ||
+ | student@isrm-vm:~/lab-04$ ls | ||
+ | mac-pdr.png pdr run.sh shadow2.plot.txt shadow2.tcl shadow2.tr tcp-cap.png thr thr-tcp.png thr-udp.png udp-cap.png unq-sent.png | ||
+ | student@isrm-vm:~/lab-04$ ./run.sh | ||
+ | student@isrm-vm:~/lab-04$ gnuplot shadow2.plot.txt | ||
+ | </code> | ||
+ | </solution> | ||
+ | </spoiler> | ||