Leí este libro por un curso universitario de redes de computadoras. Sus capítulos pueden ser extensos para un libro académico, pero tantas secciones hacen que se vuelva rápido de leer... aunque yo terminara atrasado en las lecturas. El libro se centra en el modelo TCP/IP, stack de protocolos de Internet basado en 5 capas: aplicación, transporte, red, enlace y física.
Leí en alguna review sugerencias sobre incluir un glosario de acrónimos, y en verdad es cierto que tomando apuntes puede ser útil anotarlos en un lugar conocido para evitar tener que —como yo— volver atrás cuando aparecen acrónimos poco referenciados porque, ¿qué era DOCSIS?
El capítulo 1 introduce muchos conceptos que, aunque interesantes, son desconocidos para quienes apenas se adentran en las redes de computadoras y puede resultar estresante. El valor de este capítulo lo encontramos a medida seguimos la lectura, y nos deja la intuición de muchos conceptos importantes.
El capítulo 2, sobre la capa de aplicación desarrolla los conceptos de la capa de aplicación e introduce la capa de transporte, cosa que se vuelve recurrente en Kurose dado que al desarrollar la teoría de una capa también da intuiciones de la capa inferior, manteniéndose fiel a la arquitectura en capas del modelo TCP/IP. Es un libro plagado de acrónimos y de analogías pero facilitan la comprensión. Leerlo con presión no es ideal, pero aún así se hace ameno.
Los problemas al final del capítulo son muy útiles, y se presentan muchas herramientas para diagnóstico de redes. Algunos de los protocolos tratados son: HTTP, SMTP con POP3 e IMAP, P2P (BitTorrent, particularmente) y DNS. Kurose aprovecha a introducir la noción de sockets y ejercicios variados, por ejemplo sobre la noción de proxys que también se desarrolla en el capítulo, así como la de cookies.
El capítulo 3 puede llegar a ser de los más densos en la teoría pero de los más interesantes. Kurose hace el desarrollo de un protocolo de capa de transporte de transferencia de datos confiable genérico denominado rdt (reliable data transfer) el cual desarrolla incrementalmente en sus versiones rdt 1.0, 2.0, 2.1, 2.2 y termina con una versión rdt 3.0 "similar" a TCP. Kurose comienza por distinguir la comunicación entre procesos en un mismo sistema terminal ya sea mediante memoria compartida o IPC (Inter Process Communication) de la comunicación entre distintos hosts/sistemas terminales/end systems. Desarrolla brevemente sobre UDP (User Datagram Protocol) como un protocolo muy simple de capa de transporte cuya función es la mínima esperada de capa de transporte, la de establecer una conexión lógica proceso-proceso (para cada proceso es transparente cómo se da la comunicación). El desarrollo de TCP (Transport Control Protocol) es más extenso, y se centra principalmente en la transferencia confiable de datos, el control de flujo y el control de congestión. En este punto es donde Kurose deja muchos temas abiertos, aunque los menciona.
Kurose no se adentra en qué hacer con el tráfico UDP en Internet que podría expulsar el tráfico TCP, pero frecuentemente referencia a otros autores. También hay que considerar que la edición que he leído es de hace varios años ya (aunque al menos esta versión dejó de usar a Skype como ejemplo para todo). El control de congestión de TCP se explica de forma detenida pero noté muy apresurada la distinción entre las versiones de Tahoe y Reno; considero que dos AFD (Deterministic Finite Automaton, DFA) hubieran esclarecido esto. Como es costumbre, se agrega la noción de capa de red muy temprano en este capítulo, lo que nos prepara para lo que sigue, y las analogías no se detienen.
El capítulo 4 introduce la noción de capa de red, centrándose en el plano de datos, en la tarea de reenvío (forwarding) de los routers y la tecnología dentro de ellos. También se distingue IPv4 de IPv6, pero la teoría expuesta sobre IPv6 me pareció insuficiente. En particular, las ideas de tunneling no se profundizan, pero en alguna referencia se trata 6in4, 6to4, Tunneling Broker y tunneling de Teredo de forma algo pobre, aunque puede que se deba a mi inexperiencia. Fuera de esto, el capítulo se hace muy ágil.
También se tratan conceptos de ICMPv6 (y se retoma ICMP en el capítulo 5), DHCP y NAT, entre otros tantos, que son de inmenso interés y me fueron de mucha utilidad para revisar algunos ajustes de mi router doméstico. ¡WOW, APLICANDO REDES!
El capítulo 5 retoma desde el capítulo 4 la capa de red centrado en el plano de control, en los routing algorithms y routing protocols. Se desarrollan LS (Link State) y DV (Distance Vector) como algoritmos, OSPF (Open Shortest Path First) y BGP (Border Gateway Protocol) como protocolos que ejemplifican ambos algoritmos, respectivamente de LS y DV. La descripción de los mensajes intercambiados en ambos protocolos fue nula en la edición que leí (la 7th) y desconozco cómo es en el resto, pero es algo de esperar de un libro que toca tantos temas y, en verdad, solo su superficie. En mi edición solo leí IP Anycast, pero en ediciones más recientes se incluye multicast y broadcast, que también leí y estuvo muy bien.
Kurose desarrolla las ideas de broadcast con inundación no controlada que genera un "broadcast storm"; la inundación controlada mediante dos estrategias: mediante números de secuencia y mediante RPF (Reverse Path Forwarding); y broadcast con árboles recubridores, y una estrategia de construcción center-based tree (determinar un nodo centro y construir el árbol a partir de rutas que lo tienen como destino) usando mensajes tipo join desde los demás routers, cuyas rutas seguidas son las que se añaden al árbol. Multicast usa ideas similares: un árbol recubridor compartido sin distinguir entre emisores, o distinguiendo entre emisores volviendo a usar RPF pero añadiendo pruning (no se contemplan nodos ni ramas que no tienen miembros de un grupo multicast, lo que determina mediante el uso del protocolo Internet Group Management Protocol, IGMP, entre routers y hosts) para evitar propagar datagramas que no llegarían a miembros del grupo multicast particular.
El capítulo 6 trata temas muy interesantes, en particular los de VLAN aunque brevemente. Ignoré algunos aspectos como MPLS pero sin dudas un capítulo muy bien desarrollado. Aún así, considero que en el protocolo de acceso múltiple de toma de turnos mediante polling Kurose podría ahondar un poco más respecto a adueñarse del canal, y tratar alguna implementación particular. Puede que sea un error conceptual de mi parte, pero me dio la impresión de que esto es posible dado que Kurose señala «The master node can determine when a node has finished sending its frames by observing the lack of a signal on the channel», de modo que si uno no respeta el máximo de tramas podría “monopolizar” el canal. La idea de usar timers me pareció acertada pero viendo implementaciones en general se suele asumir que algo así no ocurre, así que terminé suponiendo que serán usados en redes bien administradas y por ello Kurose lo omitió... pero una aclaración me habría ayudado.
Sobre los capítulos 7, 8 y 9 leí algo pero vagamente. Sin dudas algo que me queda pendiente es el capítulo 8 sobre seguridad y del capítulo 7 algo muy particular sobre las IP móviles, porque la idea de establecer conexiones TCP mientras un dispositivo se desplaza entre redes aparenta ser un dolor de cabeza.
Conclusión: Es un muy buen libro de introducción, considero que su idea de aproximación descendente se cumple perfectamente. Para aclarar dudas conviene tener material adicional y revisar documentos RFC para protocolos “abiertos”. Las tareas de laboratorio vi que se limitan a Wireshark, pero recomiendo practicar con Mininet de Stanford buscando la tarea de laboratorio de implementar algún routing protocol, ARP y el manejo de paquetes IP en una red emulada.
No son 5★ por los inconvenientes que mencioné, pero si la idea es leerlo como introducción a las redes y se pueden permitir los vacíos teóricos en algunas secciones, las 5★ le quedan perfectas.