Por encima de esa capa se encuentra una capa de transporte, por lo que UDP o TCP son ejemplos de implementaciones de protocolos de esta capa, y estos proporcionan cosas como confiabilidad, como prevenir paquetes recibidos duplicados, reintentar automáticamente paquetes perdidos o manejar la transmisión, como lo hace TCP.
Y luego, por encima de la capa de transporte, se encuentra la capa de aplicación, que todos conocemos y amamos, y es muy fácil de trabajar como desarrollador. Nos brinda un montón de herramientas agradables para desarrolladores de usuario final, como proporcionar métodos HTTP, encabezados, cookies, cifrado o direccionamiento legible para el usuario, que es cuando DNS traduce una URL del sitio web a la dirección IP a la que intentas apuntar. Y decidimos tomar todo esto para nuestra pila, que se ve así.
No tiene un nombre muy creativo. Básicamente son los mismos nombres de capas. Pero en la parte inferior, tenemos la capa de enlace, que, al igual que la capa de enlace en la pila TCP/IP, nuestra capa de enlace maneja la selección de la API de mensajería correcta proporcionada por el navegador. Entonces, un ejemplo es Chrome Runtime.sendMessage. Otro ejemplo es window.postMessage. Simplemente elegimos cuál es la API de mensajería correcta en función de la fuente y el destino.
La capa por encima de eso es la capa de paquetes, que, al igual que la capa de internet y los paquetes IP, manejamos el enrutamiento en esta capa a través de nuestra tabla de enrutamiento. Nuestra tabla de enrutamiento es mucho más simple porque la estructura de nuestra extensión de navegador está bastante definida. No tienes que tener un algoritmo como BGP para determinarlo. Entonces nuestra tabla de enrutamiento está codificada. Por encima de la capa de paquetes se encuentra la capa de datagramas, que es donde implementamos la fragmentación que necesitábamos para el modo incógnito en esta capa. Todavía utilizamos la obtención de URL de objetos, pero básicamente determinamos qué protocolo utilizar en esta capa, como si necesitamos fragmentación o si podemos usar URL de objetos, y esto depende de si el remitente y el receptor están en el mismo contexto de incógnito.
Y luego, por encima de la capa de datagramas, está la capa de aplicación, donde implementamos un patrón de estilo de intermediario, que se puede utilizar para enviar y recibir mensajes, y es muy conveniente. Puedes pensar en ello como HTTP. No tienes que pensar en ninguna de estas otras capas cuando estás trabajando en la capa de aplicación. Esto básicamente resolvió todos nuestros problemas. Aquí están nuestros problemas y aquí están nuestras soluciones. Para diferentes API de mensajería subyacentes, abstraemos esto con la capa de enlace, que maneja eso. Con restricciones de tamaño para los mensajes, lo manejamos fragmentando en la capa de datagramas. La incapacidad de los componentes para comunicarse directamente, lo manejamos reenviando paquetes en la capa de paquetes, para que podamos saltar sobre componentes y llegar al script del host. Tener múltiples pestañas o ventanas emergentes, esto se manejó con direccionamiento independiente en la capa de paquetes también. Los mensajes que se pierden, los manejamos mediante reintentos de paquetes en la capa de datagramas, y no se permite compartir memoria. Esto es el cambio dinámico entre la fragmentación y otro protocolo en la capa de datagramas según si el remitente o el receptor está en modo incógnito. Y eso es prácticamente todo. Mirando hacia atrás en este proyecto, esto fue hace aproximadamente ocho meses. Tuvimos algunos grandes beneficios de esto.
Comments