MXPA03003787A - Metodo para sincronizar y cargar una conexion de pila de red descargada con una pila de la red. - Google Patents

Metodo para sincronizar y cargar una conexion de pila de red descargada con una pila de la red.

Info

Publication number
MXPA03003787A
MXPA03003787A MXPA03003787A MXPA03003787A MXPA03003787A MX PA03003787 A MXPA03003787 A MX PA03003787A MX PA03003787 A MXPA03003787 A MX PA03003787A MX PA03003787 A MXPA03003787 A MX PA03003787A MX PA03003787 A MXPA03003787 A MX PA03003787A
Authority
MX
Mexico
Prior art keywords
state
layer
peripheral device
network
initial
Prior art date
Application number
MXPA03003787A
Other languages
English (en)
Inventor
Srinivas Nk
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of MXPA03003787A publication Critical patent/MXPA03003787A/es

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/10Streamlined, light-weight or high-speed protocols, e.g. express transfer protocol [XTP] or byte stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/166IP fragmentation; TCP segmentation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Between Computers (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
  • Communication Control (AREA)

Abstract

Se presenta un metodo para sincronizar y cargar una conexion de pila de red descargada entre una pila de red anfitriona y un dispositivo periferico. Un objeto de estado para cada capa en la pila se envia al dispositivo que incluye variables de estado que se clasifica como una constante, una variable en memoria cache que manipula el anfitrion, o una variable delegada que manipula el dispositivo. El estado que se debe actualizar mediante la pila de red y el dispositivo periferico se divide de manera nitida. Por ejemplo, las estadisticas se rastrean mediante el anfitrion, el dispositivo, o el anfitrion y el dispositivo. Una estadistica que se rastrea tanto por el anfitrion como por el dispositivo periferico se divide en porciones que no se traslapan y combinadas para producir la estadistica. Una vez que se ha iniciado la carga, el dispositivo consigue un estado consistente y entrega los estados delegados a la pila. Cada capa en la pila toma control de su estado delegado y los recursos en el dispositivo se liberan.

Description

METODO PARA SINCRONIZAR Y CARGAR UNA CONEXION DE PILA DE RED DESCARGADA CON UNA PILA DE LA RED CAMPO DE LA INVENCION Esta invención se relaciona generalmente con métodos para incrementar la eficiencia, velocidad, y/o rendimiento de un sistema de computadora y, de manera más particular, se relaciona con métodos para sincronizar y cargar tareas de computación que realiza típicamente un procesador anfitrión que se ha descargado a un componente de hardware específico.
ANTECEDENTES DE LA INVENCION La complejidad y sofisticación de los sistemas operativos, software de aplicación, puesta en red, comunicaciones en red, y similares, continúa incrementándose a velocidades dramáticas. Un resultado de la complejidad y sofisticación es la funcionalidad incrementada de las aplicaciones y los sistemas . Esta funcionalidad incrementada frecuentemente da como resultado un incremento en la sobrecarga de la CPU debido a los deberes adicionales que debe realizar la CPU para ejecutar el sistema incrementado y las funciones de la aplicación. Un área en donde el incremento en la sobrecarga de la CPU es fácilmente aparente es en el área de las aplicaciones en red, en donde se incrementan las velocidades de la red debido al crecimiento en medios de ancho de banda elevado. Las velocidades de la red frecuentemente coinciden, y exceden de manera aumentante, la velocidad del procesador de la CPU y las capacidades de ancho de banda de la memoria de las computadoras anfitriones. Estas aplicaciones en red cargan de manera adicional al procesador anfitrión debido a la arquitectura en capas que usan la mayoria de los sistemas operativos, tales como el modelo ISO de siete capas o el modelo en capas que usa el sistema operativo de Windows. Como es bien sabido, este modelo se usa para describir el flujo de datos entre la conexión física a la red y la aplicación del usuario final. La mayoria de las funciones básicas, tal como poner bits de datos sobre el cable de la red, se realizan en las capas inferiores, mientras que las funciones que atienden a los detalles de las aplicaciones están en las capas superiores. Esencialmente, el propósito de cada capa es proporcionar servicios a la siguiente capa superior, protegiendo la capa más elevada de los detalles en a cómo se implementan en realidad los servicios. Las capas están abstraidas de tal manera que cada capa cree que se está comunicando con la misma capa en la otra computadora. Las diferentes funciones que se realizan en un paquete de datos a medida que éste procede entre las capas, pueden ser intensivas en software, y frecuentemente requieren una cantidad sustancias del procesador de la CPU y recursos de la memoria. Por ejemplo, ciertas funciones que se realizan en el paquete en diferentes capas son extremadamente intensivas en CPU, tales como el cálculo y la verificación de suma de verificación del paquete, encriptación y desencriptación de datos (por ejemplo, la encriptación de SSL y la encriptación de Seguridad del IP) , cálculo de compendio del mensaje, segmentación del TCP, procesamiento de retransmisión y reconocimiento (ACK) del TCP, filtrado de paquete para resguardar contra ataques de rechazo de servicio, y fragmentación del paquete de Protocolo de Datagrama del Usuario (UDP, por sus siglas en inglés) . A medida que se realiza cada una de estas funciones, las demandas resultantes sobre la CPU pueden afectar grandemente el rendimiento y desempeño del sistema de computadora en general. Aunque la demanda sobre los recursos de la CPU crece, la capacidad y el rendimiento de los periféricos del hardware de la computadora tales como las tarjetas de la interfase de la red (NICs, por sus siglas en inglés) y similares también están creciendo. Estos periféricos están equipados f ecuentemente con un procesador y memoria dedicados que pueden realizar muchas de las tareas y funciones que realiza de otra manera la CPU. La industria de las computadoras reconoció esta capacidad y desarrolló métodos para descargar las tareas y funciones intensivas de la CPU que anteriormente realizaba la CPU . Por ejemplo, la patente comúnmente asignada de los Estados Unidos de Norteamérica Número 6,141,705 de Anand y colaboradores, y las solicitudes de patente Número 90/657,510, "Método y Producto de Programa de Computadora para Descargar Tareas de Procesamiento del Software al Hardware," que se presentó el 7 de septiembre de 2000, y la Número 09/726,082, "Método y Producto de Programa de Computadora para Descargar Tareas de Procesamiento del Software al Hardware," que se presentó el 29 de noviembre de 2000, proporcionan soluciones para los dispositivos periféricos de consulta y las tareas del procesador específico de descarga a los dispositivos periféricos que puedan realizar las tareas y funciones intensivas. Las tareas específicas que se descargan típicamente incluyen tareas tales como el cálculo de suma de verificación de TCP (Protocolo de Control de Transmisión) o de IP (Protocolo de la Internet) , segmentación del TCP tal como la descarga de envío grande (LSO, por sus siglas en inglés), y encriptación y desencriptacíón seguras del protocolo de la Internet (IPSEC, por sus siglas en inglés) , Estos mecanismos de descarga están limitados porque los mecanismos tienen un requerimiento secundario de que se haga un número mínimo de cambios a la pila de la red. Como un resultado de este requerimiento secundario, otra limitación es que las descargas tengan una trayectoria de código larga debido a que la pila completa de la red está atravesada con las tareas y funciones descargadas que están incapacitadas para alcanzar el dispositivo periférico. Una limitación adicional es la carencia de integración con la pila de la red. No existe una interfase bien definida para la pila de la red para consultar o establecer los parámetros en el dispositivo periférico o una interfase para el que el dispositivo periférico le informe a la pila de la red de alguna notificación o cambios de capacidades. Por ejemplo, si la ruta cambia cuando se está procesando una solicitud de LSO, el mecanismo de retroceso es que la pila espere por intervalos y vuelta a transmitir la solicitud de LSO. Otro planteamiento que los fabricantes de dispositivos periféricos trataron de hacer fue descargar la conexión total del TCP de la pila central a una tarjeta de interfase de red (NIC, por sus siglas en inglés) . Este planteamiento desvía la pila de protocolo completa mediante el uso de una interfase patentada y requiere que el dispositivo periférico maneje todos los mensajes del TCP, mensajes de IP (Protocolo de la Internet), mensajes del IC P (Protocolo de Mensaje de Control de la Internet), mensajes del DNS (Servidor de Nombre del Dominio) y mensajes del RIP, que requieren que la NIC procese todo. Adicionalmente, este planteamiento no se dirige a entornos de múltiples hogares y no se integra de manera nítida con los servicios públicos de administración de la red del sistema operativo anfitrión. Una vez que cambia el estado, la conexión de descarga puede fallar fácilmente.
BREVE COMPENDIO DE LA INVENCION La presente invención proporciona un método para descargar una conexión de pila de la red, tal como una pila de protocolo que se basa en el TLC. Los datos que se enviarían normalmente a través de una trayectoria NDIS (especificación de interfase del controlador de la red) que tiene múltiples capas de software a un dispositivo periférico, se descargan a una trayectoria desde una capa conmutadora al dispositivo periférico. Se mantienen la sincronización apretada con la pila de la red y la unidad de procesamiento. Se envía una solicitud para descargar la pila a través de la trayectoria NDIS al dispositivo periférico. La solicitud incluye una lista de requerimiento de recursos de manera que el dispositivo periférico tenga la información que se necesita para distribuir los recursos. Cada capa en la trayectoria NDIS agrega sus requerimientos de recursos a la lista. Si el dispositivo periférico acepta la solicitud, el dispositivo periférico distribuye los recursos y envía un identificador de descarga a cada una de las capas de software de manera que las capas de software se puedan comunicar con el dispositivo periférico. Se envia el estado para cada capa de software al dispositivo periférico una vez que se ha comunicado la aceptación de descarga del dispositivo periférico a la capa de software. De manera alternativa, el estado se envía con la solicitud de descarga y solo se envían los cambios en el estado al dispositivo periférico. Cada estado tiene variables de estado y cada variable de estado se clasifica como una variable constante, una variable en memoria caché, o una variable delegada. Las variables constantes no cambian durante el tiempo en el que la pila del protocolo se descarga. Las variables en memoria caché se manejan mediante la CPU y las variables delegadas se manejan mediante el dispositivo periférico. La presente invención también proporciona un método para cargar una conexión de red descargada desde el dispositivo periférico hacia el anfitrión. La carga se inicia ya sea mediante el dispositivo periférico o la capa conmutadora. Una vez que se inicia la carga, el dispositivo periférico completa todas las solicitudes sobresalientes y pasa el estado delegado a la capa conmutadora. Después de que el anfitrión ha aceptado el estado delegado, se liberan los recursos del estado en el dispositivo periférico. Durante las transferencias de descarga o de carga, puede arribar una actualización (por ejemplo, actualización ARP o actualización RIP) . Se usa un número de secuencia para asegurar que se use el mensaje que se haya actualizado más recientemente, si el dispositivo periférico recibe múltiples mensajes de actualización, de manera que el dispositivo periférico no use datos obsoletos. Las características y ventajas adicionales de la invención serán aparentes a partir de la siguiente descripción detallada de las modalidades ilustrativas, las cuales proceden con referencia a las figuras acompañantes.
BREVE DESCRIPCION DE LOS DIBUJOS Aunque las reivindicaciones anexas establecen las características de la presente invención con particularidad, la invención, junto con sus objetivos y ventajas, se puede entender mejor a partir de la siguiente descripción detallada tomada en conjunción con los dibujos acompañantes, de los cuales : La Figura 1 es un diagrama de bloques que ilustra generalmente un sistema de computadora ejemplar sobre el cual reside la presente invención. La Figura 2 es un diagrama de bloques que ilustra las capas funcionales de la pila de la red y la trayectoria de desviación de la presente invención. La Figura 3 es un diagrama de bloques que ilustra las capas funcionales de la trayectoria NDIS y la trayectoria de desviación de la presente invención. La Figura 4 es un diagrama de escalera que ilustra el mecanismo de descarga de la presente invención. Las Figuras 5a-5c son diagramas que ilustran un árbol invertido de la presente invención. La Figura 6 es un diagrama de bloques que ilustra la sincronización entre la computadora anfitriona y el dispositivo periférico. La Figura 7 es un diagrama de escalera que ilustra el mecanismo de carga de la presente invención. La Figura 8 es un diagrama de escalera que ilustra el mecanismo de descarga de una conexión de pila de protocolo seguro, de conformidad con las enseñanzas de la presente invención; y La Figura 9 es un diagrama de escalera que ilustra el mecanismo de carga de una conexión de pila de protocolo descargado seguro, de conformidad con las enseñanzas de la presente invención.
DESCRIPCION DETALLADA DE LA INVENCION Volviendo a los dibujos, en donde los números de referencia iguales se refieren a elementos iguales, la invención se ilustra como estando implementada en un medio entorno de computación adecuado. Aunque no se requiere, la invención se describirá en el contexto general de instrucciones ejecutables por computadora, tales como módulos de programa, que se ejecutan mediante una computadora personal. En general, los módulos de programa incluyen rutinas, programas, objetos, componentes, estructuras de datos, etcétera, que realizan tareas particulares o que implementan tipos de datos abstractos particulares. Además, aquellos expertos en la técnica apreciarán que la invención se puede practicar con otras configuraciones de sistema de computadora, incluyendo dispositivos manuales, sistemas de múltiples procesadores, electrónicos de consumidor basados en microprocesador o programables , PCs de la red, minicomputadoras , computadoras de gabinete, periféricos en la red (por ejemplo, impresoras en la red) y similares. La invención también se puede practicar en entornos de computación distribuidos en donde las tareas se realizan mediante dispositivos de procesamiento remotos que se enlazan a través de una red de comunicaciones. En un entorno de computación distribuido, los módulos de programa se pueden localizar en dispositivos de almacenamiento de memoria tanto locales como remotos. La Figura 1 ilustra un ejemplo de un entorno de sistema de computación adecuado 100 sobre el cual se puede implementar la invención. El entorno del sistema de computación 100 es solamente un ejemplo de un entorno de computación adecuado y no se pretende sugerir ninguna limitación en cuanto al alcance o funcionalidad de la invención. Tampoco se deberá interpretar el entorno de computación 100 como teniendo alguna dependencia o requerimiento con relación a ninguno o a alguna combinación de componentes que se ilustre en el entorno operativo 100 e emplar . La invención es operativa con otros muchos entornos o configuraciones de sistemas de computación de propósito general o especial. Los ejemplos de sistemas de computación, entornos, y/o configuraciones bien conocidos que pudieran ser adecuados para usarse con la invención incluyen, pero no se limitan ar computadoras personales, computadoras de servidores, dispositivos manuales o laptop, sistemas de múltiples procesadores, sistemas basados en microprocesadores, cajas superiores, electrónicos de consumidor programables , periféricos en red (por ejemplo, impresoras en la red) , entornos de computación distribuidos que incluyen cualesquiera de los sistemas o dispositivos anteriores, y similares. La invención se puede describir en el contexto general de instrucciones ejecutables por computadora, tales como módulos de programa, que se ejecutan mediante una computadora. En general, los módulos de programa incluyen rutinas, programas, objetos, componentes, estructuras de datos, etcétera, que realizan tareas particulares o que impleraentan tipos de datos abstractos particulares. La invención también se puede practicar en entornos de computación distribuidos en donde las tareas se realizan mediante dispositivos de procesamiento remotos que se enlazan a través de una red de comunicaciones. En un entorno de computación distribuida, los módulos de programa se pueden localizar en medios de almacenamiento de computadora tanto locales como remotos que incluyen dispositivos de almacenamiento de memoria. Con referencia a la Figura 1, un sistema ejemplar para implementar la invención incluye un dispositivo de computación de propósito general en la forma de una computadora 110. Los componentes de la computadora 110 pueden incluir, pero no se limitan a, una unidad de procesamiento 120, una memoria del sistema 130, y una barra colectora del sistema 121 que acopla diferentes componentes del sistema que incluyen la memoria del sistema para la unidad de procesamiento 120. La barra colectora del sistema 121 pudiera ser cualquiera de diferentes tipos de estructuras de barras colectoras que incluyen una barra colectora de memoria o controlador de memoria, una barra colectora periférica, una barra colectora transversal, un material de barra colectora modificada, y una barra colectora local que usa cualesquiera de una variedad de arquitecturas de barras colectoras. La barra colectora del sistema 121 también puede ser una jerarquía de barras colectoras. A modo de ejemplo, y sin limitación, estas arquitecturas incluyen la barra colectora de Industry Standard Architecture (ISA), la barra colectora de Micro Channel Architecture (MCA) , la barra colectora Enhanced ISA (EISA) , la barra colectora local de Video Electronics Standards Associate (VESA) , la barra colectora de arquitectura de No Cache Non-Uniform Memory Access (NC-NUMA) , la barra colectora de arquitectura de Cache-Coherent Non-Uniform Memory Access (CC-NUMA) y la barra colectora de Peripheral Component Interconnect (PCI) que también se conoce como barra colectora Mezzanine. La computadora 110 típicamente incluye una variedad de medios legibles por computadora. Los medios legibles por computadora pueden ser cualesquier medios disponibles que se puedan accesar mediante la computadora 110 e incluyen medios tanto volátiles como no volátiles, medios removibles y no removibles. A modo de ejemplo, y sin limitación, los medios legibles por computadora pueden comprender medios de almacenamiento y medios de comunicación. Los medios de almacenamiento de computadora incluyen medios volátiles y no volátiles, removibles y no removibles que se implementan en cualquier método o tecnología para el almacenamiento de la información, tal como instrucciones legibles por computadora, estructuras de datos, módulos de programa u otros datos. Los medios legibles por computadora incluyen, pero no se limitan a RAM, ROM, EEPROM, memoria de destello u otra tecnología de memoria, CD-ROM, discos versátiles digitales (DVD) u otro almacenamiento de disco óptico, cartuchos magnéticos, cinta magnética, almacenamiento de disco magnético u otros dispositivos magnéticos de almacenamiento, o cualquier otro medio que se pueda usar para almacenar la información deseada y la cual se pueda accesar mediante la computadora 110. Los medios de comunicación típicamente abarcan instrucciones legibles por computadora, estructuras de datos, módulos de programa u otros datos en una señal de datos modulada tal como una onda portadora u otro mecanismo de transporte e incluyen cualquier medio de envío de información. El término "señal de datos modulada" quiere decir una señal que tiene una o más de sus características ajustada o cambiada de manera que codifique la información en la señal. A modo de ejemplo, y sin limitación, los medios de comunicación incluyen medios alambrados tales como una red alambrada o conexión alambrada directa, y medios inalámbricos tales como medios acústicos, RF, infrarrojos y otros medios inalámbricos. Las combinaciones de cualesquiera de los anteriores también se deberán incluir dentro del alcance de los medios legibles por computadora. La memoria del sistema 130 incluye medios de almacenamiento de computadora en la forma de memoria volátil y/o no volátil tal como la memoria de sólo lectura (ROM) 131 y la memoria de acceso aleatorio (RAM) 132. Un sistema de entrada/salida básico 133 (BIOS) , que contiene las rutinas básicas que ayudan a transferir la información entre os elementos dentro de la computadorallO , tal como durante el arranque, se almacena típicamente en la ROM 131. La RAM 132 típicamente contiene datos y/o módulos de programa que son inmediatamente accesibles para y/o sobre los que se está operando al presente mediante la unidad de procesamiento 120. A modo de ejemplo, y sin limitación, la Figura 1 ilustra el sistema operativo 134, los programas de aplicación 135, otros módulos de programa 136, y los datos del programa 137. La computadora 110 puede incluir también otros medios de almacenamiento de computadora removibles /no removibles, volátiles/no volátiles. A modo de ejemplo solamente, la Figura 1 ilustra una unidad de disco duro 141 que lee desde o escribe en medios magnéticos no removibles, no volátiles, una unidad de disco magnético 151 que lee desde o escribe en un disco magnético removible, no volátil 152, y una unidad de disco óptico 155 que lee desde o escribe en un disco óptico removible, no volátil 156 tal como un CD ROM u otros medios ópticos. Otros medios de almacenamiento de computadora removibles/no removibles, volátiles/no volátiles que se pueden usar en el entorno operativo ejemplar incluyen, pero no se limitan a, cartuchos de cinta magnética, tarjetas de memoria de destello, discos versátiles digitales, cinta de video digital, RAM de estado sólido, ROM de estado sólido, y similares. La unidad de disco duro 141 se conecta típicamente a la barra colectora 121 del sistema a través de una interfase de memoria no removible tal como la interfase 140, y la unidad de disco magnético 151 y la unidad de disco óptico 155 se conectan típicamente a la barra colectora 121 del sistema mediante una interfase de memoria removible, tal como la interfase 150. Las unidades y sus medios de almacenamiento de computadora asociados que se describieron anteriormente y que se ilustran en la Figura 1, proporcionan el almacenamiento de las instrucciones legibles por computadora, las estructuras de datos, los módulos de programa y otros datos para la computadorallO . En la Figura 1, por ejemplo, la unidad de disco duro 141 se ilustra como almacenando el sistema operativo 144, los programas de aplicación 145, otros módulos de programa 146, y los datos de programa 147. Note que estos componentes pueden ser ya sea iguales a, o diferentes del sistema operativo 134, los programas de aplicación 135, otros módulos de programa 136 y los datos de programa 137. Al sistema operativo 144, los programas de aplicación 145, otros módulos de programa 146, y a los datos de programa 147 se les dan números diferentes aquí para ilustrar que, como mínimo, son diferentes copias diferentes. Un usuario puede introducir comandos e información dentro de la computadora 110 a través de dispositivos de entrada tales como un teclado 162 y un dispositivo apuntador 161, al que se hace referencia comúnmente como un ratón, esfera de rastreo o cojinete sensible al tacto. Otros dispositivos de entrada (no se muestran) pueden incluir in micrófono, palanca de mando, cojinete de juego, platillo satelital, escáner, entrada de video, o similares. Estos y otros dispositivos de entrada están conectados frecuentemente a la unidad de procesamiento 120 a través de una interfase de entrada del usuario 160 que se acopla con la barra colectora del sistema, pero se pueden conectar mediante otra interfase y estructuras de la barra colectora, tales como puerto paralelo, puerto de juego o una barra colectora en serie universal (USB, por sus siglas en inglés) . Un monitor 191 u otro tipo de dispositivo de despliegue visual también se conecta a la barra colectora 121 del sistema por medio de una interfase, tal como una interfase de video 190. Además del monitor, las computadoras también pueden incluir otros dispositivos periféricos de salida tales como bocinas 197, impresora 196, y una salida de video, la cual se puede conectar a través de una interfase periférica de salida 195.
La computadora 110 puede operar en un entorno en red usando conexiones lógicas a una o más computadoras remotas, tal como una computadora remota 180. La computadora remota 180 puede ser otra computadora personal, un servidor, un encaminador, un dispositivo periférico de la red (por ejemplo, una impresora) , una PC de la red, un dispositivo de par u otro nodo común de la red, y típicamente incluye muchos o todos los elementos que se describieron anteriormente con relación a la computadora personal 110, aunque solamente se ha ilustra un dispositivo de almacenamiento de memoria 181 en la Figura 1. Las conexiones lógicas que se describen en la Figura 1 incluyen una red de área local (LAN) 171 y una red de área amplia (WAN) 173, pero pueden incluir también otras redes. Estos entornos en red son comunes en oficinas, redes de computadora a través de toda la empresa, intranets y la Internet . Cuando se usa en un entorno de red de LAN, la computadora personal 110 se conecta a la LAN 171 a través de una interfase o adaptador de la red (por ejemplo, una tarjeta de interfase de la red (NIC, por sus siglas en inglés) 170. Cuando se usa en un entorno de red de WAN, la computadora 110 típicamente incluye un módem 172 u otro elemento para establecer comunicaciones sobre la WAN 173, tal como la Internet. El módem 172, el cual puede ser interno o externo, se puede conectar a la barra colectora 121del sistema por medio de la interfase de entrada 160 del usuario, u otro mecanismo apropiado. En un entono en red, los módulos de programa que se describieron con relación a la computadora personal 110, o porciones de la misma, se pueden almacenar en el dispositivo de almacenamiento de memoria remoto. A modo de ejemplo, y sin limitación, la Figura 1 ilustra los programas de aplicación remotos 185 como residiendo en el dispositivo de memoria 181. Se apreciaré que las conexiones de la red que se muestran son ejemplares y que se pueden usar otros elementos para establecer un enlace de comunicaciones entre las computadoras. En la descripción que sigue, se describirá la invención con referencia a actos y representaciones simbólicas de operaciones que se realizan mediante una o más computadoras, a menos que se indique lo contrario. Como tal, se entenderá que estos actos y operaciones, a los cuales se hace referencia algunas veces como siendo ejecutados por computadora, incluyen la manipulación por parte de la unidad de procesamiento de señales eléctricas que representan los datos en una forma estructurada. Esta manipulación transforma los datos o los mantiene en ubicaciones en el sistema de memoria de la computadora, la cual vuelve a configurar o altera de alguna otra manera la operación de la computadora de una manera que entienden bien aquellos expertos en la técnica. Las estructuras de datos en donde se mantienen los datos son ubicaciones físicas de la memoria que tienen propiedades particulares que se definen mediante el formato de los datos. Sin embargo, aunque la invención se está describiendo en el contexto anterior, no se pretende que sea limitante ya que aquellos expertos en la técnica apreciarán que varios de los actos y operaciones que se describen más adelante también se pueden implementar en hardware. La Figura 2 ilustra la interrelación de algunos de los componentes que forman un modelo en red y los componentes de la presente invención. Durante la operación normal, los mensajes en red se envían mediante la aplicación 200 a través de una pila de la red 202 hacia el dispositivo periférico 204, en donde los mensajes se envían a otros dispositivos y aplicaciones sobre la red y se reciben desde los otros dispositivos y aplicaciones La pila de la red 202 incluye una o más capas intermedias de software 206. Los datos que se envían desde la aplicación 200 viajan a través de la(s) capa (s) intermedia ( s ) de software 206 en donde se pueden realizar operaciones específicas sobre los datos, tales como el empaquetamiento de los datos, la transmisión confiable de los datos, encriptación de datos y el cálculo de un compendio del mensaje. El conmutador 208 se usa para descargar la unidad de procesamiento 120 a partir de las operaciones de pila de la red en operación para la (s) capa(s) intermedias de software 206. Mientras que el conmutador 208 se muestra de manera separada, se debe notar que el conmutador 208 se puede integrar dentro de la capa intermedia superior de la pila de la red 202. Los datos se envían al dispositivo periférico 204 por medio de la chimenea 210 para el dispositivo periférico 204 para realizar las operaciones de la pila de la red. En esta jerarquía, las capas intermedias de software no tienen que residir de manera exclusiva en el dispositivo anfitrión o periférico y permite que cualesquiera de las capas intermedias se descarguen de manera completa, permanezcan en el anfitrión, o una combinación de las dos (por ejemplo, descarga una o más conexiones específicas) . De manera adicional, las chimeneas se pueden poner en capas en la parte superior de la chimenea (por ejemplo, una chimenea IPSEC se puede poner en capas en la parte superior de una chimenea de TCP) . Una conexión puede ser cualquier combinación de transferencia de datos confiables y no confiables y transferencia de datos de comunicación un solo punto o de comunicación múltiples puntos. Si una capa intermedia permanece en el anfitrión, el anfitrión actualiza las variables en la memoria caché (como se describe más adelante) en el dispositivo periférico 204. Por ejemplo, una entrada de estado de bloque de control de transporte (TCB, por sus siglas en inglés) para una conexión se puede descargar para la capa de transporte con una entrada en la memoria caché de ruta (RCE, por sus siglas en inglés) para la capa de la red que se descargó al dispositivo periférico 204. El conmutador 208 continúa enviando tráfico para un TCB diferente a través de la pila de la red 202 que comparte la misma RCE, mientras que el conmutador 208 envía el tráfico a través de la chimenea 210 para el TCB descargado. El conmutador 208 inicia la descarga por medio de enviar a la capa intermedia 206 una solicitud de descarga. La solicitud de descarga incluye información de recursos que ayuda al dispositivo periférico 204 a decidir si puede o no descargar la conexión de manera exitosa. Cada capa intermedia 206 o niega la solicitud de descarga o agrega la información de recursos a la solicitud de descarga y envía la solicitud de descarga a la capa de software adyacente en la pila de la red 202. Cuando el dispositivo periférico 204 recibe la solicitud de descarga, calcula si tiene recursos disponibles para descargar la conexión. El dispositivo periférico 204 niega la solicitud de descarga si la descarga no es posible. De otra manera, el dispositivo periférico 204 acepta la solicitud de descarga y distribuye los recursos para la conexión. El dispositivo periférico 204 completa la solicitud de descarga por medio de enviar una mensaje de terminación que tiene una lista enlazada de parámetros para la(s) capa (s) intermedia ( s ) de software 206. La lista enlazada de parámetros proporciona la información a la(s) capa(s) intermedia ( s ) 206 y el conmutador 208 para permitir que la (s) capa (s) intermedia (s) 206 y el conmutador 208 se comuniquen con el dispositivo periférico. Cada capa intermedia de software 208 remueve la información de su capa a partir de la lista enlazada de parámetros. Cuando una capa intermedia 206 recibe el mensaje de terminación para descargar, la capa intermedia 206 pasa su estado al dispositivo periférico 20 . Cada estado puede tener tres tipos de variables: CONST (CONSTANTE), CHACHED (EN MEMORIA CACHE), y DELEGATED (DELEGADA). Un estado puede tener los tres tipos de variables. Las variables CONST son constantes que nunca cambian durante la vida de la conexión que se descargó. Estas no se leen de regreso para las capas cuando se carga la conexión. La unidad de procesamiento anfitriona 120 mantiene la propiedad de las variables CACHEO y se asegura que cualesquier cambios a una variable CACHED en la unidad de procesamiento anfitriona 120 se actualicen en el dispositivo periférico 204. Los mensajes de control que cambian el estado CACHED se manejan mediante la pila de la red 202. Como un resultado, el anfitrión escribirá pero no necesitará leer de regreso a las variables CACHED cuando se carga la conexión. La unidad de procesamiento anfitriona 120 transfiere la propiedad de las variables DELEGATED al dispositivo periférico 204. Las variables DELEGATED se escriben una vez cuando ocurre la descarga y se leen de regreso cuando se termina la descarga. Por medio de solamente transferir de regreso las variables DELEGATED, se minimiza la sobrecarga por transferir la conexión de regreso al anfitrión. El estado que se deba compartir (por ejemplo, controlado) entre la pila de la red 202 y el dispositivo periférico 204 que por diferentes razones de desempeño se está descargando (es decir, delegado) , se divide de manera nítida entre la pila de la red 202 y la chimenea 210 (por ejemplo, ID de IP en descargas de TCP) de manera que tanto la pila de la red 202 y el dispositivo periférico 204 posea cada uno una porción exclusiva del estado. La unidad de procesamiento anfitriona 120 consulta el dispositivo periférico 204 por las variables DELEGATED que se necesitan (por ejemplo, para estadística) . La unidad de procesamiento anfitriona 120 también puede consultar las variables CONST y CACHED para diagnóstico. La división del estado en tres categorías facilita que la pila de la red 202 coexista de manera nítida con la chimenea 210. Se deberá notar que el estado se puede incluir en la solicitud de descarga. Esto se puede hacer si cualesquiera de los estados no contiene variables de estado delegadas o que contenga variables de estado delegadas que no cambiarán entre la solicitud de descarga inicial y la terminación de la solicitud de descarga. El dispositivo periférico 204 o el anfitrión decide cuándo se deberá cargar una conexión descargada. La carga se inicia ya sea mediante el dispositivo periférico 204 o el conmutador 208. Una vez que se ha iniciado la carga, el dispositivo periférico 204 completa todas las solicitudes sobresalientes con el estado apropiado y entrega el estado delegado de la capa intermedia más elevada al conmutador 208. El conmutador 208 pone en lista lineal cualesquier solicitudes de transmisión adicionales y deja de anunciar zonas de memoria intermedia de recepción. El conmutador 208 le ordena a la capa intermedia más elevada que tome control del estado delegado. La capa intermedia más elevada toma el control del estado delegado y envía un mensaje de terminación al conmutador 208. Después de que el conmutador208 recibe el mensaje de terminación, el modificado 208 confirma la carga al dispositivo periférico 204, lo cual habilita al dispositivo periférico 204 a liberar los recursos que ya no se están usando. Se deberá notar que la capa intermedia más elevada envía los paquetes de datos de entrada para la conexión descargada al dispositivo periférico 204 para procesamiento, hasta que toma el control del estado delegado. Los paquetes de datos pueden llegar entre el momento en el que el dispositivo periférico 204 entrega el estado delegado al conmutador 208 y el momento en el que la capa intermedia más elevada toma el control del estado delegado. Después de que el dispositivo periférico 204 entrega el estado delegado al conmutador 208, ya no puede procesar los paquetes de datos de entrada. El dispositivo periférico 204 envía un mensaje de error a la capa intermedia más elevada que indica que hay una carga en progreso cuando ésta recibe los datos de entrada. El mensaje de error le informa a la capa intermedia más elevada que deje de enviar los datos de entrada y que ponga en zona de memoria intermedia los datos adicionales hasta que la capa intermedia más elevada reciba el estado delegado. De manera alternativa, a expensas de memoria de zona de memoria intermedia adicional en el dispositivo periférico 204, los datos de entrada se podrían enviar al dispositivo periférico 204 para que el dispositivo periférico 204 ponga en zona de memoria intermedia los datos. Se pueden descargar múltiples conexiones mediante una capa de software intermedia 206 al dispositivo periférico 204. La capa de software intermedia 206 mantiene un contador de referencia del número de objetos de estado de la capa superior (es decir, objetos de estado de las capas por arriba de la capa de software intermedia 206) el cual hace referencia al objeto de estado de la capa de software intermedia para descarga. Un objeto de estado como se usa en la presente es una colección de variables de estado para una capa particular que se clasifican como CONST, CACHED, o DELEGATED como se usan en la presente. Si un objeto de estado descargado de la capa intermedia no tiene referencias a este mediante una capa arriba de él, la capa intermedia 206 envía un mensaje al dispositivo periférico 204 para cargar el objeto de estado para la capa intermedia y envía variables de estado delegadas a la capa intermedia 206. El dispositivo periférico 204 borra el objeto de estado para la capa intermedia 206 y la capa intermedia 206 envia un mensaje de terminación al conmutador 208. Volviendo ahora a la Figura 3, ahora que se ha descrito el concepto general, se describirán los detalles de la invención en una modalidad en donde el dispositivo periférico 204 es la NIC 170, el conmutador 208 es un conmutador de interfase de la capa de transporte (TLI, por sus siglas en inglés) 306, y la pila de la red 202 comprende una capa de transporte 300, una capa de la red 302, y una capa de ensamblaje 304. La capa de la red 302 también se conoce como una capa de trayectoria y la capa de ensamblaje 304 también se conoce como una capa vecina. Los mensajes en red se envían mediante la aplicación 200 a través de toda la pila de la red 202 al NIC 170 durante la operación. Los datos que se enviaron desde la aplicación 200 viajan a través del conmutador 306 de la TLI. Note que el conmutador 306 de la TLI se puede incorporar dentro de la capa superior de la pila de la red 202. Las capas de software en la pila de la red 202 reciben los datos desde la aplicación 200, los empaquetan en una forma de paquete y los envían al hardware 314 del dispositivo periférico por medio de la minicontrolador NDIS 310. Otras tareas que la pila de la red 202 puede realizar a medida que un paquete de datos pasa a través de la pila 202, incluyen encriptación de datos, transmisión confiable de datos, y cálculo de un compendio de mensajes (por ejemplo, suma de verificación o CRC para el paquete de datos). Muchas de estas tareas se realizan mediante la unidad de procesamiento 120 y son activos por el procesado . El conmutador 306 de la TLI se usa para descargar la unidad de procesamiento 120 de realizar operaciones de pila por medio de enviar los datos para las conexiones a la NIC 170 por medio de la chimenea 308 (y el controlador de chimenea 312). Aguellos expertos en la técnica reconocerán que la orilla superior del minicontrolador NDIS 310 y el controlador de chimenea 312 es el NDIS API en el sistema operativo de Microsoft. Para propósitos de explicación, se usará una la pila de protocolos basados en el protocolo de control de transmisión (TCP, por sus siglas en inglés) para explicar la invención. Sin embargo, aquellos expertos en la técnica apreciarán que se pueden usar muchos tipos de dispositivos periféricos y se pueden descargar otras pilas de la red, usando las enseñanzas de la presente invención. Por ejemplo, se pueden descargar el protocolo de transmisión de control de flujo (SCTP, por sus siglas en inglés) o el protocolo de datagrama del usuario (UDP) . Adicionalmente , también se puede usar la invención para descargar protocolos de funciones más elevadas tales como la interfase del sistema de computadora pequeña de la internet (iSCSI, por sus siglas en inglés), el sistema de archivo de la red (NFS, por sus siglas en inglés), o el sistema de archivo de interfase común (CIFS, por sus siglas en inglés) . Existen muchas razones por las que ocurre una descarga. A modo de ejemplo, y sin limitación, más adelante se proporcionan algunas de las razones. Un administrador del sistema puede seleccionar que se descargue un servicio especifico. Se puede descargar una conexión especifica si el tráfico (en términos del número de bytes o paquetes) en la conexión está consumiendo una cantidad significativa de recursos. Se pueden descargar tipos de servicios. Por ejemplo, se pueden descargar protocolos de seguridad tal como el IPSEC. Las descargas pueden ser impulsadas por políticas. Por ejemplo, un administrador puede tener una política de que se descarguen primero todas las conexiones desde dentro de una organización. Los recursos del sistema (por ejemplo, utilización de la cpu, uso de la memoria caché de datos, uso de memoria caché de tabla de página, ancho de banda de la memoria) que se están usando pudieran llevar a que el procesador anfitrión descargue las conexiones. La Figura 4 ilustra los pasos que se toman para descargar una conexión de TCP. Se usa un proceso de tres etapas. En general, el proceso de tres etapas es distribuir los recursos que se requieren para descargar la conexión TCP, proporcionar controladores de tamaño a cada una de las capas 300, 302, 304, 306 y descargar el estado para cada una de las capas 300, 302, 304 306 a la NIC 170. Durante la transición de descarga, el conmutador 306de la TLI pone en zona de memoria intermedia todos los mensajes que se envían desde la aplicación 200. De manera alternativa, la capa de transporte 300 pone en zona de memoria intermedia los datos. Cuando se termina la descarga, los datos en zona de memoria intermedia se transfieren a la NIC 170 usando el mismo mecanismo que la transmisión de datos de descarga. Cuando se reciben paquetes de entrada durante la transición de descarga, la NIC 170 continúa moviendo los datos hacia arriba a través de las capas 300, 302, 304, 306 hasta que se entrega el estado delegado de la capa de transporte a la NIC 170. El conmutador 306 de la TLI inicia la descarga por medio de enviarle a la capa de transporte 300 una solicitud de descarga (línea 400) . La solicitud de descarga incluye un puntero para el estado local de la siguiente capa (por ejemplo, un puntero TCB para la capa de transporte 300, un puntero RCE para la capa de la red 302, un puntero de tabla ARP para la capa de ensamblaje 304 o un puntero de minipuerto NDIS para el minicontrolador NDIS 310), el tipo de descarga (por ejemplo, TCP para el conmutador 306 de la TLI, IPv6 para la capa de la red 302, etcétera), y la información de recursos que ayudará a la NIC 170 a decidir si puede descargar de manera exitosa la conexión TCP. El conmutador 306 de la TLI puede proporcionar también tablas de envío a la NIC 170. La capa de transporte 300 o niega la solicitud de descarga o envía una solicitud de descarga a la capa de la red 302 con la información de recursos de TCP agregada a la información de recursos del conmutador de TLI (línea 402) . La capa de la red 302 recibe la solicitud de descarga y, o se niega a descargar la conexión o envía una solicitud de descarga a la capa de ensamblaje 304 con los requerimientos de recursos de la red agregados a la información de recursos de TCP y la información de recursos del conmutador de TLI (línea 404 ) . La capa de la red 302 también puede proporcionar tablas de envío a la NIC 170. La capa de ensamblaje 304, o se niega a descargar la conexión o envía una solicitud de descarga a la NIC 170 con los requerimientos de recursos de ensamblaje agregados a los requerimientos de recursos de la red, la información de recursos de TCP y la información de recursos del conmutador de la TLI (línea 306) . La NIC 170 recibe la solicitud de descarga y calcula si tiene recursos disponibles o no para descargar la conexión de TCP. Si la NIC decide que no es posible la descarga, rechaza la solicitud de descarga. Si la NIC decide que la descarga es posible, acepta la solicitud de descarga y distribuye los recursos (por ejemplo, TCB, entrada de memoria caché de ruta (RCE) , protocolo de resolución de dirección (ARP, por sus siglas en inglés) , entrada de tabla (ATE) ) para la conexión. La NIC 170 crea una lista enlazada de parámetros y envía las tablas que se van a entregar a las capas 300, 302, 304 y 306 y completa la solicitud de descarga por medio de enviar un mensaje de terminación que tienen la lista enlazada de parámetros a la capa de ensamblaje 304 (linea 408) . Los parámetros incluyen un identificador de descarga y la tabla de envío para cada una las capas 300, 302, 304, 306. Como se usa en la presente, un identificador de descarga quiere decir un mecanismo para permitir que una capa de software se comunique con el dispositivo periférico. A modo de ejemplo, y sin limitación, el identificador de descarga puede ser un identificador que se basa en puntero, un valor entero que se usa como una búsqueda dentro de una configuración, una tabla de comprobación aleatoria (por ejemplo, una función para comprobar aleatoriamente), un canal de comunicación entre la capa de software (o pila de la red) y el dispositivo periférico, o un conjunto de parámetros que se pasan mediante una capa de software que el dispositivo periférico usa para buscar el objeto de estado. Las tablas de envío se usan para enviar los datos directamente a la NIC 170 o recibir los datos directamente de la NIC 170. Las tablas de envío se pueden usar también para proporcionar diagnósticos. Por ejemplo, se puede agregar una capa de software para monitorear el sistema e inyectar fallas para asegurarse de que el sistema está funcionando de manera apropiada. De manera adicional, la tabla de envío se puede parchar mediante capas de software que pueden agregar funcionalidad adicional si es necesario. Por ejemplo, se podría agregar una capa de software para proporcionar la funcionalidad de un controlador de filtro. El parchado se hace típicamente por medio de sostener el puntero en la función original en donde se está insertando la función agregada y volviendo a dirigirlo (es decir, apuntarlo) hacia la función que se agregó. Después de que se ha insertado el parche, la función agregada realiza su función y después llama a la función original cada vez que se llama la función original . La capa de ensamblaje 304 almacena el identificador de descarga y la tabla de envío para la capa de ensamblaje en su Entrada de Tabla ARP para actualizaciones sencillas si la dirección MAC de destino cambia o el tipo de encapsulación cambia. La capa de ensamblaje 304 actualiza entonces el estado de la NIC ?0 que se asocia con la ATE (línea 410) . La capa de ensamblaje 304 remueve su estado de la lista enlazada y envía la información restante en la lista enlazada a la capa de la red 302 (línea 412) . La capa de la red 302 almacena el identificador de descarga y la tabla de envío para la capa de la red 302. La capa de la red 302 también envía su estado a la NIC 170 (línea 414) . La capa de la red 302 remueve la información de la capa de la red de la lista enlazada y envía un mensaje de terminación que tiene la lista enlazada de parámetros y las tablas de envío a la capa de transporte 300 (línea 416) . La capa de la red 302 puede enviar los fragmentos de IP que recibe para el estado descargado a la NIC 170 para procesamiento o puede procesar los fragmentos de IP en la capa de la red y enviarlos a la capa de transporte 300. En una modalidad alternativa, el objeto de estado de la capa se envía con la solicitud de descarga. Por ejemplo, el objeto de estado de la capa de ensamblaje y e objeto de estado de la capa de la red se envían con la solicitud de descarga y solamente si cambia el estado en memoria caché entre la solicitud de descarga y el evento de terminación, se actualiza el estado. El objeto de estado de la capa completa se puede enviar solamente con la solicitud de descarga ya sea si el estado delegado no está presente o no puede cambiar entre la solicitud de descarga y la terminación de la solicitud de descarga. Sin embargo, las variables de estado que se clasificaron como CONST se pueden enviar con la solicitud de descarga aún si el estado delegado está presente y puede cambiar entre la solicitud de descarga y la terminación de la solicitud de descarga. La capa de transporte 300 almacena el identificador de descarga para la capa de transporte y envía su estado a la NIC 170 (línea 418) . Si hay zonas de memoria intermedia de envío o recepción sobresalientes pendientes, la capa de transporte 300 regresa las zonas de memoria intermedia al conmutador 306 de TLI . Una vez que la capa de transporte 300 empieza a entregar las zonas de memoria intermedia al conmutador 306 de TLI, el conmutador 306 de TLI dejará de enviar las zonas de memoria intermedia a la capa de transporte 300 y las pone en lista lineal y espera que la capa de transporte 300 envíe un mensaje de terminación que tenga la lista enlazada de parámetros y la tabla de envío al conmutador 204 de TLI. La capa de transporte 300 regresa todas las zonas de memoria intermedia y después envía el mensaje de terminación (línea 420) . Una vez que el conmutador 306 de TLI recibe el mensaje de terminación, el conmutador 306 de TLI transfiere las zonas de memoria intermedia de envío y recepción a la NIC 170 (línea 422) . El conmutador 306 de TLI usa la tabla de envío para anunciar todas las zonas de memoria intermedia sobresalientes y de recepción futuras y las envía a la NIC 170 para procesamiento. Durante el tiempo que toma completar la solicitud de descarga, cada capa 300, 302, 304, o rechaza las solicitudes de descarga nuevas para el objeto de estado descargado (es decir, el objeto de estado que se asocia con una capa) , o las pone en lista lineal hasta que se complete la descarga.
La capa de transporte 300 todavía tiene la capacidad para procesar los datos de TCB entrantes y entregar los datos al conmutador 306 de TLI si no se ha descargado el estado de transporte a la NIC 170. Si los datos de TCB llegan a la mitad de una descarga, la capa de transporte 300 puede ya sea sujetarse a los datos o procesar los datos y entregarlos al conmutador 306 de TLI. Entre el momento en el que la capa de transporte 300 envia su estado a la NIC 170 (línea 418) y el momento en el que el conmutador de TLI transfiere las zonas de memoria intermedia a la NIC (línea 422) , los datos de TCB entrantes que están llegando a través de la pila de la red 202 se envían a la NIC 170. En las solicitudes de descarga subsecuentes, la capa de la red 302 y la capa de ensamblaje 304 pasan los identificadores de descarga que recibieron desde la NIC 170 desde la descarga previa hacia la NIC 170. Esto le señala a la NIC 170 que los recursos para la capa de la red 302 y la capa de ensamblaje 304 ya se han distribuido, lo cual conserva los recursos de la NIC y acelera la descarga. Como se indicó previamente, las capas 300, 302, 304 pasan su estado a la NIC 170. Cada estado tiene tres tipos de variables: CONST, CACHED, y DELEGATED. Las variables CONST son constantes que nunca cambian durante la vida de la conexión descargada. No se leen de regreso a las capas cuando se termina la conexión. La unidad de procesamiento anfitriona 120 mantiene la propiedad de las variables CACHED y se asegura que se actualicen cualesquier cambios a una variable CACHED en la unidad de procesamiento anfitriona 120 en la NIC 170. Como un resultado, el anfitrión escribirá pero nunca leerá de regreso las variables CACHED (a menos que lo solicite el diagnóstico del sistema) . La unidad de procesamiento anfitriona 120 transfiere la propiedad de las variables DELEGATED a la NIC 170. Las variables DELEGATED se escriben una vez que ocurre la descarga y se leen de regreso cuando se termina la descarga. Por medio de solo transferir las variables DELEGATED, se minimiza la sobrecarga por transferir la conexión de regreso al anfitrión. La unidad de procesamiento anfitriona 120 consulta la NIC 170 por variables DELEGATED cuando es necesario (por ejemplo, para estadísticas) . Las variables CONST para la capa de transporte 300 incluyen el puerto de destino, el puerto de origen, una banderola para indicar que hay un gabinete Mobile IP en donde se puede cambiar la dirección "a cargo de", factores de escala de ventana SEND (ENVIAR) y RECV (RECIBIDO) , y el identificador NIC para la capa de la red 302. Las variables CACHED para la capa de transporte 300 son variables TCP y variables IP. Las variables TCP incluyen el MSS Efectivo, el número de bytes que se van a copiar en la recepción que indica la NIC 170, una banderola para apagar el Nagling, una banderola para indicar que se necesita un Mantener-Vivo, y ajustes para Mantener-Vivo (es decir, intervalo, número de sondas, y delta) . Las variables IP incluyen TOS y TTL. Las variables DELEGATED incluyen el estado de TCP actual, el número de secuencia para el siguiente RECV (es decir, RCV.NEXT), tamaño de ventana de recepción (RCV.WND), el número de secuencia para los Primeros Datos Sin Reconocer (SND.UNA), el número de secuencia para el siguiente SEND (SND.NEXT), el número de secuencia máximo que se haya enviado (SND.MAX), la Ventana de Enviar máxima (MAX_WIN) , la ventana de congestión actual (C IN) , el umbral de inicio lento (SSTHRESH) , el RTT suavizado (8*A), Delta (8*D), el conteo de retransmisión actual, el tiempo restante para la Siguiente Retransmisión, y la estampa de tiempo que se va a repetir. Las variables CONST para la capa de la red 302 incluye la dirección IP de destino (ya sea para IPv4 o IPv6) y la dirección de IP de destino de origen (ya sea para IPv4 o IPv6) . Las variables CACHED para la capa de la red 302 incluyen el identificador de NIC para la capa de ensamblaje 304a. Las variables DELEGATED para la capa de la red 302 incluyen el valor de inicio de ID del Paquete de IP. Las variables CACHED para la capa de ensamblaje 304 incluyen la dirección de ARP y una banderola para indicar el formato del encabezado (por ejemplo, LLC/SNAP [Control de Enlace Lógico/Protocolo de Acceso a la Subred] o DIX [Digital, Intel , Xerox] ) . El estado de la capa de transporte incluye un identificador para la capa de la red y el estado de la capa de la red incluye un identificador para el estado de ensamblaje debido a que el estado de la capa de la red se puede compartir entre múltiples conexiones y el estado de la capa de ensamblaje se puede compartir entre múltiples trayectorias (por ejemplo, alias de IP) . Se mantiene esta jerarquía por diferentes razones. Una conexión requiere un identificador de NIC para la capa de la red debido a que el espacio de nombre de la ID de IP se debe administrar a través de todas las conexiones que se descargan sobre una base por trayectoria. Una trayectoria requiere un identificador de NIC para la capa de ensamblaje porque una actualización de ruta podría cambiar la dirección del siguiente salto, apuntando así a una dirección MAC nueva. La jerarquía también condensa la cantidad de estado que se requiere mantener por parte de la NIC. Por ejemplo, una actualización de ARP para IPv4 podría cambiar el mapeo desde una dirección de IP hacia una dirección de MAC (por ejemplo, una interfase falló sobre el servidor) . El anfitrión mantiene la dirección de MAC como una variable en memoria caché, por tanto solamente necesita hacer una sola actualización del estado en memoria caché y todas las conexiones se suspenden sobre la interfase nueva. Una vez que la conexión de TCP se descarga, la NIC 170 es responsable de asignar los identificadores de paquete (por ejemplo IDs de IP) para los paquetes que envía. La ID de IP se descarga ya sea sobre una base por interfase o una base de objeto de estado por capa. Se le asigna a la NIC 170 una porción del espacio de nombre de la ID de IP. En una modalidad, se le asigna a la NIC 170 la mitad del total del espacio de nombre de la ID de IP y se le da un valor de inicio de ID del paquete IP cuando el estado de la red se pasa a la NIC 170. La NIC 170 usa la siguiente fórmula para generar una ID de IP sobre los paquetes IP que envía: Cur_IPID = [ (Start_IPID_For_This_Path) + (Counter_For_This_ Path)mod32K]mod 64K Counter_For This_Path = Counter_For_This_Path + 1 Cuando la conexión descargada o se carga o se invalidad, la NIC 170 transfiere el siguiente valor IPID que usaría a la capa de la red para almacenar para la siguiente descara que ocurra y la unidad de procesamiento anfitriona 120 continúa usando la porción del espacio de nombre de ID de IP, pero se tendrá que ajustar el contador cada vez que ocurra una descarga . La NIC 170 coloca los datos dentro de las zonas de memoria intermedxa de recepción en el orden en que se reciben los datos y llena las zonas de memoria intermedia de la aplicación en el orden en el que se anunciaron para la conexión descargada. Muchas aplicaciones esperan por una indicación de recepción antes de anunciar una zona de memoria intermedia de recepción. En una modalidad, la NIC 170 tiene grupos globales de zonas de memorias intermedias para usar si los datos llegan para una conexión y no se han desplegado zonas de memoria intermedia de recepción de la aplicación. El grupo global de zonas de memoria intermedia se usa a través de las conexiones descargadas y se puede usar para implementar : 1) manipulación de transmisiones de TCP fuera-de-servicio; 2) desf agmentar datagramas de IP; 3) un algoritmo de copia de la zona de memoria intermedia más bien que un algoritmo de copia cero si la aplicación está colocando zonas de memoria intermedia que son demasiado pequeñas para un algoritmo de copia cero. De manera alternativa, se puede usar un grupo por conexión de zonas de memoria intermedia si el uso eficiente de recursos no es un problema. Sin embargo, se usa el grupo global de zonas de memoria intermedia si una NIC no soporta un grupo por conexión de zonas de memoria intermedia o por falta de recursos del sistema (por ejemplo, no hay suficientes recursos para asegurar la zona de memoria intermedia de la aplicación en la memoria) . Volviendo ahora a las Figuras 5a-5d, la NIC 170 tiene un árbol invertido 500 que es representativo de la descarga una vez que ha ocurrido la descarga. En las figuras, las lineas punteadas representan estados nuevos que se distribuyen mediante la NIC 170. en la Figura 5a, la NIC 170 tiene una entrada de ARP 502 que se acopla a una entrada de memoria caché de ruta 504 que está acoplada a una entrada de TCP 506. Si, por ejemplo, todo el tráfico está yendo a un encaminador, el siguiente salto siempre será a la misma entrada de ARP 502. Si la entrada de memoria caché de ruta 504 se va a usar para la siguiente descarga de la conexión de TCP, el único recurso nuevo es el TCB descargado nuevo. Por tanto, cuando se inicia una descarga abajo de la pila de la red 202, las capas intermedias de software que ya han descargado su estado (por ejemplo, la capa de la red 302 y la capa de ensamblaje 304) simplemente insertarían el identificador de descarga generado por NIC que se haya distribuido sobre la solicitud de descarga previa. La NIC 170 solamente tiene que distribuir recursos nuevos (por ejemplo, entrada de TCP 508) y enviar identificadores de descarga para los recursos nuevos de regreso a la pila de la red 202. el árbol invertido 500 tiene ahora la entrada de TCP 508 acoplado con la entrada de memoria caché de ruta 504 (ver Figura 5b) . Este planteamiento ahorra los recursos de la NIC y acelera la descarga. De manera adicional, si cambia el estado de la variable en memoria caché, solamente se necesita actualizar una sola estructura. Si todos los estados para las diferentes capas de software se descargaran como una sola entrada, cualquier actualización de estado por debajo de la capa de software superior requerirla múltiples actualizaciones . La Figura 5C muestra el árbol invertido 500 con una configuración más compleja. Existen dos entradas de memoria caché de ruta, 504 y 510, que pasan a través de la entrada de tabla ARP 502. Las conexiones de TCP 506 y 508 utilizan la entrada de memoria caché de ruta 504. Las conexiones de TCP 512 y 514 hacen referencia a la entrada de memoria caché de ruta 510. Si ocurre alguna actualización de ARP (por ejemplo, falla una interfase del servidor de múltiples hogares), solamente se deberá actualizar la entrada 502. Esto habilita que potencialmente miles o cientos de miles de conexiones fallen para una interfase nueva requiriéndose solamente una sola actualización a la NIC 170. La Figura 5d muestra dos árboles invertidos independientes (entradas 502-508 y entradas 510-516) fusionadas en un solo árbol invertido 500 después de que ocurre una actualización de la ruta. Antes de la actualización de la ruta, la entrada de ARP del siguiente salto para la entrada de memoria caché de ruta 510 es la entrada de tabla ARP 516. Después de la actualización de la ruta, la entrada de la tabla ARP del siguiente salto es la entrada de tabla ARP 502. Por lo tanto, el uso de un árbol invertido facilita que las actualizaciones de la ruta se procesen como una sola transacción para la NIC 170, más bien que miles o decenas de miles de actualizaciones si la el estado de la pila de red se descargara como una sola entrada.
Volviendo ahora a la Figura 6, una vez que se ha descargado una conexión a la NIC 170, existen dos trayectorias para la NIC 170, La primera trayectoria es a través del minicontrolador NDIS 310 a través de la capa de ensamblaje 304, la capa de la red 302, y la capa de transporte 300. La segunda trayectoria es a través de la conexión descargada 608, la cual se llama chimenea. Desde la perspectiva de la computadora del anfitrión, todo es igual para las dos trayectorias en términos de la comunicación. Las variables del estado en memoria caché sincronizan las dos trayectorias con la unidad de procesamiento 120 que actualiza las variables del estado en memoria caché en la NIC 170, como se indicó previamente. La actualización de las variables en memoria caché se indica mediante las flechas 602, 604, 606. Cuando llega un paquete de datos de entrada, la NIC 170 determina si el paquete de datos de entrada va a través de la trayectoria descargada o la trayectoria no descargada (es decir, a través de la trayectoria NDIS del minicontrolador NDIS 310 y las capas 304, 302, 300) . En una modalidad, la NIC 170 determina a cuál trayectoria enviar el paquete de datos de entrada por medio de realizar una función de comprobación aleatoria sobre el número de puerto de TCP de origen y destino, dirección de IP de origen y destino y el tipo de protocolo. Si la comprobación aleatoria coincide con los parámetros de conexión descargada (es decir, se hace caminar una cadena de baldes de comprobación aleatoria y ocurre la igualación exacta de todos los tupies de la conexión), se usa la chimenea 608. Si la comprobación aleatoria no coincide con el Índice de comprobación aleatoria, se usa la trayectoria no descargada a través de la pila de la red 202. El anfitrión maneja los mensajes de control que actualizan los estados en memoria caché. Esto da como resultado que la NIC 170 no tenga que manejar ningún mensaje de control fuera de la conexión descargada tales como los mensajes ICMP, DNS, y RIP. La presente invención le proporciona a un usuario la capacidad para derivar estadísticas usando las herramientas existentes tales como la Netstat para recuperar una variedad de información que incluye todas las conexiones sobre el anfitrión, parámetros de la conexión tal como el tipo de protocolo, puerto local y remoto y tiras de direcciones de IP, estado de la conexión, id del proceso, etcétera. Las estadísticas se reúnen ya sea sobre una base por capa o una base de objeto de estado por capa en la presente invención. Dentro de una capa, se pueden agrupar los objetos del estado de la capa para reunir estadísticas a través de los objetos de estado de múltiples capas. Por ejemplo, las estadísticas para la capa de la red se pueden separar de manera que las estadísticas sean para cada protocolo que se está usando (por ejemplo, IPv4 e IPv6) . Las estadísticas que se asocian con las variables de estado CONST y CACHED las proporciona el anfitrión y las estadísticas que se asocian con las variables de estado DELEGATED las proporciona el dispositivo periférico 204. Cuando se hace una consulta, las estadísticas que se asocian con las variables de estado DELEGATED se anexan a las estadísticas que se asocian con las variables de estado CONST y CACHED. También existe una clase de estadísticas que se suma a través del agrupamiento entero del estado de la capa anfitriona y la capa del dispositivo periférico tal como un conteo de paquete. Otro tipo de estadística es un listado del estado de una función en el sistema (por ejemplo, un listado del estado de cada TCB en el sistema) . Las estadísticas para un TCB son la combinación de las estadísticas que rastreó el anfitrión y las estadísticas que rastrea el dispositivo periférico. De manera similar, la estadística para el conteo del paquete es la suma de la estadística del estado de la capa anfitriona y la estadística de estado de la capa del dispositivo periférico. En la Tabla 1 más adelante se ilustra un ejemplo de la división entre el anfitrión y el dispositivo periférico 204 para la MIB (Base de Información de Administración) del TCP y en la Tabla 2 más adelante se presentan las estadísticas de la MIB de IPv4. En estas tablas, la primera columna es el campo, la segunda columna designa si el dispositivo periférico o la pila de la red anfitriona son responsables por el rastreo de la estadística y el tercer campo indica cómo se rastreó el campo. Las estadísticas de las que el dispositivo periférico es responsable se rastrean sobre una base de objeto de estado por capa o una base por capa. Por capa como se usa en la presente quiere decir que la estadística se rastrea por capa por dispositivo periférico por protocolo. Note, sin embargo, que cuando se sintetiza la estadística a partir del estado anfitrión y el estado a partir del (los) dispositivo ( s ) periférico ( s ) , generalmente se presenta sobre una base por protocolo. Las estadísticas que la pila de la red anfitriona puede generar sin consultar el dispositivo periférico se clasifican como "pila tiene info completa" o "hecho por pila solamente." La categoría "pila tiene info completa" indica que el dispositivo periférico conoce acerca de la estadística, pero no rastrea la estadística. La estadística "hecho por pila solamente" indica que el dispositivo periférico no conoce acerca de la estadística. Las estadísticas del adaptador se consultan a través de la inferíase NDIS regular. Las estadísticas del adaptador incluyen variables tales como bytes enviados, bytes recibidos, etcétera. 1 Campo de Estructura Responsabilidad Cómo se rastrea el TCPStats c mpo Jts RtoAlgorithm pila de red anfitriona Pila tiene info completa Its toMin pila de red anfitriona Pila tiene info completa Its Rto ax pila de red anfitriona Pila tiene info completa Its MaxConn pila de red anfitriona Pila tiene info completa Its ActiveOpens pila de red anfitriona Hecho por pila solamente 1 ts_Passi eOpens pila de red anfitriona Hecho por pila solamente Its AttemptFails pila de red anfitriona Hecho por pila solamente ts EstabResets pila de red anfitriona Pila tiene info completa ts CurrEstab pila de red anfitriona y Por capa dispositivo periférico Its InSegs pila de red anfitriona y Por capa dispositivo periférico Its OutSegs pila de red anfitriona y Por capa dispositivo periférico Its RetransSegs pila de red anfitriona y Por capa dispositivo periférico Its InErrs pila de red anfitriona y Por capa dispositivo periférico ts OutRsts pila de red anfitriona y Por capa dispositivo periférico Its NumCons pila de red anfitriona Pila tiene info completa Tabla 1. División de Estadísticas TCP MIB El ts_RtoAlgorithm es un valor para un algoritmo que se usa para determinar el valor de intervalo que se usa para volver a transmitir octetos no reconocidos. El ts_Rto_Min es un valor para el valor mínimo permitido por la implementación del TCP para el intervalo de retransmisión que se midió en milisegundos . El ts_Rto_Min es el valor máximo que se permite mediante una implementación de TCP para el intervalo de retransmisión que se midió en milisegundos . El ts_MaxConn es el número total de conexiones de TCP que se puede soportar. El ts__ActiveOpens s el número de veces que las conexiones de TCP han hecho una transición directa al estado SYN_SENT desde el estado CLOSED (CERRADO) . El ts_PassiveOpens es el número de veces que las conexiones de TCP han hecho una transición directa al estado SYN_RCVD desde el estado LISTEN (ESCUCHAR) . El ts^AttemptFails es el número de veces que las conexiones de TCP han hecho una transición directa al estado CLOSED desde ya sea el estado SYN_SENT o el estado SYN_RCVD más el número de veces que las conexiones de TCP han hecho una transición directa al estado LISTEN desde el estado SYN_RCVD. El ts_EstabResets es el número de veces que las conexiones de TCP han hecho una transición directa al estado CLOSED desde ya sea el estado ESTABLISHED (ESTABLECIDO) o el estado CLOSE- AIT (ESPERA CERCANA) . El ts_CurrEstab es el número de conexiones de TCP para las cuales el estado actual es ya sea ESTABLISHED o CLOSE-WAIT . El ts_InSegs es el número total de segmentos que se recibieron, incluyendo aquellos que se recibieron en error. El ts_OutSegs es el número total de segmentos que se enviaron, incluyendo aquellos en las conexiones actuales pero que excluyen aquellos que contienen solamente octetos que se volvieron a transmitir. El ts_RetransSegs es el número total de segmentos que se volvieron a transmitir. El ts_InErrs es el número total de segmentos que se recibieron en error (por ejemplo, sumas de verificación de TCP malas) . El ts_OutRsts es el número de segmentos de TCP que se envian conteniendo la banderola RST . El ts_NumCons es el número total de conexiones de TCP que existen en ese momento.
Campo de Estructura Responsabilidad Cómo se rastrea el IPSNMInfo campo ipsi Forwarding pila de red anfitriona Hecho por pila solamente ipsi_DefaultTTL pila de red anfitriona Pila tiene info completa ipsi InReceives pila de red anfitriona y Por capa dispositivo periférico ipsi InHdrErrors pila de red anfitriona y Por capa dispositivo periférico ipsi InAddrErrors pila de red anfitriona Hecho por pila solamente ipsi Forwdatagrams pila de red anfitriona Hecho por pila solamente ipsi Unkno nProtos pila de red anfitriona Hecho por pila solamente ipsi InDiscards pila de red anfitriona y Por capa dispositivo periférico ipsi InDelivers pila de red anfitriona Por capa y dispositivo periférico ipsi OutRequests pila de red anfitriona y Por capa dispositivo periférico ipsi RoutingDiscards pila de red anfitriona Hecho por pila solamente ipsi OutDiscards pila de red anfitriona y Por capa dispositivo periférico ipsi OutNoRoutes pila de red anfitriona y Por capa dispositivo periférico ipsi ReasmTimeout pila de red anfitriona Pila tiene info completa ipsi ReasmReqds pila de red anfitriona y Por capa dispositivo periférico ipsi ReasmOKs pila de red anfitriona y Por capa dispositivo periférico ipsi ReasmFails pila de red anfitriona y Por capa dispositivo periférico ipsi FragOKs pila de red anfitriona Hecho por pila solamente ipsi_FragFails pila de red anfitriona Hecho por pila solamente ipsi FragCreates pila de red anfitriona Hecho por pila solamente ipsi Numlf pila de red anfitriona Hecho por pila solamente ipsi NumAddr pila de red anfitriona Hecho por pila solamente ipsi_NumRoutes pila de red anfitriona Hecho por pila solamente Tabla 2. División, do Estadísticas IPv4 MIB El ipsi_Forwarding es un valor que proporciona una indicación en cuanto a si el anfitrión está actuando como un encaminador de IP con respecto al envió de los datagramas que recibió, pero que no dirigió, el anfitrión. El ipsi_DefaultTTL es el valor por omisión que se inserta dentro del campo Tiempo-Para-Vivir del encabezado de IP de los datagramas que se originaron en esta entidad, siempre que un valor TTL no está suministrado por el protocolo de la capa de transporte. El ipsi^InReceives es el número total de datagramas de entrada que se reciben desde las interfases, incluyendo aquellos que se recibieron en error. El ipsi_InHdrErrors es el número de datagramas de entrada que se desechan debido a los errores en sus encabezados de IP, incluyendo sumas de verificación erróneas, desigualdad en el número de versión, otros errores de formato, tiempo-para-vivir excedido, errores que se descubrieron en el procesamiento de sus opciones de IP, etcétera. El ipsi_InAddrErrors es el número de datagramas de entrada que se desechan debido a que la dirección de IP en su campo de destino del encabezado de IP no fue una dirección válida para que la reciba el anfitrión. El ipsi_ForwDatagrams es el número de datagramas de entrada para los cuales el anfitrión no era su destino de IP final, como un resultado de lo cual se hizo un intento para encontrar una ruta para enviarlos a ese destino final. El ipsi_UnknownProtos es el número de datagramas dirigidos localmente que se recibieron de manera exitosa pero que se desecharon debido a un protocolo desconocido o sin soporte. El ipsi lnDiscards es el número de datagramas de IP de entrada para los cuales no se encontraron problemas para evitar su procesamiento continuo, pero los cuales se desecharon (por ejemplo, por falta de espacio de zona de memoria intermedia) . El ipsi_InDelivers es el número total de datagramas de entrada que se enviaron de manera exitosa a los protocolos del usuario de IP. El ipsi_OutRequests es el número total de datagramas de IP cuyos protocolos del usuario de IP (incluyendo el ICMP) suministraron al IP las solicitudes para la transmisión. El ipsi_RoutingDiscards es el número de entradas de encaminamiento que se seleccionaron para ser desechadas aún cuando éstas eran válidas. El ipsi_OutDiscards es el número de datagramas de IP de salida para las cuales no se encontraron problemas para evitar su transmisión a su destino, pero las cuales se desecharon (por ejemplo, por falta de espacio de zona de memoria intermedia) . El ipsi_OutNoRoutes es el número de datagramas de IP que se desechan debido a que no se pudo encontrar una ruta para transmitirlos a su destino. El ipsi_ReasmTimeout es el número máximo de segundos en los que se sostienen los fragmentos recibidos mientras que están esperando el reensamble en el anfitrión. El ipsi_ReasmReqds es el número de fragmentos de IP recibidos que necesitaron ser reensamblados en el anfitrión. El ipsi_ReasmOKs es el número de datagramas de IP que se volvieron a ensamblar de manera exitosa. El ipsi_ReasmFails es el número de fallas que detectó el algoritmo de reensamble de IP (por ejemplo, intervalos, errores, etcétera). El ipsi_FragOKs es el número de datagramas de IP que se han fragmentado de manera exitosa en el anfitrión. El ipsi_FragFails es el número de datagramas de IP que se han desechado debido a que necesitaban ser fragmentados en el anfitrión pero no se pudo hacer, por ejemplo, debido a que estaba establecida su banderola No Fragmentar. El ipsi_FragCreates es el número de fragmentos de datagramas de IP que se han generado como un resultado de la fragmentación en el anfitrión. El ipsi_NumIf es el número total de interfases utilizables. El ipsi_NumAddr es el número total de direcciones de IP únicas en el sistema. El ipsi_NumRoutes es el número total de rutas actualmente activas . La presente invención también proporciona un método para cargar una conexión de red descargada desde el dispositivo periférico hasta el anfitrión. Existen muchas razones por las que ocurre una carga. A modo de ejemplo, y sin limitación, más adelante se proporcionan algunas de las razones. La ruta pudo haber cambiado, requiriendo que se enviara el tráfico sobre una interfase diferente. El comportamiento del tráfico de la conexión puede cambiar de manera que ya no sea adecuado para la descarga. Por ejemplo, podría haber tráfico insuficiente, falta de actividad, o la conexión se está controlando por flujo por más tiempo que el establecido (por ejemplo, no se están recibiendo actualizaciones de ventana) . Adicionalmente, el dispositivo periférico pudiera no ser capaz de soportar una función particular, el comportamiento del tráfico pudiera no ser adecuado para la descarga si existen demasiados fragmentos de IP, demasiado tráfico fuera de servicio, uso de datos fuera de banda, demasiadas retransmisiones, se ha vencido un intervalo, una asociación de seguridad se hace inválida y no se renueva, o se están enviando demasiado datos al dispositivo periférico. Otras razones para cargar una conexión descargada se deben a asuntos de recursos. Por ejemplo, el dispositivo periférico pudiera carecer de los recursos para continuar procesando la (s) conexión (es ) . Otra conexión pudiera tener prioridad más elevada que la conexión que se descargó y la carga de una conexión cuando la disponibilidad de recursos del dispositivo periférico está por debajo de un umbral, pudiera facilitar que la conexión de prioridad más elevada continuara usando los recursos del dispositivo periférico. Los recursos del sistema pudieran haber cambiado de manera que el procesador anfitrión tenga recursos para manipular una conexión descargada. La chimenea pudiera requerir recursos diferentes a la descarga original (por ejemplo, cambio del filtro de seguridad, etcétera). El anfitrión puede determinar si los recursos del dispositivo periférico se está acercando a los niveles de umbral en donde una conexión de descarga se manipularía de manera más eficiente mediante la unidad de procesamiento anfitriona. Por ejemplo, los umbrales pudieran incluir tamaño de tráfico (número de bytes o paquetes), número de fragmentos, tamaño de ventana, y tipo de descarga. Volviendo ahora a la Figura 7, la carga se inicia ya sea mediante el dispositivo periférico 204 (por ejemplo, la NIC 170) o el conmutador 306 de TLI . La conexión se puede cargar por una variedad de razones. Las razones incluyen que la conexión se mueva a otro dispositivo periférico, que ocurra una desconexión de los medios, demasiados segmentos fuera de servicio, se están enviando demasiados datos al dispositivo periférico 204, la aplicación 20 no está colocando previamente zonas de memoria intermedia, demasiados fragmentos de IP, una conexión de ancho de banda bajo, y demasiadas retransmisiones. La Figura 7 muestra la carga que está iniciando el conmutador 306 de TLI (línea 700) . Note que si la NIC 170 inicia la carga, la línea 700 no estaría presente. Una vez que se inicia la carga, la NIC 170 completa todas las solicitudes sobresalientes con el estado apropiado y entrega el estado de la capa de transporte delegada a la capa del conmutador (línea 702) . La NIC 170 pudiera no completar una transmisión o llenar por completo una zona de memoria intermedia de recepción. La NIC 170 solo se asegura que todo el estado de transmisión y recepción esté sincronizado con el estado delegado que se entregó de regreso a la capa de transporte 300. El conmutador 306 de TLI pone en lista lineal cualesquier solicitudes de transmisión adicionales y deja de colocar zonas de memoria intermedia de recepción. El conmutador 306 de TLI le ordena a la capa de transporte que tome el control del estado de transporte delegado (línea 704) . La capa de transporte 300 deja de enviar cualesquier fragmentos que reciba a la NIC 170 y toma el control del estado delegado y envía un mensaje de terminación al conmutador 306 de TLI (línea 706) . Después de que el conmutador 306 de TLI recibe la confirmación de que la capa de transporte 300 ha tomado el control del estado de transporte delegado, el conmutador 306 de TLI confirma la carga a la NIC 170 (línea 708), lo cual habilita a la NIC 170 para que libere los recursos. La capa de transporte 300 también le informa a la capa de la red 302 de la conexión de descarga antes o después de que el mensaje de terminación se envíe al conmutador 306 de TLI (línea 710) . Se deberá notar que la capa de transporte 300 envía los paquetes de datos de entrada para la conexión descargada a la NIC 170 para procesamiento hasta que toma el control del estado delegado (línea 706) . Los paquetes de datos pueden llegar entre el momento en que la NIC 170 entrega el estado delegado al conmutador 306 de TLI y el momento en el que la capa de transporte 300 toma el control del estado delegado (linea 706). Una vez que la NIC 170 entrega el estado delegado al conmutador 306 de TLI, ya no puede procesar los paquetes de datos de entrada. Cuando la NIC 170 recibe un paquete de entrada para la conexión de carga, envía un mensaje de error a la capa de transporte 300 que indica una carga en progreso y puede desechar el paquete de entrada. El mensaje de error le informa a la capa de transporte 300 que deje de enviar datos de entrada. En una modalidad, la capa de transporte 300 pone en zona de memoria intermedia los datos adicionales, hasta que recibe el estado delegado. Se pueden descargar múltiples conexiones mediante las capas intermedias de software al dispositivo periférico. Se mantiene un contador de referencia por parte de la capa intermedia de software del número de conexiones que se descargaron desde la capa intermedia de software al dispositivo periférico. Si el conteo de referencia va hacia cero, se genera una solicitud de carga para la siguiente capa intermedia de software. Esto provocará que el siguiente conteo de referencia disminuya. La solicitud de carga continúa hacia abajo a la pila de la red 202 si el siguiente conteo de referencia de la capa va hacia cero. Esto proceso se repite ya sea hasta que un conteo de referencia de la capa intermedia de software no quede en cero o el dispositivo periférico reciba la solicitud de carga. La capa de la red 302 disminuye un conteo de referencia del número de objetos de estado descargados que se asocian con la NIC 170. Si el conteo de referencia va hacia cero, entonces ningún TCB está usando los recursos que se distribuyeron en la NIC 170 para la capa de la red 302. Cuando el conteo de referencia va hacia cero, la capa de la red 302 envia un mensaje a la NIC 170 para cargar el objeto de estado para la capa de la red 302 y envia las variables de estado de la red delegadas a la capa de la red 302 (linea 712) . La NIC 170 borra el estado y envia las variables de estado de la red delegadas y el siguiente valor IPID que la NIC 170 hubiera usado a la capa de la red 302 (linea 714) . La capa de la red 302 almacena esta información para usar como el valor inicial si se descarga una conexión nuevamente. La capa de la red 302 también envía un mensaje a la capa de ensamblaje 304 para provocar que la capa de ensamblaje 304 disminuya su conteo de referencia (línea 716) . La capa de ensamblaje 304 también mantiene un conteo de referencia y disminuye su conteo de referencia cuando se recibe el mensaje desde la capa de la red 302. Si el conteo de referencia en la capa de ensamblaje 304 va hacia cero, la capa de ensamblaje envía un mensaje a la NIC 170 para borrar el estado de la capa de ensamblaje (línea 718) . La NIC 170 borra las variables de estado en la NIC 170 y envía cualesquier variables de estado delegadas que tenga a la capa de ensamblaje (línea 720) . La capa de ensamblaje 304 envía un mensaje de terminación a la capa de la red 302 (línea 722) y la capa de la red 302 envía un mensaje de terminación a la capa de transporte (línea 724) . Se pudiera requerir una conexión TCP para usar una conexión segura que usa los protocolos de seguridad tal como IPSEC en cualquier momento de su tiempo de vida. Si una conexión es segura por IP y el dispositivo periférico 204 no puede manejar la seguridad, la conexión no se puede descargar. Cuando se descarga una conexión de IP segura, el estado de asociación de seguridad se divide en las variables CONST, CACHED, y DELEGATED y se manejan como se describió previamente. La unidad de procesamiento anfitriona 120 manipula los mensajes de control tal como la renegociación de claves. El dispositivo periférico 204 realiza todas las operaciones de datos IPSEC necesarias usando las variables de estado de asociación de seguridad. Volviendo ahora a la Figura 8, se ilustran los pasos de descargar una conexión segura. En la descripción que sigue, los pasos que se describieron previamente que se muestran en la Figura 4 siguen siendo los mismos y no se repetirán. Se usará una conexión IPSEC que opera en el modo de transporte para propósitos de ilustración. Una descarga de la capa IPSEC empieza cuando la capa de transporte 300 envia una solicitud de descarga a la capa IPSEC 800 con información de recurso de TCP agregada a la información de recursos del conmutador de TLI (linea 402') . La capa IPSEC 800 envia una solicitud de descarga a la capa de la red 302 con los requerimientos de recursos IPSEC agregados a la información de recursos de TCP y la información de recursos del conmutador de TLI (linea 802). Los requerimientos de recursos incluyen el número de asociaciones de seguridad que la capa IPSEC desea descargar. Si la NIC acepta la solicitud de descarga, distribuye los recursos para manejar las asociaciones de seguridad. La capa de la red 302 envia un mensaje de terminación que tiene una lista enlazada de los parámetros y la tabla de envió a la capa IPSEC, en lugar de a la capa de transporte 300 (linea 804). Cuando la capa IPSEC 800 recibe el mensaje de terminación, éste envía los estados de la capa IPSEC a la NIC 170 como parte de los descriptores entrantes y los descriptores salientes si el estado no se ha descargado previamente y transfiere la propiedad del estado delegado en la asociación de seguridad a la NIC 170 (línea 806) . Si el estado se ha descargado previamente, la capa IPSEC incrementa un conteo de referencia. Una vez que se ha transferido la propiedad, la NIC 170 desencripta y encripta todos los paquetes. La capa IPSEC 700 envía un mensaje de terminación que tiene la lista enlazada de parámetros y la tabla de envío a la capa de transporte (línea 414') . Las variables de estado CONST que se pasan a la NIC 170 desde la capa IPSEC 800, consisten de la información que se requiere para clasificar los paquees a una asociación de seguridad particular y la información específica para las asociaciones de seguridad entrantes y salientes. Las variables CONST incluyen el puerto de origen y de destino, el tipo de protocolo, y las variables de la asociación de seguridad . Las variables de estado CACHED comprenden factores para decidir el tiempo de vida de la asociación de seguridad y la información especifica para las asociaciones de seguridad entrantes y salientes. Las variables CACHED incluyen un limite suave (por ejemplo, un conteo de clave de repetición sobre los bytes) y un límite duro (por ejemplo, una detención en el conteo de bytes) que se basan en los bytes encriptados, un límite suave (por ejemplo, repetición de clave en un instante definido previamente) y un limite duro (por ejemplo, detención en un instante definido previamente) sobre el tiempo máximo en que se puede usar la asociación de seguridad, y un límite duro (por ejemplo, instantes inactivos máximos) sobre el tiempo inactivo máximo durante el cual se puede usar la asociación de seguridad. La NIC 170 se guía por los límites suave y duro. Cuando se alcanza un límite suave, la NIC 170 le informa a la unidad de procesamiento anfitriona 120. Cuando se alcanza un límite duro, la NIC 170 desecha la asociación de seguridad. Las variables DELEGATED comprenden la ejecución de la información y la información específica para las asociaciones de seguridad entrantes y salientes. Las variables DELEGATED incluyen un conteo de los bytes encriptados o desencriptados con la asociación de seguridad, el tiempo de vida de la asociación de seguridad, y el tiempo inactivo de la asociación de seguridad. Volviendo ahora a la Figura 9, se ilustra la carga de una conexión de red descargada con la IPSEC desde el dispositivo periférico. En la descripción que sigue, los pasos que se describieron previamente que se muestran en la Figura 7 siguen siendo los mismos y no se repetirán. La capa de transporte 300 le informa a la capa IPSEC 800 de la conexión de carga antes o después de que se envíe el mensaje de terminación a la capa de conmutador 306 (línea 710') . Se disminuye el conteo de referencia que se asocia con todas las asociaciones de seguridad. Si ningún conteo de referencia va hacia cero, la capa IPSEC 800 envía un mensaje de terminación a la capa de transporte 300 (línea 724 ') . Si la conexión que se está descargando es la última conexión que usa una asociación de seguridad específica, la capa IPSEC 800 envía un mensaje a la NIC 170 para cargar las variables de estado delegadas a la capa IPSEC 800 (línea 900) . La NIC 170 regresa las variables de estado delegadas a la capa IPSEC 800 (línea 902). La NIC 170 deja de usar la asociación de seguridad y envía los paquetes que pertenecen a la asociación de seguridad a la capa IPSEC 800 a través de la pila 202. La capa IPSEC 800 envía un mensaje de terminación a la NIC 170 y la NIC 170 libera los recursos que se distribuyeron para la asociación de seguridad (línea 904) . Si el conteo de referencia de la asociación de seguridad va hacia cero, la capa IPSEC 800 también envía un mensaje a la capa de la red 302 informándole a la capa de la red 302 del estado cargado (línea 906) . Después de que la capa de ensamblaje 304 envía un mensaje de terminación a la capa de la red302 (línea 722), la capa de la red 302 envía un mensaje de terminación a la capa IPSEC (línea 908) . La capa IPSEC 800 envía un mensaje de terminación a la capa de transporte (línea 724')- Cuando los estados para la capa de transporte 300, la capa de la red 302, la capa de ensamblaje 304, o la capa IPSEC 800 se están descargando, es posible que pudiera llegar una actualización (por ejemplo, actualización ARP o actualización RIP) . Si la actualización ocurre antes de que se reciba el mensaje de terminación, simplemente se actualiza el estado local y se establece una banderola para indicar que el estado ha cambiado si el objeto de estado se envió con la solicitud de descarga. Existe una posible carrera si la actualización ocurre mientras se está llamando la rutina de actualización de la NIC para actualizar los estados en memoria caché. Si entonces se actualiza un mensaje separado, provocando que se llame la rutina de actualización de la NIC, es posible que la NIC vea la segunda llamada primero, debido a asuntos de programación, y termine usando los datos obsoletos cuando llegue la actualización real. Si se usan datos obsoletos, se usará la entrada errónea hasta que llegue la siguiente actualización, lo que podría dar como resultado una gran cantidad de datos que se está enviando al lugar equivocado o que se están abandonando. Existen dos posibles soluciones para esta condición de carrera. La primera posible solución es hacer que el mensaje de terminación realice siempre la segunda actualización, lo cual podría resultar en problemas de recursión si está entrando un gran número de actualizaciones. La segunda posible solución es agregar un número de secuencia a la actualización para asegurarse de que siempre se use el número de secuencia más reciente. Otro modo de operación que la IPSEC soporta es hacer túneles, en donde los paquetes de datos se encapsulan en un paquete nuevo como parte de una conexión segura. Un túnel aparece como una interfase virtual para la pila de la red 202. Los pasos para descargar un túnel IPSEC son similares a los pasos para descargar la conexión IPSEC en el modo de transporte. En el modo de transporte, un encabezado IPSEC se coloca entre el encabezado de IP y el encabezado de TCP. En el modo de túnel, se usa el UDP para proporcionar un túnel. A fin de establecer un túnel, se envían un descriptor entrante y un descriptor saliente que describen las conexiones de seguridad que se negociaron al dispositivo periférico. Los descriptores contienen as variables de estado para la conexión y otra información que se requiere para establecer la conexión. Las variables de estado CACHED y DELEGATED para un túnel son las mismas que las variables de estado CACHED y DELEGATED del modo de transporte. Las variables de estado C0N3T para un túnel incluyen el puerto de origen y de destino, la dirección local, la dirección remota, el tipo de protocolo, y las variables de asociación de seguridad. Se ha descrito un método para descargar y cargar conexiones de pila de la red a un dispositivo periférico, que mantienen una sincronización apretada con la unidad de procesamiento anfitriona. El método se puede usar con muchos protocolos. Por ejemplo, los protocolos que se pueden usar incluyen TCP, SCTP, etcétera. En vista de las muchas posibles modalidades a las cuales se pueden aplicar los principios de esta invención, se debe reconocer que se pretende que la modalidad que se describió en la presente con respecto a las figuras de los dibujos sean solamente ilustrativas y no se deberán tomar como limitantes del alcance de la invención. Por ejemplo, aquellos de experiencia en la técnica reconocerán que los elementos de la modalidad ilustrada que se muestran en software se pueden implementar en hardware y viceversa o que la modalidad ilustrada se puede modificar en configuración y detalle sin apartarse del espíritu de la invención. Por lo tanto, la invención como se describe en la presente contempla todas esas modalidades como pudieran presentarse dentro del alcance de las siguientes reivindicaciones y equivalentes de las mismas.

Claims (41)

REIVINDICACIONES
1. Un método para cargar un objeto de estado de pila de red descargada a partir de una primera trayectoria que va desde un dispositivo periférico a una capa de conmutador a una segunda trayectoria que va desde el dispositivo periférico a través de una pluralidad de capas de software y la capa de conmutador, incluyendo la pluralidad de capas de software una capa intermedia, teniendo el objeto de estado de la pila de la red cuando menos un estado en memoria caché y cuando menos un estado delegado, el método que comprende los pasos de: ordenar a la capa intermedia que tome control de cuando menos un estado delegado después de que se haya recibido el cuando menos un estado delegado; y enviar los datos a través de la segunda trayectoria.
2. El método de la reivindicación 1, que comprende además el paso de iniciar una carga del objeto de estado de la pila de red descargada.
3. El método de la reivindicación 1, en donde la pluralidad de capas incluye una capa de la red, teniendo el dispositivo periférico un estado delegado de la red, el método que comprende además los pasos de: disminuir un conteo de un número de conexiones de transporte descargadas para el estado delegado de la red; y si el conteo se disminuye a cero: enviar un mensaje al dispositivo periférico para enviar el estado delegado de la red a la capa de la red.
4. El método de la reivindicación 1, en donde la pluralidad de capas incluye una capa de ensamblaje, teniendo el dispositivo periférico un estado delegado de ensamblaje, el método que comprende además los pasos de: disminuir un conteo de ensamblaje de un número de estados de la capa de red descargada para el estado delegado de ensamblaje; y si el conteo de ensamblaje se disminuye a cero: enviar un mensaje al dispositivo periférico para enviar el estado delegado de ensamblaje a la capa de ensamblaj e .
5. El método de la reivindicación 1, que comprende además el paso de determinar si se deberá iniciar la carga.
6. El método de la reivindicación 5, en donde el paso de determinar si se deberá iniciar la carga incluye cuando menos uno de: determinar si una cantidad de datos que se están enviando al dispositivo periférico está por arriba de un umbral máximo; determinar si el dispositivo periférico no puede procesar una función; determinar si una aplicación no está colocando previamente zonas de memoria intermedia; y determinar si la cantidad de datos que se están enviando al dispositivo periférico está por debajo de un ancho de banda mínimo.
7. Un medio legible por computadora que tienen instrucciones ejecutables por computadora para realizar los pasos de la reivindicación 1.
8. El medio legible por computadora de la reivindicación 7 que tiene instrucciones ejecutables por computadora adicionales para realizar el paso de determinar si se deberá iniciar la carga, el paso de determinar si se deberá iniciar la carga incluye cuando menos uno de: determinar si una cantidad de datos que se está enviando al dispositivo periférico está por arriba de un umbral máximo; determinar si el dispositivo periférico no puede procesar una función; determinar si una aplicación no está colocando previamente zonas de memoria intermedia; y determinar si la cantidad de datos que se están enviando al dispositivo periférico está por debajo de un ancho de banda mínimo.
9. El medio legible por computadora de la rei indicación 7, en donde la pluralidad de capas incluye una capa de la red y una capa de ensamblaje, teniendo el dispositivo periférico un estado delegado de la red y un estado delegado de ensambla e, teniendo el medio legible por computadora instrucciones ejecutables por computadora adicionales para realizar los pasos de: disminuir un conteo de un número de conexiones de transporte descargadas para el estado delegado de la red; y si el conteo se disminuye a cero: enviar un mensaje al dispositivo periférico para enviar el estado delegado de la red a la capa de la red; disminuir un conteo de ensamblaje de un número de estados de capa de la red descargada para el estado delegado de ensamblaje; y si el conteo de ensamblaje se disminuye a cero: enviar un mensaje al dispositivo periférico para enviar el estado delegado de ensamblaje a la capa de ensamblaj e .
10. Un método para cargar un objeto de estado de pila de red descargada y cuando menos un protocolo asociado desde una primera trayectoria que va desde un dispositivo periférico a una capa de conmutador a una segunda trayectoria que va desde el dispositivo periférico a través de una pluralidad de capas de software y la capa de conmutador, incluyendo la pluralidad de capas de software una capa intermedia, teniendo el objeto de estado de la pila de la red un estado en memoria caché y un estado delegado, el método que comprende los pasos de: completar las solicitudes sobresalientes con un estado de transferencia; entregar el estado delegado a la capa de conmutador; liberar los recursos en el dispositivo periférico para la capa intermedia; y enviar los datos a través de la segunda trayectoria.
11. El método de la reivindicación 10, que comprende además el paso de iniciar una carga del objeto de estado de la pila de red descargada y el cuando menos un protocolo asociado.
12. El método de la reivindicación 10, en donde la pluralidad de capas incluye una capa de la red, teniendo el dispositivo periférico un estado delegado de la red, el método que comprende además los pasos de: enviar el estado delegado de la red a la capa de la red si se han descargado todas las conexiones descargadas desde la capa de transporte.
13. El método de la reivindicación 10, en donde la pluralidad de capas incluye una capa de ensamblaje, teniendo el dispositivo periférico un estado delegado de ensamblaje, el método que comprende además los pasos de: enviar el estado delegado de ensamblaje a la capa de ensamblaje si se han cargado todas las conexiones descargadas de la capa de la red.
14. El método de la reivindicación 10, que comprende además el paso de determinar si se deberá iniciar la carga.
15. El método de la reivindicación 14, en donde el paso de determinar si se deberá iniciar la carga incluye cuando menos uno de : determinar si una cantidad de datos que se está enviando desde la capa de conmutador hacia el dispositivo periférico está por arriba de un umbral máximo; determinar si hay una falta de actividad en la conexión de pila de la red descargada; determinar si el dispositivo periférico no puede procesar una función; determinar si el comportamiento de la conexión no es adecuado para la descarga; determinar si una carga facilitará que los objetos de estado de prioridad más elevada usen los recursos del dispositivo periférico si la disponibilidad de recursos del dispositivo periférico está por debajo de un umbral; determinar si una aplicación no está colocando previamente zonas de memoria intermedia; y determinar si la cantidad de datos que se están enviando al dispositivo periférico está por arriba de un ancho de banda máximo.
16. Un medio legible por computadora que tiene instrucciones ejecutables por computadora, para realizar los pasos de la reivindicación 10.
17. El medio legible por computadora de la reivindicación 16 que tiene instrucciones ejecutables por computadora adicionales para realizar el paso que comprende determinar si se deberá iniciar la carga, incluyendo el paso de determinar si se deberá iniciar la carga cuando menos uno de : determinar si una cantidad de datos que se está enviando desde la capa de conmutador hacia el dispositivo periférico está por arriba de un umbral máximo; determinar si hay una falta de actividad en la conexión de pila de la red descargada; determinar si el dispositivo periférico no puede procesar una función; determinar si el comportamiento de la conexión no es adecuado para la descarga; determinar si una carga facilitará que los objetos de estado de prioridad más elevada usen los recursos del dispositivo periférico si la disponibilidad de recursos del dispositivo periférico está por debajo de un umbral; determinar si una aplicación no está colocando previamente zonas de memoria intermedia; y determinar si la cantidad de datos que se están enviando al dispositivo periférico está por arriba de un ancho de banda máximo.
18. Un método para sincronizar un objeto de estado de la pila de red descargada entre un anfitrión y un dispositivo periférico en un anfitrión que tiene una pluralidad de capas de software, teniendo cada capa de software cuando menos una variable de estado, el método que comprende los pasos de: para cada capa de software en la pluralidad de capas de software: clasificar la cuando menos una variable de estado para que sea una de una variable constante, una variable en memoria caché, y una variable delegada; enviar la cuando menos una variable de estado al dispositivo periférico; y si la cuando menos una variable de estado se ha clasificado como una variable en memoria caché: procesar la variable en memoria caché mediante el anfitrión; y actualizar la variable en memoria caché en el dispositivo periférico si ha cambiado la variable en memoria caché .
19. El método de la reivindicación 18, en donde una de la pluralidad de capas de software es una capa de transporte y en donde la cuando menos una variable de estado se clasifica como una variable constante, la cuando menos una variable de estado que incluye cuando menos un puerto de destino, un puerto de origen, un factor de escala de ventana, y un identificador de descarga.
20. El método de la reivindicación 18, en donde una de la pluralidad de capas de software es una capa de la red y en donde la cuando menos una variable de estado se clasifica como una variable constante, incluyendo la cuando menos una variable de estado una de una dirección de IP de destino y una dirección de IP de origen.
21. El método de la rei indicación 18, en donde una de la pluralidad de capas de software es una capa de TCP y en donde la cuando menos una variable de estado se clasifica como una variable en memoria caché, incluyendo la cuando menos una variable de estado una de una variable de TCP y una variable de IP.
22. El método de la reivindicación 18, en donde una de la pluralidad de capas de software es una capa de la red y en donde la cuando menos una variable de estado se clasifica como una variable en memoria caché, incluyendo la cuando menos una variable de estado un identificador de descarga .
23. El método de la reivindicación 18, en donde una de la pluralidad de capas de software es una capa de ensamblaje y en donde la cuando menos una variable de estado se clasifica como una variable en memoria caché, incluyendo la cuando menos una variable de estado una dirección de ARP.
24. El método de la reivindicación 18, en donde una de la pluralidad de capas de software es una capa de seguridad de IP y en donde la variable constante incluye cuando menos uno de un puerto de origen, un puerto de destino, un tipo de protocolo, y variables de asociación de seguridad .
25. El método de la reivindicación 18, en donde una de la pluralidad de capas de software es una capa de seguridad de IP y en donde la variable en memoria caché incluye cuando menos uno de un conteo de clave de repetición sobre byte, una detención sobre el conteo de bytes, una clave de repetición en un instante definido previamente, una detención en un instante definido previamente, y un tiempo inactivo máximo para el cual se puede usar una asociación de seguridad .
26. El método de la reivindicación 18, que comprende además : si la cuando menos una variable de estado se ha clasificado como una variable delegada: procesar la cuando menos una variable de estado mediante el dispositivo periférico; y actualizar la cuando menos una variable de estado si ha cambiado la variable delegada.
27. El método de la reivindicación 26, en donde una de la pluralidad de capas de software es una capa de TCP y en donde la cuando menos una variable de estado se clasifica como una variable delegada, incluyendo la cuando menos una variable de estado uno de un estado TCP actual, un tamaño de ventana de recepción, un número de secuencia para el siguiente RECV, una ventana de envió máxima, una ventana de congestión actual, un número de secuencia máximo enviado, y un número de secuencia para un siguiente SEND.
28. El método de la reivindicación 26, en donde una de la pluralidad de capas de software es una capa de la red y en donde la cuando menos una variable de estado se clasifica como una variable delegada, incluyendo la cuando menos una variable de estado un valor de inicio de id del paquete IP.
29. El método de la reivindicación 26, en donde una de la pluralidad de capas de software es una capa de seguridad de IP y en donde la variable delegada incluye cuando menos uno de un conteo de bytes encriptados o desencriptados con una asociación de seguridad, un tiempo de vida de la asociación de seguridad, y un tiempo inactivo de la asociación de seguridad.
30. Un medio legible por computadora que tiene instrucciones ejecutables por computadora para realizar los pasos de la reivindicación 18.
31. El medio legible por computadora de la reivindicación 30 que tiene instrucciones ejecutables por computadora adicionales, para realizar los pasos que comprenden : procesar cada variable delegada mediante el dispositivo periférico; y para cada variable en memoria caché: actualizar la variable en memoria caché si ha cambiado la variable en memoria caché.
32. Un método para conservar los recursos en un dispositivo periférico que está procesando cuando menos un estado descargado y un protocolo asociado para una pluralidad de capas intermedias de software, teniendo el cuando menos un estado descargado un objeto de estado, el método que comprende los pasos de: almacenar un objeto de estado inicial para un primer estado descargado; recibir un identificador de descarga inicial para el objeto de estado inicial a partir del dispositivo periférico; entregar el identificador de descarga inicial al dispositivo periférico sobre una descarga subsecuente si el objeto de estado es el objeto de estado inicial; y recibir un identificador de descarga nuevo en la descarga subsecuente si el objeto de estado es un objeto de estado nuevo.
33. El método de la reivindicación 32, en donde el objeto de estado inicial incluye un objeto de estado de transporte inicial, el identificador de descarga inicial incluye un identificador de descarga de transporte inicial, y el identificador de descarga nuevo incluye un identificador de descarga de transporte nuevo, y en donde los pasos para entregar el identificador de descarga inicial al dispositivo periférico sobre una descarga subsecuente si el objeto de estado es un objeto de estado nuevo, incluye los pasos de: entregar el identificador de descarga de transporte inicial al dispositivo periférico sobre una descarga subsecuente si el objeto de estado de transporte es el objeto de estado de transporte inicial; y recibir un identificador de descarga de transporte nuevo sobre la descarga subsecuente si el objeto de estado de transporte es un objeto de estado de transporte nuevo.
34. El método de la rei indicación 32, en donde el objeto de estado inicial incluye un objeto de estado de red inicial, el identificador de descarga inicial incluye un identi ficador de descarga de capa de la red inicial, y el identificador de descarga nuevo incluye un identificador de descarga de capa de la red nuevo, y en donde los pasos para entregar el identificador de descarga inicial al dispositivo periférico sobre una descarga subsecuente si el objeto de estado es el objeto de estado inicial y recibir una descarga de estado nueva sobre la descarga subsecuente si el objeto de estado es un objeto de estado nuevo, incluye los pasos de: entregar el identificador de descarga de la capa de la red inicial al dispositivo periférico sobre una descarga subsecuente si el objeto de estado de la red es el objeto de estado de la red inicial; y recibir un identificador de descarga de la capa de la red nuevo sobre la descarga subsecuente si el objeto de estado de la red es un objeto de estado de la red nuevo,
35. El método de la reivindicación 32, en donde el objeto de estado inicial incluye un objeto de estado de ensamblaje inicial, el identificador de descarga inicial incluye un identificador de descarga de la capa de ensamblaje inicial, y el identificador de descarga nuevo incluye un identificador de descarga de la capa de ensamblaje nuevo, y en donde los pasos para entregar el identificador de descarga inicial al dispositivo periférico sobre una descarga subsecuente si el objeto de estado es el objeto de estado inicial y recibir un identificador de descarga nuevo sobre la descarga subsecuente si el objeto de estado es un objeto de estado nuevo, incluye los pasos de: entregar el identificador de descarga de la capa de ensamblaje inicial al dispositivo periférico sobre una descarga subsecuente si el objeto de estado de ensamblaje es el objeto de estado de ensamblaje inicial; y recibir un identificador de descarga de la capa de ensamblaje nuevo sobre la descarga subsecuente si el objeto de estado de ensamblaje es un objeto de estado de ensamblaje nuevo .
36. El método de la reivindicación 32, en donde el cuando menos un estado descargado incluye un objeto de estado de transporte, un objeto de estado de la capa de la red, y un objeto de estado de la capa de ensamblaje, y en donde : el paso de almacenar el objeto de estado inicial para el primer estado descargado comprende almacenar un objeto de estado de transporte inicial, un objeto de estado de la capa de la red, y un objeto de estado de la capa de ensamblaje inicial para una primera conexión descargada; el paso de recibir el identificador de descarga inicial para la entrada del estado inicial desde el dispositivo periférico comprende recibir un identificador de descarga del estado de transporte inicial para el objeto de estado de transporte inicial, un identificador de descarga de la capa de la red inicial para el objeto de estado de la capa de red inicial, y un identificador de descarga de la capa de ensamblaje inicial para el objeto de estado de la capa de ensamblaje inicial para la primera conexión descargada; el paso de entregar el identificador de descarga inicial al dispositivo periférico sobre una descarga subsecuente si la entrada del estado no ha cambiado desde el estado inicial comprende: entregar el identificador de descarga de estado de transporte inicial al dispositivo periférico sobre una descarga subsecuente si el objeto de estado de transporte es el objeto de estado de transporte inicial; entregar el identificador de descarga de la capa de la red inicial al dispositivo periférico sobre la descarga subsecuente si el objeto de estado de la capa de la red es el objeto de estado de la capa de la red inicial; y entregar el identificador de descarga de la capa de ensamblaje inicial al dispositivo periférico sobre la descarga subsecuente si el objeto de estado de la capa de ensamblaje no ha cambiado desde el objeto de estado de la capa de ensamblaje inicial; y el paso de recibir el identi ficador de descarga nuevo sobre la descarga subsecuente si la entrada del estado ha cambiado desde el estado inicial después de que el dispositivo periférico ha distribuido los recursos para la entrada del estado comprende: recibir un identi ficador de descarga de estado de transporte nuevo sobre la descarga subsecuente si el objeto de estado de transporte es un objeto de estado de transporte nuevo ; recibir un identificador de descarga de capa de la red nuevo sobre la descarga subsecuente si el objeto de estado de la capa de la red es un objeto de estado de la capa de la red nuevo; y recibir un identificador de descarga de capa de ensamblaje nuevo sobre la descarga subsecuente si el objeto de estado de la capa de ensamblaje es un objeto de estado de la capa de ensamblaje nuevo.
37. Un medio legible por computadora para realizar los pasos de la reivindicación 32.
38. El medio legible por computadora de la reivindicación 37, en donde el cuando menos un estado de descarga incluye cuando menos uno de un objeto de estado de transporte, un objeto de estado de la capa de la red, y un objeto de estado de la capa de ensamblaje, y en donde: el paso de almacenar el objeto de estado inicial para el primer estado descargado, comprende almacenar cuando menos uno de un objeto de estado de transporte inicial, un objeto de estado de la capa de la red inicial, y un objeto de estado de la capa de ensamblaje inicial para una primera conexión descargada; el paso de recibir el identificador de descarga inicial para la entrada de estado inicial desde el dispositivo periférico, comprende recibir cuando menos uno de un identificador de descarga de estado de transporte inicial para el objeto de estado de transporte inicial, un identificador de descarga de capa de la red inicial para el objeto de estado de la capa de la red inicial, y un identificador de descarga de la capa de ensamblaje inicial para el objeto de estado de la capa de ensamblaje inicial para la primera conexión descargada; el paso de entregar el identificador de descarga inicial al dispositivo periférico sobre una descarga subsecuente si la entrada del estado no ha cambiado desde el estado inicial, comprende entregar cuando menos uno del identificador de descarga de estado de transporte inicial al dispositivo periférico sobre una descarga subsecuente si el objeto de estado de transporte es el objeto de estado de transporte inicial, el identificador de descarga de la capa de la red inicial al dispositivo periférico sobre la descarga subsecuente si el objeto de estado de la capa de la red es el objeto de estado de la capa de la red inicial, y el identificador de descarga de la capa de ensamblaje inicial al dispositivo periférico sobre la descarga subsecuente si el objeto de estado de la capa de ensamblaje no ha cambiado desde el objeto de estado de la capa de ensamblaje inicial; y el paso de recibir el identificador de descarga nuevo sobre la descarga subsecuente si la entrada de estado ha cambiado desde el estado inicial después de que el dispositivo periférico ha distribuido los recursos para la entrada del estado, comprende recibir cuando menos uno de un identificador de descarga de estado de transporte nuevo sobre la descarga subsecuente si el objeto de estado de transporte es un objeto de estado de transporte nuevo, un identi ficador de descarga de la capa de la red nuevo sobre la descarga subsecuente si el objeto de estado de la capa de la red es un objeto de estado de la capa de la red nuevo, un identificador de descarga de la capa de ensamblaje sobre la descarga subsecuente si el objeto de estado de la capa de ensamblaje es un objeto de estado de la capa de ensamblaje nuevo.
39. Un método para obtener estadísticas para una pila de la red que tiene cuando menos una capa intermedia de software y cuando menos un objeto de estado de la red descargado a un dispositivo periférico, teniendo el objeto de estado de la red cuando menos una de una variable de estado constante, una variable de estado en memoria caché, y una variable de estado delegada, la pila de la red que se controla mediante un anfitrión y el objeto de estado de la red descargado que se procesa mediante el dispositivo periférico, el método que comprende los pasos de: para cada capa intermedia de software: obtener estadísticas del anfitrión para las estadísticas que mantiene el anfitrión; obtener estadísticas del dispositivo periférico para las estadísticas que mantiene el dispositivo periférico; obtener estadísticas del anfitrión y el dispositivo periférico para las estadísticas que mantienen el anfitrión y el dispositivo periférico; y combinar las estadísticas que mantiene el dispositivo periférico y las estadísticas que mantienen e anfitrión y e dispositivo periférico con las estadísticas que mantiene el anfitrión .
40. El método de la reivindicación 39, en donde las estadísticas son estadísticas base de información de administración del protocolo de control de transporte y en donde las estadísticas que mantiene el anfitrión incluyen cuando menos una de una estadística ts_RtoAlgorithm, una estadística ts_rtomin, una estadística ts_ toMax, una estadística ts_RtoMaxConn, una estadística ts ActiveOpens, una estadística ts_PassiveOpens , una estadística ts_Attempt Fails, una estadística ts_EstabResets , y una estadística ts_numcons .
41. El método de la reivindicación 39, en donde las estadísticas son estadísticas base de información de administración del protocolo de control de transporte y en donde las estadísticas que mantiene el anfitrión incluyen cuando menos una de una estadística ipsi_Forwarding, una estadística ipsi_DefaultTTL, una estadística ipsi^InAddr Errors, una estadística ipsi_ForwDatagramas , una estadística ipsi_UnknownProtos, una estadística ipsi_RoutingDiscards , una estadística ipsi_ReasmTimeout , una estadística ipsi_FagOKs, una estadística ipsi_FragFaiis , una estadística ipsi__Frag Creates, una estadística ipsi_NumIf, una estadística ipsi_Num Addr, y una estadística ipsi_NumRoutes . 43. El método de la reivindicación 39, en donde las estadísticas son estadísticas de información de administración de versión cuatro del protocolo de la internet y en donde las estadísticas que mantienen el anfitrión y el dispositivo periférico incluyen cuando menos una de una estadística ipsi_InReceives , una estadística ipsi_InHdr Errors, una estadística ipsi_InDiscards , una estadística ips i_InDelivers , una estadística ipsi_OutRequests , una estadística ipsi_OutDiscards , una estadística ipsi OutNo Routes, una estadística ipsi_ReamsReqds , una estadística ipsi_ReasmOKs , y una estadística ipsi^ReasmFails . 44. Un medio legible por computadora para realizar los pasos de la reivindicación 39.
MXPA03003787A 2002-04-30 2003-04-29 Metodo para sincronizar y cargar una conexion de pila de red descargada con una pila de la red. MXPA03003787A (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/135,630 US7181531B2 (en) 2002-04-30 2002-04-30 Method to synchronize and upload an offloaded network stack connection with a network stack

Publications (1)

Publication Number Publication Date
MXPA03003787A true MXPA03003787A (es) 2005-08-26

Family

ID=29249503

Family Applications (1)

Application Number Title Priority Date Filing Date
MXPA03003787A MXPA03003787A (es) 2002-04-30 2003-04-29 Metodo para sincronizar y cargar una conexion de pila de red descargada con una pila de la red.

Country Status (12)

Country Link
US (2) US7181531B2 (es)
EP (1) EP1361512B1 (es)
JP (2) JP4638658B2 (es)
KR (1) KR100938519B1 (es)
CN (1) CN100552626C (es)
AT (1) ATE396453T1 (es)
AU (1) AU2003203727B2 (es)
BR (1) BR0301035A (es)
CA (1) CA2425706C (es)
DE (1) DE60321082D1 (es)
MX (1) MXPA03003787A (es)
RU (1) RU2336652C2 (es)

Families Citing this family (103)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5978379A (en) 1997-01-23 1999-11-02 Gadzoox Networks, Inc. Fiber channel learning bridge, learning half bridge, and protocol
US8621101B1 (en) 2000-09-29 2013-12-31 Alacritech, Inc. Intelligent network storage interface device
US6226680B1 (en) 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US8539112B2 (en) 1997-10-14 2013-09-17 Alacritech, Inc. TCP/IP offload device
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US6757746B2 (en) * 1997-10-14 2004-06-29 Alacritech, Inc. Obtaining a destination address so that a network interface device can write network data without headers directly into host memory
US6697868B2 (en) * 2000-02-28 2004-02-24 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US8782199B2 (en) * 1997-10-14 2014-07-15 A-Tech Llc Parsing a packet header
US6904519B2 (en) * 1998-06-12 2005-06-07 Microsoft Corporation Method and computer program product for offloading processing tasks from software to hardware
US7430171B2 (en) 1998-11-19 2008-09-30 Broadcom Corporation Fibre channel arbitrated loop bufferless switch circuitry to increase bandwidth without significant increase in cost
US8019901B2 (en) 2000-09-29 2011-09-13 Alacritech, Inc. Intelligent network storage interface system
US7447795B2 (en) 2001-04-11 2008-11-04 Chelsio Communications, Inc. Multi-purpose switching network interface controller
US8218555B2 (en) 2001-04-24 2012-07-10 Nvidia Corporation Gigabit ethernet adapter
US7212534B2 (en) 2001-07-23 2007-05-01 Broadcom Corporation Flow based congestion control
US7295555B2 (en) 2002-03-08 2007-11-13 Broadcom Corporation System and method for identifying upper layer protocol message boundaries
US7543087B2 (en) * 2002-04-22 2009-06-02 Alacritech, Inc. Freeing transmit memory on a network interface device prior to receiving an acknowledgement that transmit data has been received by a remote device
US7007103B2 (en) * 2002-04-30 2006-02-28 Microsoft Corporation Method to offload a network stack
US7558873B1 (en) * 2002-05-08 2009-07-07 Nvidia Corporation Method for compressed large send
US7437548B1 (en) 2002-07-11 2008-10-14 Nvidia Corporation Network level protocol negotiation and operation
US7934021B2 (en) 2002-08-29 2011-04-26 Broadcom Corporation System and method for network interfacing
US7346701B2 (en) 2002-08-30 2008-03-18 Broadcom Corporation System and method for TCP offload
US7313623B2 (en) 2002-08-30 2007-12-25 Broadcom Corporation System and method for TCP/IP offload independent of bandwidth delay product
EP1554842A4 (en) 2002-08-30 2010-01-27 Corporation Broadcom SYSTEM AND METHOD FOR TREATING FRAMES OUTSIDE THE ORDER
US8180928B2 (en) 2002-08-30 2012-05-15 Broadcom Corporation Method and system for supporting read operations with CRC for iSCSI and iSCSI chimney
US7058797B2 (en) * 2002-09-10 2006-06-06 Veritas Operating Corporation Use of off-motherboard resources in a computer system
US7177790B2 (en) * 2002-11-13 2007-02-13 Hewlett-Packard Development Company, L.P. Method and apparatus for providing virtual devices
US7596634B2 (en) * 2002-12-12 2009-09-29 Millind Mittal Networked application request servicing offloaded from host
US7680944B1 (en) * 2003-02-28 2010-03-16 Comtrol Corporation Rapid transport service in a network to peripheral device servers
US7370082B2 (en) * 2003-05-09 2008-05-06 Microsoft Corporation Remote invalidation of pre-shared RDMA key
US7412488B2 (en) * 2003-06-05 2008-08-12 Nvidia Corporation Setting up a delegated TCP connection for hardware-optimized processing
US7913294B1 (en) 2003-06-24 2011-03-22 Nvidia Corporation Network protocol processing for filtering packets
US7526577B2 (en) * 2003-09-19 2009-04-28 Microsoft Corporation Multiple offload of network state objects with support for failover events
US8285881B2 (en) * 2003-09-10 2012-10-09 Broadcom Corporation System and method for load balancing and fail over
US7689702B1 (en) * 2003-10-31 2010-03-30 Sun Microsystems, Inc. Methods and apparatus for coordinating processing of network connections between two network protocol stacks
US6996070B2 (en) * 2003-12-05 2006-02-07 Alacritech, Inc. TCP/IP offload device with reduced sequential processing
US8549170B2 (en) 2003-12-19 2013-10-01 Nvidia Corporation Retransmission system and method for a transport offload engine
US7636372B2 (en) * 2003-12-19 2009-12-22 Broadcom Corporation Method and system for providing smart offload and upload
US7349999B2 (en) * 2003-12-29 2008-03-25 Intel Corporation Method, system, and program for managing data read operations on network controller with offloading functions
US8359349B2 (en) * 2004-03-18 2013-01-22 Nokia Corporation System and associated terminal, method and computer program product for uploading content
US20050246443A1 (en) * 2004-03-31 2005-11-03 Intel Corporation Management of offload operations in a network storage driver
US7783769B2 (en) * 2004-03-31 2010-08-24 Intel Corporation Accelerated TCP (Transport Control Protocol) stack processing
KR100587560B1 (ko) * 2004-05-07 2006-06-08 삼성전자주식회사 링크 로컬 주소를 가지는 시스템에서 외부 시스템과통신하는 방법 및 장치
US7831745B1 (en) 2004-05-25 2010-11-09 Chelsio Communications, Inc. Scalable direct memory access using validation of host and scatter gather engine (SGE) generation indications
US20050281262A1 (en) * 2004-06-17 2005-12-22 Zur Uri E Method and system for supporting read operations for iSCSI and iSCSI chimney
US7493427B2 (en) * 2004-07-14 2009-02-17 International Business Machines Corporation Apparatus and method for supporting received data processing in an offload of network protocol processing
US7930422B2 (en) * 2004-07-14 2011-04-19 International Business Machines Corporation Apparatus and method for supporting memory management in an offload of network protocol processing
US7533176B2 (en) * 2004-07-14 2009-05-12 International Business Machines Corporation Method for supporting connection establishment in an offload of network protocol processing
US7386566B2 (en) * 2004-07-15 2008-06-10 Microsoft Corporation External metadata processing
US7165118B2 (en) * 2004-08-15 2007-01-16 Microsoft Corporation Layered message processing model
US8248939B1 (en) 2004-10-08 2012-08-21 Alacritech, Inc. Transferring control of TCP connections between hierarchy of processing mechanisms
US7783880B2 (en) * 2004-11-12 2010-08-24 Microsoft Corporation Method and apparatus for secure internet protocol (IPSEC) offloading with integrated host protocol stack management
US7730196B2 (en) * 2004-12-03 2010-06-01 Microsoft Corporation Efficient transfer of messages using reliable messaging protocols for web services
US20060153215A1 (en) * 2004-12-20 2006-07-13 Linden Cornett Connection context prefetch
US8219622B2 (en) * 2005-02-09 2012-07-10 Verizon Business Global Llc Systems and methods for providing extended peering
US7568056B2 (en) * 2005-03-28 2009-07-28 Nvidia Corporation Host bus adapter that interfaces with host computer bus to multiple types of storage devices
US7475167B2 (en) * 2005-04-15 2009-01-06 Intel Corporation Offloading data path functions
US7516252B2 (en) * 2005-06-08 2009-04-07 Intel Corporation Port binding scheme to create virtual host bus adapter in a virtualized multi-operating system platform environment
US7724658B1 (en) 2005-08-31 2010-05-25 Chelsio Communications, Inc. Protocol offload transmit traffic management
US7715436B1 (en) 2005-11-18 2010-05-11 Chelsio Communications, Inc. Method for UDP transmit protocol offload processing with traffic management
US7660306B1 (en) 2006-01-12 2010-02-09 Chelsio Communications, Inc. Virtualizing the operation of intelligent network interface circuitry
US7616563B1 (en) 2005-08-31 2009-11-10 Chelsio Communications, Inc. Method to implement an L4-L7 switch using split connections and an offloading NIC
US7660264B1 (en) 2005-12-19 2010-02-09 Chelsio Communications, Inc. Method for traffic schedulign in intelligent network interface circuitry
US7760733B1 (en) 2005-10-13 2010-07-20 Chelsio Communications, Inc. Filtering ingress packets in network interface circuitry
JP4872412B2 (ja) * 2006-03-31 2012-02-08 日本電気株式会社 情報検知処理方法及び装置
US7895646B2 (en) * 2006-05-25 2011-02-22 International Business Machines Corporation IKE daemon self-adjusting negotiation throttle
US8112803B1 (en) * 2006-12-22 2012-02-07 Symantec Corporation IPv6 malicious code blocking system and method
US8935406B1 (en) 2007-04-16 2015-01-13 Chelsio Communications, Inc. Network adaptor configured for connection establishment offload
US20080263171A1 (en) * 2007-04-19 2008-10-23 Alacritech, Inc. Peripheral device that DMAS the same data to different locations in a computer
US7826350B1 (en) 2007-05-11 2010-11-02 Chelsio Communications, Inc. Intelligent network adaptor with adaptive direct data placement scheme
US8060644B1 (en) 2007-05-11 2011-11-15 Chelsio Communications, Inc. Intelligent network adaptor with end-to-end flow control
US8589587B1 (en) 2007-05-11 2013-11-19 Chelsio Communications, Inc. Protocol offload in intelligent network adaptor, including application level signalling
US7831720B1 (en) 2007-05-17 2010-11-09 Chelsio Communications, Inc. Full offload of stateful connections, with partial connection offload
US20090019160A1 (en) * 2007-07-12 2009-01-15 International Business Machines Corporation Method and system for workload management utilizing tcp/ip and operating system data
US8539513B1 (en) 2008-04-01 2013-09-17 Alacritech, Inc. Accelerating data transfer in a virtual computer system with tightly coupled TCP connections
US8341286B1 (en) 2008-07-31 2012-12-25 Alacritech, Inc. TCP offload send optimization
PL2312807T3 (pl) * 2008-08-04 2019-04-30 Zte Corp Sposób i system umożliwiający transmisję danych mediów strumieniowych bez kopiowania
US20100058082A1 (en) * 2008-08-27 2010-03-04 Lenovo (Singapore) Ple., Ltd. Maintaining network link during suspend state
US9306793B1 (en) 2008-10-22 2016-04-05 Alacritech, Inc. TCP offload device that batches session layer headers to reduce interrupts as well as CPU copies
US8572251B2 (en) * 2008-11-26 2013-10-29 Microsoft Corporation Hardware acceleration for remote desktop protocol
WO2011152593A1 (en) * 2010-05-31 2011-12-08 Hyo-Hwan Bae Data upload method using shortcut
KR101145385B1 (ko) 2010-05-31 2012-05-15 (주)이앤비소프트 단축 명령을 통한 데이터 업로드 방법
US8582581B2 (en) * 2010-09-28 2013-11-12 Cooper Technologies Company Dual-port ethernet traffic management for protocol conversion
CN102148748B (zh) * 2010-10-26 2014-05-21 华为技术有限公司 伪线路由扩散方法、系统和汇聚节点设备
CN102571912B (zh) * 2010-12-08 2014-09-10 中国科学院声学研究所 一种实现基于多核处理器和混合操作系统的卸载协议栈的方法
US8868710B2 (en) * 2011-11-18 2014-10-21 Amazon Technologies, Inc. Virtual network interface objects
US9581675B2 (en) * 2012-08-24 2017-02-28 Tektronix, Inc. Virtual model adapter removal and substitution technique for cascaded networks
US9191209B2 (en) * 2013-06-25 2015-11-17 Google Inc. Efficient communication for devices of a home network
US10063407B1 (en) 2016-02-08 2018-08-28 Barefoot Networks, Inc. Identifying and marking failed egress links in data plane
US10313231B1 (en) * 2016-02-08 2019-06-04 Barefoot Networks, Inc. Resilient hashing for forwarding packets
WO2017213654A1 (en) * 2016-06-09 2017-12-14 Intel Corporation Offloading processing from user equipment to network
US20180152393A1 (en) * 2016-11-28 2018-05-31 Microsoft Technology Licensing, Llc Application resource usage reduction
US20180150256A1 (en) * 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10404619B1 (en) 2017-03-05 2019-09-03 Barefoot Networks, Inc. Link aggregation group failover for multicast
US10237206B1 (en) 2017-03-05 2019-03-19 Barefoot Networks, Inc. Equal cost multiple path group failover for multicast
CN110460544B (zh) 2018-05-08 2021-09-07 华为技术有限公司 一种堆叠中交换机的标识分配方法、光缆及相关设备
US11032367B2 (en) 2018-07-16 2021-06-08 Microsoft Technology Licensing, Llc Long upload time detection and management
KR102151987B1 (ko) * 2018-11-23 2020-09-04 한국과학기술원 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버
CN110113407B (zh) * 2019-04-30 2021-08-17 上海连尚网络科技有限公司 小程序状态同步方法、设备和计算机存储介质
CN113748648A (zh) 2019-05-23 2021-12-03 慧与发展有限责任合伙企业 权重路由
US11855834B2 (en) * 2020-06-02 2023-12-26 Apple Inc. Traffic sink interface
US11368361B2 (en) 2020-06-05 2022-06-21 Microsoft Technology Licensing, Llc Tamper-resistant service management for enterprise systems
WO2022051985A1 (en) * 2020-09-10 2022-03-17 Qualcomm Incorporated Managing a communication link for transfer control protocol communications
RU208657U1 (ru) * 2021-04-23 2021-12-29 Российская Федерация, от имени которой выступает ФОНД ПЕРСПЕКТИВНЫХ ИССЛЕДОВАНИЙ Модель бортового вычислителя авиационного средства поражения

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5727142A (en) * 1996-05-03 1998-03-10 International Business Machines Corporation Method for a non-disruptive host connection switch after detection of an error condition or during a host outage or failure
US6094712A (en) 1996-12-04 2000-07-25 Giganet, Inc. Computer network interface for direct mapping of data transferred between applications on different host computers from virtual addresses to physical memory addresses application data
KR19980063990A (ko) * 1996-12-11 1998-10-07 윌리엄비.켐플러 로컬 다지점 분배 서비스 시스템 내에서 전송 자원을 할당 및할당해제하는 방법
US6226680B1 (en) 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US6389479B1 (en) * 1997-10-14 2002-05-14 Alacritech, Inc. Intelligent network interface device and system for accelerated communication
US7133940B2 (en) 1997-10-14 2006-11-07 Alacritech, Inc. Network interface device employing a DMA command queue
US6591302B2 (en) * 1997-10-14 2003-07-08 Alacritech, Inc. Fast-path apparatus for receiving data corresponding to a TCP connection
US6757746B2 (en) 1997-10-14 2004-06-29 Alacritech, Inc. Obtaining a destination address so that a network interface device can write network data without headers directly into host memory
US6697868B2 (en) * 2000-02-28 2004-02-24 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US6427171B1 (en) * 1997-10-14 2002-07-30 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US5937169A (en) * 1997-10-29 1999-08-10 3Com Corporation Offload of TCP segmentation to a smart adapter
US6765901B1 (en) * 1998-06-11 2004-07-20 Nvidia Corporation TCP/IP/PPP modem
US6904519B2 (en) 1998-06-12 2005-06-07 Microsoft Corporation Method and computer program product for offloading processing tasks from software to hardware
US6141705A (en) 1998-06-12 2000-10-31 Microsoft Corporation System for querying a peripheral device to determine its processing capabilities and then offloading specific processing tasks from a host to the peripheral device when needed
JP2001230812A (ja) * 2000-02-14 2001-08-24 Hitachi Ltd 通信開始処理をオフロードするネットワーク接続装置およびそれを用いた方法
CN1276372C (zh) 2000-09-29 2006-09-20 艾拉克瑞技术公司 智能网络存储接口系统和装置
US7007103B2 (en) * 2002-04-30 2006-02-28 Microsoft Corporation Method to offload a network stack

Also Published As

Publication number Publication date
ATE396453T1 (de) 2008-06-15
AU2003203727B2 (en) 2009-04-23
AU2003203727A1 (en) 2003-11-13
US7171489B2 (en) 2007-01-30
US20030204631A1 (en) 2003-10-30
US20050182854A1 (en) 2005-08-18
JP4638658B2 (ja) 2011-02-23
EP1361512A3 (en) 2005-11-30
DE60321082D1 (de) 2008-07-03
US7181531B2 (en) 2007-02-20
CN100552626C (zh) 2009-10-21
CA2425706C (en) 2010-02-16
EP1361512A2 (en) 2003-11-12
CA2425706A1 (en) 2003-10-30
AU2003203727A8 (en) 2003-11-13
CN1458590A (zh) 2003-11-26
JP2011018373A (ja) 2011-01-27
BR0301035A (pt) 2004-08-17
EP1361512B1 (en) 2008-05-21
RU2336652C2 (ru) 2008-10-20
JP2004030612A (ja) 2004-01-29
KR100938519B1 (ko) 2010-01-25
KR20030085484A (ko) 2003-11-05

Similar Documents

Publication Publication Date Title
MXPA03003787A (es) Metodo para sincronizar y cargar una conexion de pila de red descargada con una pila de la red.
US7254637B2 (en) Method to offload a network stack
US10652147B2 (en) Packet coalescing
US11570098B2 (en) Systems, apparatuses and methods for cooperating routers
US7526577B2 (en) Multiple offload of network state objects with support for failover events
JP5025941B2 (ja) 統合ホストプロトコルスタック管理を使用するセキュアなインターネットプロトコル(ipsec)オフロードのための方法および装置
US20030225889A1 (en) Method and system for layering an infinite request/reply data stream on finite, unidirectional, time-limited transports
JP4658546B2 (ja) フェイルオーバーイベントをサポートするネットワーク状態オブジェクトの多重オフロード
EP3539235B1 (en) Systems, apparatuses and methods for cooperating routers
US20230171191A1 (en) Systems, Apparatuses and Methods for Cooperating Routers

Legal Events

Date Code Title Description
FG Grant or registration