Skip to content

Commit

Permalink
Con Obligatorio 2 completo
Browse files Browse the repository at this point in the history
  • Loading branch information
aferragu committed Nov 12, 2020
1 parent c6d2ed9 commit 53f6cc6
Show file tree
Hide file tree
Showing 6 changed files with 22,386 additions and 3 deletions.
4 changes: 2 additions & 2 deletions Control de Congestion II.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@
}
},
"source": [
"### DIagrama\n",
"### Diagrama\n",
"\n",
"![TCP/Reno](images/modelo_mathis.png)"
]
Expand Down Expand Up @@ -296,7 +296,7 @@
"\n",
"* El enlace tiene capacidad $C$, por lo que, de todo lo que le llega, descarta el sobrante. Más exactamente:\n",
"\n",
"$$p = \\frac{(y-C)^+}{y} = \\left(1-\\frac{C}{y}\\right)^+.$$"
"$$p = \\frac{(y-C)^+}{y} = \\left(1-\\frac{C}{y}\\right)^+ = \\max\\{1-C/y,0\\}.$$"
]
},
{
Expand Down
50 changes: 49 additions & 1 deletion Obligatorio 2.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -165,11 +165,59 @@
"source": [
"## Ejercicio 2\n",
"\n",
"A completar con ejercicio de TCP (se publicará en la semana del 09/11)"
"El objetivo del siguiente ejercicio es analizar el algoritmo de control de congestión de TCP, en particular en su versión Reno y validar algunos de los modelos teóricos vistos en clase.\n",
"\n",
"Para ello, se realizó una conexión directa entre dos máquinas Linux, y se utilizó la herramienta `tc` para convertir dicho enlace en un cuello de botella, limitando tanto la velocidad como el buffer (FIFO)\n",
"del mismo.\n",
"\n",
"Se utilizó a su vez la herramienta `tcpprobe`, que permite extraer en tiempo real el valor de la ventana de congestión de TCP y del round trip time medido. Obteniéndose las trazas que se detallan más adelante.\n",
"\n",
"El formato de la traza tcp probe es el siguiente:\n",
"\n",
"`[time][src][dst][header length][next seq][last ack][cwnd][ssthresh][rcv wnd][srtt]`\n",
"\n",
"El `srtt` se expresa en múltiplos de kernel ticks, que en el caso de Linux corresponde a 4ms.\n",
"\n",
"Las trazas pueden leerse utilizando el comando `CSV.read(<archivo>, header=false)` (ya que no tienen encabezado). Los valores hexadecimales de no. de secuencia y ACK pueden convertirse a entero mediante el comando `parse(Int64,x)` siendo `x` un `String` con el valor.\n",
"\n",
"### 1a. parte: Análisis de un flujo TCP\n",
"\n",
"En esta parte, se analiza un único flujo TCP pasando por un cuello de botella de capacidad $C$, retardo de ida y vuelta (latencia) $d$ y buffer máximo $B$. Se proporcionan 3 trazas: \n",
"\n",
" 1. `traza1Ma.tr`: C = 1 Mbps, d = 200 ms, B = 6 paquetes.\n",
" 2. `traza1Mb.tr`: C = 1 Mbps, d = 200 ms, B = 17 paquetes.\n",
" 3. `traza10M.tr`: C = 10 Mbps, d = 200 ms, B = 20 paquetes.\n",
"\n",
"Para los tres casos anteriores:\n",
"\n",
" 1. Estime la ventana óptima y la ventana máxima que puede lograr una conexión en el enlace y compare con el comportamiento real logrado por TCP. \n",
" 2. Grafique la evolución de los números de secuencia enviados y calcule el throughput logrado por la conexión a partir de los mismos. Verifique si TCP logra utilizar toda la capacidad del enlace.\n",
" 3. Para las trazas 1 y 2, verifique la fórmula de Mathis:\n",
" \n",
" $$x = \\frac{L}{RTT}\\sqrt{\\frac{1.5}{\\beta p}},$$\n",
"\n",
"siendo $p$ la tasa de pérdida de paquetes. El parámetro $\\beta$ es la cantidad de paquetes por ACK en el caso\n",
"en que se utiliza delayed-ACK. En Linux, $\\beta=2$. Para estimar $p$, asuma que se pierde un paquete por cada\n",
"evento de congestión observado.\n",
"\n",
"\n",
"### 2a. parte: Justicia en TCP\n",
"\n",
"En esta parte, se analizan varias conexiones TCP en paralelo. pasando por un cuello de botella de capacidad $C$, retardo de ida y vuelta (latencia) $d$ y buffer máximo $B$. Se proporciona una traza:\n",
"\n",
"`traza5M.tr`: C = 5 Mbps, d = 200 ms, B = 40 paquetes.\n",
"\n",
"Calcule la cantidad máxima de paquetes que admite esta configuración, y observe cómo se reparte la\n",
"ventana entre las conexiones. ¿Se logra un reparto justo? Verifique lo anterior calculando el throughput\n",
"de cada conexión a partir de los nos. de secuencia."
]
}
],
"metadata": {
"@webio": {
"lastCommId": null,
"lastKernelId": null
},
"kernelspec": {
"display_name": "Julia 1.5.2",
"language": "julia",
Expand Down
Loading

0 comments on commit 53f6cc6

Please sign in to comment.