---
# System prepended metadata

title: Untitled

---

## Capa de aplicacion
* Internet -> definicion
* Tipos de comunicacion (unicast, broadcast, multicast, anycast)
* ISP Tiers

* Métricas de performance (latencia, packet loss)
* Latencia
    - Definicion
    - Importancia (en que impacta? UX y algunas apps son sensibles a la latencia)
    - Origen/Componentes (Tiempos de prop, ins, proc, enc)
    - Componente mas significativo? -> Depende!
    - Reduccion de tiempo de prop -> CDN
    - Tiempo de encolado, no es cte (depende de la congestion)
        - L: long de paquetes (bits), a: tasa de arribo de paqetes (1/s), R: tasa de serializacion (bits/s)
        - L*a >= R -> la cola desborda y se pierden paquetes
        - L*a < R -> solucion
    - Metrica (RTT)
    - Throughput
    - Ancho de banda
    - Jitter
    
* Objetivo: Crear Apps que corran en diferentes hosts, comunicados través de la red

* Aplicaciones distribuidas: Como estas aplicaciones involucran multiples end systems que intercambian data unos con otros, decimos que son aplicaciones distribuidas. Estas aplicaciones corren en los end systems, no en packet switches.

* Protocolo
    - Definicion: Conjunto definido de reglas y procedimientos que determinan cómo se transmiten los datos en las redes de computadoras
    - Que define? (MSCO)
        - Mensajes (de peticion y de rta)
        - Sintaxis de mensajes
        - Campos: la semantica, el tamaño, funcion, etc.
        - Orden en que se mandan los mensajes, como es la secuencia.

* Arquitecturas:
    - Cliente-servidor
    - P2P

* DNS
    - Definicion: Es un protocolo de capa de aplicación el cual permite asignar hostnames a IPs. A nivel infraestructura, es una base de datos distribuida y jerarquica que almacena distintos registros (RR) que contienen las "traducciones" entre los hostnames y las IPs

    - Caracteristicas
    - Servicios
    - Descentralizacion
    - Tipos (raiz, tld, autoritativo)
    - Local resolver
    - Como se guardan los registros (types: A,AAAA, CNAME, MX)
    - Funcionamiento de request -> obtencion de ip, etc
    - Cache
    - eDNS
    - DOH
    - dig
    ---> PROBAR DIG + WIRESHARK => dig dominio ; dig @ip_SA dominio (dig @ns1.fi.uba.ar fi.uba.ar)

* HTTP
    - Headers, tipos de mensajes, etc.
    ---> PROBAR TELNET + WIRESHARK => telnet fi.uba.ar 80


## Capa de transporte

* Funcion principal: Multiplexing y Demultiplexing

* Permite la comunicación entre procesos corriendo en dos hosts distintos (diferencia con capa de red que comunica los hosts, no los procesos).
La capa de transporte hace todo el trabajo dentro del end system, moviendo los msjes de los procesos de aplicaciones hacia la red y viceversa

* Es best effort por defecto (hereda propiedad de la capa de red)

* Servicios:
    - Multiplexing/Demultiplexing
    - Deteccion de Errores
    - Comunicacion confiable (RDT)
    - Control de flujo
    - Control de congestion
    - Garantizar throughput
    - Garantizar tiempos de entrega

* UDP
    - Servicios (M/D + chequeo de errores basico) -> Minimal
    - Headers (src_port, dst_port, length, checksum) 8 bytes
    - Ventajas de UDP sobre TCP
    - APPs que usarian UDP
    - No es orientado a conexiones
        - No hay handshake
        - No se reservan recursos para almacenar informacion acerca del estado de la conexion

* TCP
    - Headers -> 20 bytes
        - Src_port (2), Dst_port(2)
        - Sequence number (4), ACK number (14)
        - flags (ACK, SYN, FIN)
        - Receive window (Advertisement Window) (2)
        - Checksum (2)
    - RDT
        - Uso de Sequence number
        - Uso de ACK number
        - ACKs duplicados
        - El tamaño de la ventana debe ser menor a 2^16/2 = 2^15
        - Calculo de RTO
    - Control de flujo
        - Buffers: Se almacenan los datos que van llegando para pasarlos a la capa de aplicacion (tamaño finito)
        - Evitar buffer overflow
            - Uso de RWnd, Cálculo: rwnd=RcvBuffer−[LastByteRcvd−LastByteRead]
            - Uso de Cwnd -> LastByteSent−LastByteAcked≤min{cwnd, rwnd}
        - Que pasa si rwnd=0? emisor sigue mandando de 1 bytes hasta que sea rwnd > 0
        - Cuando se recibe un cambio en rwnd, el emisor debe modificar su tasa de envío para no causar buffer overflow, pero tampoco subutilizar el buffer.
    - Control de Congestion
        - Slow start
        - Congestion Avoidance
        - Fast retransmit, Fast recovery
        - La congestión aparece principalmente a causa del tamaño finito de los buffers de los dispositivos intermedios de capas inferiores (routers y switches).
        - Cuando se llena un buffer, se empiezan a descartar los segmentos -> se dice que la red está congestionada
        - cwnd : es la máxima cantidad de bytes que puede haber en vuelo

        - LastByteSent-LastByteACKed < min(cwnd,rwnd) 
    - Three-Way Handshake
    - Protocolo de cierre
    - Estados

    ---> PERDIDA EN WIRESHARK + MININET

* RDT
    - Que garantiza? llegan todos los bits, llegan en orden y sin errores
    - Principios de las comunicaciones confiables
        - Conectadas vs. No-conectadas
        - Asegurar la entrega
        - Asegurar el orden
        - Asegurar la integridad
        - Desempeño
        - Control de flujo
        - Compartir el canal equitativamente 
    - Tipos de flujo
        - Stop & Wait
        - Selective Repeat
        - Go-Back N
    - Elementos de RDT
        - Checksum -> verificacion de integridad
        - Timer -> detectar paquetes perdidos
        - Numero de secuencia -> para mantener un flujo de paquetes y detectar perdidos
        - ACK -> para avisar que se recibieron
        - NACK -> para avisar que llegó corrupto
        - Ventana deslizante -> para implementar un flujo de datos con alto desempeño
    - RDT en TCP

* Sockets
    - Definicion
    - Para que se usa? -> para que 2 procesos corriendo en distintos hosts puedan comunicarse a través de la red
    - Tipos: UDP y TCP
    - Flujo funcionamiento Socket UDP (cliente y servidor)
    - Flujo funcionamiento Socket TCP (cliente y servidor)
    - Codigo Sockets TCP y UDP, constantes (AF_INET, SOCK_STREAM, SOCK_DGRAM)

    - Sockets UDP -> tupla de 2 valores (dst_ip, dst_port)
    - Sockets TCP -> tupla de 4 valores (src_ip, src_port, dst_ip, dst_port)

* SYN Flood
    - Qué es? -> Ataque DoS -> El atacante busca hacer que un determinado servicio (por lo general en internet) no esté disponible para un usuario legítimo.
    - Cómo se logra? Enviando muchos SYN para dejar sin memoria disponible a los servidores
    - Posibles maneras:
        - Ataque directo
        - Ataque con paquete falsificados (modificamos ip de paquete)
        - Ataque distribuido (DDoS) (botnet)
    - Solucion: SYN Cookie -> Seq number inicial toma este valor
    Ademas si el atacante quiere contestar debe exponer su IP real


## Capa de red
* Funcion: Permite la comunicación entre dos hosts distintos mediante el envío de paquetes entre los mismos.

* Cómo lo logra?
    - Forwarding: Router recibe un paquete por uno de sus puertos de entrada y lo envía por uno de sus puertos de salida
    - Routing: El router debe decidir por cual puerto de salida enviar el paquete para que llegue a destino -> se usa la tabla de ruteo y headers del datagrama IP que llega, y sale como resultado el puerto de salida

* Control plane: Encontrar los caminos/rutas más favorables y confeccionar las tablas de ruteo
* Data plane: Leer la tabla de ruteo, interpretarla buscando una coincidencia con la dirección destino del paquete que llega y determinar por cual enlace de salida hay que mandarlo.

* Identificación de host -> Direccion IP -> Estructura jerarquica
IP: dir. de red | dir. de host

* Clases de red (Classful Adressing): En un ppio se diferenció a las redes en 3 clases. El problema es que la diferencia de cantidad de hosts entre una clase y otra es demasiada por lo que quedaban varias direcciones sin usarse
    - Clase A => /8 -> 2^24 - 2 hosts => (0.0.0.0 - 126.255.255.255)
    - Clase B => /16 -> 2^16 - 2 hosts => (127.0.0.0 - 191.255.255.255)
    - Clase C => /24 -> 2^8 - 2 hosts => (192.0.0.0 - 223.225.255.255)

* CIDR (Classless Inter-Domain Routing): Soluciona el problema de Classful Adressing, ahora las mascaras de red tienen una longitud variable. Se usa la notacion /n, siendo n el tamaño del prefijo en bits.

* Protocolo IP
    - Datagramas IP
        - Headers -> 20 bytes
            - Version
            - Direcciones: Src y Dst
            - Protocolo
            - Checksum
            - TTL
            - Tamaño de header
            - ID y frag offset
            - flags de fragmentacion
        - El reemsablado se realiza en la capa de red del host

* Tipos de Forwarding
    - Destination-based forwarding: Solo se usa la IP de destino para decidir el puerto de salida.
    - Generalized forwarding: Contempla mas atributos (¿12 atributos, relacion con SDN?)

* LookUp: Consulta a la forwarding table para saber por qué puerto forwardear
La tabla no mapea direcciones IP a puertos de salida -> existen muchas IPs (2^32 en IPv4!!!) -> se usan los prefijos/dir. de red

* Máscara de red
    - ¿Por qué los bits de la izquierda? Simplicidad, jerarquía
    - Una máscara define qué bits nos interesan de un dado espacio
    - Aplicando AND bit a bit a una direccion IP nos permite ver si matchea con alguna direccion de red de la tabla -> descartamos direccion de host

* LPM (Longest Prefix Match)
    - Si existen más de una entrada que concuerda con una dirección IP destino (superposición), se optará por la salida correspondiente al prefijo de mayor longitud.
    - Default Gateway -> 0.0.0.0/0 => Matchea con todo y es la menos restrictiva (ultima en elegirse en caso de superposicion)

* Optimizacion de tablas
    - Eliminar entradas mal configuradas
    - Agregacion de prefijos: Reducir cant de entradas cuando
        - Son contiguas (prefijos de igual longitud y difieren en el ultimo bit)
        - Mismo NextHop (puerto de salida)
    - Entrada contenida en otra

* Fragmentación IPv4
    - Cada enlace por el que pasa el datagrama posee un MTU (Max Transmission unit) -> tamaño maximo de paquete que se puede transferir por en enlace. Si el paquete supera ese tamaño debemos fragmentar.
    - La fragmentacion se hace en el host origen y/o el routers intermedios, y se reensambla todo en la capa de red del host destino, antes de pasar a la capa de transporte.
    - No tiene sentido reensamblar en cada router, se gasta poder de computo y además puede que haya que volver a fragmentar en un futuro por lo que además se pierde tiempo.
    - Se usan headers del datagrama: flags y fragment offset
    - Si se pierde un fragmento, se descartan todos los demas pertenecientes al mismo paquete. Despues la capa de transporte manejará esa pérdida (si estamos con TCP, con UDP se pierde)

    - Ataques DoS
    - Ataques a Routers
    - Mejoras en IPv6

* Una subnet es una subdivisión lógica de una red. Permiten agrupar un conjunto de direcciones en un rango.

* Routers
    - Arquitectura
        - Input port -> interfaz de entrada. Los paquetes esperan en los buffers si es necesario y se realiza operaciones como restar 1 TTL
        - Switch fabric -> conmutador -> pasa paquete al enlace de salida
        - Output port -> interfaz de salida.

    - Congestion y encolado: Cuando el Switch fabric trabaja en paralelo, se puede producir HOL (Head Of the Line) cuando hay una colisión.
    Cuando los buffers se empiezan a llenar se empiezan a descartar paquetes, eso se hace al azar para evitar que se descarten muchos de un mismo flujo.

* DHCP
    - Definicion
    - Para que sirve

* NAT
    - Definicion
    - Tablas de traduccion + tabla de envio de paquetes como intermediario

* IPv6

* SDN (Software Defined Network)



Pendientes:
- icmp
- perdida TCP mininet + wireshark
- ping
- full duplex, half duplex
- Ipv6 (fragmentacion y mas)
- Ej TCP con calculo de timeout y RTT
- Slack: reduccion de rwnd y chusmear otros posts
