KR100938519B1 - 네트워크 스택으로 오프로딩된 네트워크 스택 연결을 동기화 및 업로딩하는 방법, 공유 방법, 제어 방법, 및 컴퓨터 판독가능 매체 - Google Patents

네트워크 스택으로 오프로딩된 네트워크 스택 연결을 동기화 및 업로딩하는 방법, 공유 방법, 제어 방법, 및 컴퓨터 판독가능 매체 Download PDF

Info

Publication number
KR100938519B1
KR100938519B1 KR1020030026310A KR20030026310A KR100938519B1 KR 100938519 B1 KR100938519 B1 KR 100938519B1 KR 1020030026310 A KR1020030026310 A KR 1020030026310A KR 20030026310 A KR20030026310 A KR 20030026310A KR 100938519 B1 KR100938519 B1 KR 100938519B1
Authority
KR
South Korea
Prior art keywords
state
layer
peripheral device
variable
state variable
Prior art date
Application number
KR1020030026310A
Other languages
English (en)
Other versions
KR20030085484A (ko
Inventor
핀커톤제임스
그바데게신아보라데
카니야산자이
스리니바스엔케이
Original Assignee
마이크로소프트 코포레이션
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 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20030085484A publication Critical patent/KR20030085484A/ko
Application granted granted Critical
Publication of KR100938519B1 publication Critical patent/KR100938519B1/ko

Links

Images

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
    • 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
    • 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

Abstract

호스트 네트워크 스택과 주변 장치 사이의 오프로딩된 네트워크 스택 연결을 동기화 및 업로딩하는 방법이 제공된다. 스택 내의 각각의 계층에 대한 상태 객체가 상수, 호스트에 의해 핸들링되는 캐시 변수, 또는 장치에 의해 핸들링되는 위임 변수로 분류되는 상태 변수들을 포함하는 장치로 전송된다. 네트워크 스택 및 주변 장치에 의해 업데이트되어야 하는 상태가 명확하게 분할된다. 예를 들어, 호스트, 장치, 또는 호스트 및 장치에 의해 통계가 트래킹된다. 호스트와 주변 장치 모두에 의해 트래킹되는 통계는 비중첩 부분들로 분할되거나 통계를 생성하도록 조합된다. 업로드가 시작되면, 장치는 일정한 상태를 달성하며 위임 상태를 스택에 전달한다. 스택 내의 각각의 계층은 그 위임 상태의 제어를 획득하며 장치에서의 자원들은 프리(free)로 된다.
Figure R1020030026310
컴퓨터, 자원, 업데이트, TCP, UDP, 오프로드

Description

네트워크 스택으로 오프로딩된 네트워크 스택 연결을 동기화 및 업로딩하는 방법, 공유 방법, 제어 방법, 및 컴퓨터 판독가능 매체{METHOD TO SYNCHRONIZE AND UPLOAD AN OFFLOADED NETWORK STACK CONNECTION WITH A NETWORK STACK}
도 1은 본 발명이 존재하는 예시적인 컴퓨터 시스템을 일반적으로 도시한 블럭도.
도 2는 본 발명의 네트워크 스택 및 바이패스 경로의 기능적인 계층들을 도시한 블럭도.
도 3은 본 발명의 NDIS 경로 및 바이패스 경로(bypass path)의 기능적인 계층들을 도시한 블럭도.
도 4는 본 발명의 오프로드 메카니즘을 도시한 사다리도.
도 5a-5c는 본 발명의 반전된 트리를 도시한 도면.
도 6은 호스트 컴퓨터와 주변 장치 사이의 동기화를 도시한 블럭도.
도 7은 본 발명의 업로드 메카니즘을 도시한 사다리도.
도 8은 본 발명의 교시에 따른 보안 프로토콜 스택 연결의 오프로드 메카니즘을 도시한 사다리도.
도 9는 본 발명의 교시에 따른 오프로드된 보안 프로토콜 스택 연결의 업로드 메카니즘을 도시한 사다리도.
<도면의 주요 부분에 대한 부호의 설명>
110: 컴퓨터
120: 프로세싱 유닛
130: 시스템 메모리
140: 비이동성 메모리 인터페이스
150: 이동성 메모리 인터페이스
160: 사용자 입력 인터페이스
170: 네트워크 인터페이스
180: 리모트 컴퓨터
190: 비디오 인터페이스
본 발명은 일반적으로 컴퓨터 시스템의 효율, 속도, 및/또는 처리량(throughput)을 증가시키기 위한 것이며, 특히 특정한 하드웨어 컴포넌트로 오프로딩(offloading)된, 전형적으로 호스트 프로세서에 의해 수행되는 컴퓨팅 태스크(computing tasks)를 동기화 및 업로딩하기 위한 방법에 관한 것이다.
운영 체제, 어플리케이션 소프트웨어, 네트워킹, 네트워킹된 통신 등의 복잡성 및 정교함이 현저하게 증가하고 있다. 이러한 복잡성 및 정교함으로 인한 한가지 결과는 어플리케이션 및 시스템의 기능을 증가시킨 것이다. 이러한 증가된 기 능은 대개 증가된 시스템 및 어플리케이션 기능들을 실행하도록 CPU에 의해 수행되어야 하는 추가적인 의무로 인해 CPU 오버헤드(overhead)를 증가시킨다.
CPU 오버헤드 증가가 명백한 분야중 하나는, 높은 대역폭 매체의 성장으로 인해 네트워크 속도가 증가하는 네트워킹 어플리케이션 분야이다. 네트워크 속도는 대개 호스트 컴퓨터의 CPU 프로세서 속도 및 메모리 대역폭 능력과 일치하거나 더 초과한다. 이러한 네트워킹 어플리케이션은 7계층 ISO 모델 또는 윈도우 운영 체제에 의해 사용되는 계층화된 모델과 같은 대부분의 운영 체제들에 사용되는 계층화 구조로 인해 호스트 프로세서에 더 부담을 준다. 공지된 바와 같이, 이러한 모델은 네트워크에 대한 물리적인 연결과 엔드유저 어플리케이션(end-user application) 사이에서의 데이터의 흐름을 기술하는데 사용된다. 데이터 비트들을 네트워크 케이블로 향하게 하는 것과 같은 대부분의 기본적인 기능들은 하위 계층들에서 수행되며, 어플리케이션들의 세부사항을 수행하는 기능들은 상위 계층들에서 이루어진다. 본질적으로, 각각의 계층의 목적은 다음 상위 계층에 대한 서비스들을 제공하여, 실제로 어떻게 서비스들이 구현되는지에 대한 세부사항으로부터 그 상위 계층을 보호한다. 이러한 계층들은 각각의 계층이 다른 컴퓨터 상의 동일 층과 통신하는 것을 신뢰하는 방식으로 요약된다.
계층들 사이에서 진행함에 따라 데이터 패킷 상에 수행되는 다양한 기능들은 소프트웨어 집약적이며, 대개 실질적인 량의 CPU 프로세서 및 메모리 자원들을 필요로 한다. 예를 들어, 다양한 계층들에서의 패킷 상에 수행되는 임의의 기능들은 패킷 체크섬(packet checksum) 연산 및 확인, 데이터의 암호화(encryption) 및 복호화(decryption)(예컨대, SSL 암호화 및 IP 보안 암호화), 메시지 다이제스트 연산(message digest calculation), TCP 세그멘테이션(segmentation), TCP 재전송(retransmission) 및 인식(ACK) 처리, 서비스 거부 공격으로부터 보호하는 패킷 필터링, 및 유저 데이터그램 프로토콜(UDP) 패킷 프레그멘테이션(fragmentation)과 같이 극히 CPU 집약적인 것이다. 이러한 기능들 각각이 수행됨에 따라, CPU에 대한 최종적인 요구는 전체 컴퓨터 시스템의 처리량 및 성능에 상당히 영향을 미칠 수 있다.
CPU 자원에 대한 요구가 커지고 있지만, 네트워크 인터페이스 카드(NIC)들과 같은 컴퓨터 하드웨어 주변 장치들의 능력 및 처리량이 또한 증가하고 있다. 이러한 주변 장치들은 대개 이들이 없었다면 CPU에 의해 수행되었을 다수의 태스크들 및 기능들을 수행할 수 있는 전용 프로세서 및 메모리가 장착된다.
컴퓨터 산업은 이미 CPU에 의해 수행되었던 CPU 집약적인 태스크들 및 기능들을 오프로드(offload)시키는 능력 및 개발 방법을 인식하였다. 예를 들어, 애난드(Anand) 등에게 허여되고 공동으로 양도된 미국특허 제6,141,705호와, 2000년 9월 7일자로 출원된 특허출원 제09/657,510호 "소프트웨어로부터 하드웨어로 처리 태스크를 오프로딩하는 방법 및 컴퓨터 프로그램 제품" 및 2000년 11월 29일자로 출원된 제09/726,082호 "소프트웨어로부터 하드웨어로 처리 태스크를 오프로딩하는 방법 및 컴퓨터 프로그램 제품"은 집약적인 태스크들 및 기능들을 수행할 수 있는 주변 장치들에 조회 주변 장치들(query peripheral devices) 및 오프로드 특수 프로세서 태스크들에 대한 해결책들을 제공한다. 이 전형적으로 오프로드된 특수 태스크들을 TCP(전송 제어 프로토콜) 및/또는 IP(인터넷 프로토콜) 체크섬 계산, 대량 전송 오프로드(LSO : large send offload)와 같은 TCP 세그멘테이션, 및 보안 인터넷 프로토콜(IPSEC) 암호화 및 복호화와 같은 태스크들을 포함한다.
오프로드 메카니즘은 이 메카니즘이 네트워크 스택에 최소 횟수의 변화가 이루어져야 한다는 두 번째 요건을 갖는다는 면에서 제한된다. 이러한 두 번째 요건의 결과로서, 전체 네트워크 스택이, 주변 장치에 도달하도록 디스에이블(disable)되는 오프로딩된 태스크들 및 기능들로 횡단되기 때문에 오프로드가 긴 코드 경로를 갖는다는 다른 제한사항이 있다. 추가 제한사항은 네트워크 스택과의 통합성 부족이다. 주변 장치상에 파라미터들을 질의 또는 설정하는 네트워크 스택에 대한 잘 정의된 인터페이스 또는 네트워크 스택에 능력의 임의의 통보 또는 변화를 통지하는 주변 장치에 대해 잘 정의된 인터페이스는 존재하지 않는다. 예를 들어, LSO 요청이 처리될 때 경로가 변하면, 폴백 메카니즘(fallback mechanism)은 스택이 타임아웃을 기다려서 LSO 요청을 재전송하는 것이다.
주변 장치 제조자들이 시도하는 다른 접근법은 코어 스택으로부터 네트워크 인터페이스 카드(NIC)로의 전체 TCP 연결을 오프로드하는 것이다. 이러한 접근법은 주변 인터페이스를 사용함으로써 전체 프로토콜 스택을 바이패스(bypass)시키며 모든 TCP 메시지들, IP (인터넷 프로토콜) 메시지들, ICMP (인터넷 제어 메시지 프로토콜) 메시지들, DNS (도메인 네임 서버) 메시지들, 및 RIP 메시지들을 주변 장치가 다루도록 요구하여, NIC가 모든 것을 처리할 필요가 있다. 또한, 이러한 접근법은 멀티-홈드 환경(multi-homed environments)을 처리할 수 없으며 호스트 운영 체제 네트워크 관리 유틸리티들과 정확하게 통합되지 않는다. 상태가 변화하면, 오프로딩된 연결이 쉽게 끊어질 수 있다.
본 발명은 TCP 기반 프로토콜 스택과 같은 네트워크 스택 연결을 오프로딩하는 방법을 제공한다. 통상 주변 장치에 대해 다수의 소프트웨어 계층들을 갖는 NDIS (네트워크 드라이버 인터페이스 명세)를 통해 전송되는 데이터는 스위치 계층으로부터 주변 장치로의 경로로 오프로딩된다. 네트워크 스택 및 프로세싱 유닛과의 타이트한 동기화가 유지된다. 스택을 오프로딩하는 요청이 NDIS 경로를 통해 주변 장치로 전송된다. 이 요청은 주변 장치가 자원들을 할당하는데 요구되는 정보를 갖도록 자원 요구 리스트를 포함한다. NDIS 경로 내의 각각의 계층은 그 자원 요구를 리스트에 추가한다. 주변 장치가 요청을 수용하면, 주변 장치는 자원들을 할당하고 오프로드 핸들(offload handle)을 각각의 소프트웨어 계층들에 전송하여 소프트웨어 계층들이 주변 장치들과 통신할 수 있게 된다.
오프로드의 주변 장치의 수용이 소프트웨어 계층에 전달되면 각각의 소프트웨어 계층에 대한 상태가 주변 장치에 전송된다. 다르게는, 오프로드 요청과 함께 상태가 전송되며 상태 변화만이 주변 장치에 전송된다. 각각의 상태는 상태 변수들을 가지며 각각의 상태 변수는 고정 변수, 캐시 변수, 또는 위임 변수로서 분류된다. 고정 변수는 프로토콜 스택이 오프로드되는 시간 동안에 변화하지 않는다. 캐시 변수는 CPU에 의해 취급되며 위임 변수는 주변 장치에 의해 취급된다.
본 발명은 또한 주변 장치로부터 호스트로의 오프로딩된 네트워크 연결을 업로드하는 방법을 제공한다. 이 업로드는 주변 장치 또는 스위치 계층에 의해 시작된다. 업로드가 시작되면, 주변 장치는 모든 미해결 요청들을 완료하고 위임 상태를 스위치 계층에 전달한다. 위임 상태가 호스트에 의해 수용된 후에, 주변 장치에서의 상태 자원들은 프리(free)로 된다.
오프로드 또는 업로드 전송 동안에, 업데이트(예를 들어, ARP 업데이트 또는 RIP 업데이트)가 이루어진다. 주변 장치가 실효 데이터를 사용하지 않도록 다수의 업데이트 메시지들이 주변 장치에 의해 수신되는 경우 가장 최근의 업데이트 메시지가 사용되도록 보장하는데 시퀀스 넘버가 사용된다.
본 발명의 추가적인 특징 및 장점들은 첨부 도면을 참조한 다음의 상세한 설명으로부터 명백해질 것이다.
첨부된 특허청구범위는 본 발명의 특징을 정의하며, 본 발명의 목적 및 장점들은 첨부 도면과 함께 다음의 상세한 설명으로부터 보다 잘 이해될 것이다.
동일한 참조번호는 동일한 구성 요소를 칭하는 도면을 참조하여, 본 발명에 적합한 컴퓨팅 환경에서 구현된 바로서 설명된다. 요구되지는 않지만, 본 발명은 개인용 컴퓨터에 의해 실행되는 프로그램 모듈들과 같은 컴퓨터-실행가능한 명령들의 일반적인 컨텍스트(context)로 기술될 것이다. 일반적으로, 프로그램 모듈은 특정한 태스크를 수행하거나 특정한 요약 데이터 타입을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등을 포함한다. 더욱이, 당업자라면, 본 발명이 핸드핼드 장치, 다중 프로세서 시스템, 마이크로프로세서 기반 또는 프로그래밍 가능한 고객 전자장치, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 네트워킹된 주변 장치(예를 들어, 네트워킹된 프린터) 등을 포함하는 다른 컴퓨터 시스템 구성으로도 구현될 수 있다는 것을 인식할 것이다. 또한, 본 발명은 태스크가 통신 네트워크를 통해 링크된 원격 처리 장치들에 의해 수행되는 분산 컴퓨팅 환경에서 구현될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈들은 로컬 및 리모트 메모리 스토리지 장치들에 위치할 수 있다.
도 1은 본 발명이 구현될 수 있는 적절한 컴퓨팅 환경(100)의 예를 도시하고 있다. 컴퓨팅 시스템 환경(100)은 단지 적절한 컴퓨팅 환경의 일례이지 본 발명의 사용 또는 기능의 범위에 대한 임의의 제한사항을 제안하려는 의도는 아니다. 컴퓨팅 환경(100)이 예시적인 운영 환경(100)에서 설명되는 임의의 한 컴포넌트 또는 컴포넌트들의 조합에 관련하여 임의의 종속성 또는 요건을 갖는 것으로 해석되어서는 안된다.
본 발명은 수많은 다른 일반 목적 또는 특수 목적 컴퓨팅 시스템 환경 또는 구성에서 동작될 수 있다. 본 발명에 사용하는데 적합할 수 있는 널리 공지된 컴퓨팅 시스템, 환경, 및/또는 구성의 예는 개인용 컴퓨터, 서버 컴퓨터, 핸드핼드 또는 랩탑 디바이스, 멀티프로세서 시스템, 마이크로프로세서 기반 시스템, 셋탑박스, 프로그래밍 가능한 고객 전자장치, 네트워크 PC, 마이크로컴퓨터, 메인프레임 컴퓨터, 네트워킹된 주변 장치(예를 들어, 네트워킹된 프린터), 상기 시스템 또는 장치 중 임의의 것들을 포함하는 분산 컴퓨팅 환경을 포함하며, 이들로서 제한되지는 않는다.
본 발명은 컴퓨터에 의해 실행되는 프로그램 모듈들과 같이 컴퓨터 실행가능 한 명령들의 일반적인 컨텍스트로 기술될 것이다. 일반적으로, 프로그램 모듈은 특정한 태스크를 수행하거나 특정한 요약 데이터 타입을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조를 포함한다. 또한, 본 발명은 태스크가 통신 네트워크를 통해 링크된 원격 처리 장치들에 의해 수행되는 분산 컴퓨팅 환경에서 구현될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈들은 로컬 및 리모트 메모리 스토리지 장치들에 위치할 수 있다.
도 1을 참조하면, 본 발명을 구현하기 위한 예시적인 시스템은 컴퓨터(110)의 형태인 일반 목적 컴퓨팅 장치를 포함한다. 컴퓨터(110)의 구성요소들은 프로세싱 유닛(120), 시스템 메모리(130), 및 시스템 메모리를 포함하는 다양한 시스템 구성요소를 프로세싱 유닛(120)에 결합시키는 시스템 버스(121)를 포함할 수 있으며, 이들로서 제한되는 것은 아니다. 시스템 버스(121)는 메모리 버스 또는 메모리 제어기를 포함하는 여러 형태의 버스 구조들 중 임의의 구조, 주변기기 버스, 크로스바(cross-bar), 스위칭 버스 패브릭(switched bus fabric), 및 다양한 버스 구조중 임의의 구조를 사용하는 로컬 버스일 수 있다. 또한, 시스템 버스(121)는 버스들의 계층일 수 있다. 예로서, 이러한 구조는 인더스트리 표준 아키텍쳐(ISA) 버스, 마이크로 채널 아키텍쳐(MCA) 버스, 인핸스드 ISA(EISA) 버스, 비디오 일렉트로닉스 스탠다드 어소시에이트(VESA) 로컬 버스, 노 캐시 넌유니폼 메모리 억세스(NC-NUMA) 아키텍쳐 버스, 캐시 코히어런트 넌유니폼 메모리 억세스(CC-NUMA) 아키텍쳐 버스, 및 메자닌 버스(Mezzanine bus)로서도 알려진 페리퍼럴 컴포넌트 인터커넥트(PCI) 버스를 포함하며, 이들로서 제한되지는 않는다.
컴퓨터(110)는 전형적으로 다양한 컴퓨터 판독가능 매체를 포함한다. 컴퓨터 판독가능 매체는 컴퓨터(110)에 의해 억세스될 수 있는 임의의 이용가능한 매체일 수 있으며 휘발성 및 불휘발성 매체, 이동성 및 비이동성 매체를 모두를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 스토리지 매체 및 통신 매체를 포함할 수 있으며, 이로서 제한되는 것은 아니다. 컴퓨터 스토리지 매체는 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 불휘발성, 이동성 및 비이동성 매체 모두를 포함한다. 컴퓨터 스토리지 매체는 RAM, ROM, EEPROM, 플래시 메모리, 또는 다른 메모리 기술, CD-ROM, 디지털 다기능 디스크(DVD), 또는 다른 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 다른 자기 저장 장치 또는 원하는 데이터를 저장하는데 사용될 수 있으며 컴퓨터(110)에 의해 억세스될 수 있는 임의의 다른 매체를 포함하며, 이들로서 제한되지는 않는다. 통신 매체는 전형적으로 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 또는 반송파와 같은 피변조 데이터 신호 또는 다른 전송 메카니즘 내의 다른 데이터로 구체화되며 임의의 정보 전달 매체를 포함한다. 용어 "피변조 데이터 신호"는 하나 이상의 그 특성 세트를 갖거나 신호 내에 정보를 엔코딩하는 방식으로 변화된 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크, 직접 유선 연결과 같은 유선 매체, 및 음파, RF, 적외선 및 다른 무선 매체와 같은 무선 매체를 포함하며, 이로서 제한되는 것은 아니다. 이들의 임의의 조합이 컴퓨터 판독가능 매체의 범위내에서 또한 포함될 수 있다.
시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 억세스 메모리(RAM)(132)와 같은 휘발성 및/또는 불휘발성 메모리의 형태인 컴퓨터 스토리지 매체를 포함한다. 스타트업 동안과 같이 컴퓨터(110) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입출력 시스템(133)(BIOS)이 전형적으로 ROM(131)에 저장된다. RAM(132)은 전형적으로 프로세싱 유닛(120)에 의해 즉시 억세스 가능 및/또는 즉시 동작되는 데이터 및/또는 프로그램 모듈들을 포함한다. 예로서, 도 1은 운영 체제(134), 어플리케이션 프로그램(135), 다른 프로그램 모듈(136), 및 프로그램 데이터(137)를 도시하고 있으며, 이들로서 제한되는 것은 아니다.
또한, 컴퓨터(110)는 다른 이동성/비이동성, 휘발성/불휘발성 컴퓨터 저장 매체를 포함할 수 있다. 예로서, 도 1은 비이동성, 불휘발성 자기 매체에 판독 또는 기입하는 하드 디스크 드라이브(141), 이동성, 불휘발성 자기 디스크(152)에 판독 또는 기입하는 자기 디스크 드라이브(151), 및 이동성, CD ROM 또는 다른 광 매체와 같은 이동성, 불휘발성 광 디스크(156)에 판독 또는 기입하는 광 디스크 드라이브(155)를 도시하고 있다. 예시적인 운영 환경에서 사용될 수 있는 다른 이동성/비이동성, 휘발성/불휘발성 컴퓨터 스토리지 매체는 자기 테이프 카세트, 플래시 메모리 카드, 디지털 다기능 디스크, 디지털 비디오 테이프, 고체 RAM, 고체 ROM 등을 포함하며, 이들로서 제한되는 것은 아니다. 하드 디스크 드라이브(141)는 전형적으로 인터페이스(140)와 같은 비이동성 메모리 인터페이스를 통해 시스템 버스(121)에 연결되며, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 전형적으로 인터페이스(150)와 같은 이동성 메모리 인터페이스에 의해 시스템 버스(121)에 연결된다.
위에서 논의되고 도 1에 도시된 드라이브 및 그 관련 컴퓨터 스토리지 매체는 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈, 및 컴퓨터(110)를 위한 다른 데이터의 저장을 제공한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 어플리케이션 프로그램(145), 다른 프로그램 모듈(146), 및 프로그램 데이터(147)를 저장하는 것으로 도시되어 있다. 이러한 구성요소들은 운영 체제(134), 어플리케이션 프로그램(135), 다른 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일할 수도 다를 수도 있다. 운영 체제(144), 어플리케이션 프로그램(145), 다른 프로그램 모듈(146), 및 프로그램 데이터(147)는 상이한 번호가 부여되었으며 최소한 이들이 상이한 카피들임을 나타낸다.
사용자는 키보드(162), 및 일반적으로 마우스, 트랙볼, 또는 터치 패드로 불리는 포인팅 장치(161)와 같은 입력 장치들을 통해 명령 및 정보를 컴퓨터(110)에 입력할 수 있다. 다른 입력 장치들(도시생략)은 마이크로폰, 조이스틱, 게임 패드, 위성 접시, 스캐너, 비디오 입력 등을 포함할 수 있다. 이들 및 다른 입력 장치들은 대개 시스템 버스에 연결된 사용자 입력 인터페이스(160)를 통해 프로세싱 유닛(120)에 접속되지만, 병렬 포트, 게임 포트, 또는 범용 직렬 버스(USB)와 같은 다른 인터페이스 미 버스 구조에 의해 접속될 수도 있다. 모니터(191) 또는 다른 형태의 디스플레이 장치가 또한 비디오 인터페이스(190)와 같은 인터페이스를 통해 시스템 버스(121)에 접속된다. 모니터에 추가하여, 컴퓨터들은 또한 출력 주변기 기 인터페이스(195)를 통해 접속될 수 있는 스피커(197), 프린터(196), 및 비디오 출력과 같은 다른 주변기기 출력 장치들을 포함할 수 있다.
컴퓨터(110)는 리모트 컴퓨터(180)와 같은 하나 이상의 리모트 컴퓨터들에 대한 논리적인 연결들을 사용하여 네트워킹된 환경에서 동작할 수 있다. 리모트 컴퓨터(180)는 다른 개인용 컴퓨터, 서버, 라우터, 네트워크 주변 장치(예를 들어, 프린터), 네트워크 PC, 피어 장치(peer device) 또는 다른 공통 네트워크 노드일 수 있으며, 단지 메모리 스토리지 장치(181)만이 도 1에 도시되어 있지만, 전형적으로 개인용 컴퓨터(110)와 관련하여 상기 기술된 다수의 또는 모든 구성요소들을 포함할 수 있다. 도 1에 도시된 논리적인 연결은 근거리 통신망(LAN)(171) 및 원거리 통신망(WAN)(173)을 포함하지만, 또한 다른 네트워크들을 포함할 수 있다. 이러한 네트워킹 환경들은 사무실, 엔터프라이즈-와이드 컴퓨터 네트워크, 인트라넷, 및 인터넷이다.
LAN 네트워킹 환경에서 사용될 때, 개인용 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(예를 들어, 네트워크 인터페이스 카드 : NIC)(170)를 통해 LAN(171)에 연결된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 전형적으로 모뎀(172) 또는 인터넷과 같이 WAN(173)을 통해 통신을 구축하기 위한 다른 수단을 포함한다. 내부 또는 외부에 존재할 수 있는 모뎀(172)은 사용자 입력 인터페이스(160), 또는 다른 적절한 메카니즘을 통해 시스템 버스(121)에 연결될 수 있다. 네트워킹 환경에서, 개인용 컴퓨터(110) 또는 그 일부분들에 관련하여 도시된 프로그램 모듈들이 리모트 메모리 스토리지 장치 내에 저장될 수 있다. 예로서, 도 1은 메모리 장치(181) 상에 존재하는 리모트 어플리케이션 프로그램들(185)을 도시하고 있다. 도시된 네트워크 연결들은 예시적인 것이며 컴퓨터들 사이에 통신 링크를 구축하는 다른 수단이 사용될 수 있음이 인식될 것이다.
다음의 기술에서, 본 발명은 달리 표시되지 않으면 하나 이상의 컴퓨터에 의해 수행되는 동작의 작용 및 상징적인 표현을 참조로 기술될 것이다. 이로서, 컴퓨터 실행 시간의 작용 및 동작은 구조화된 형태의 데이터를 나타내는 전기 신호들의 컴퓨터의 프로세싱 유닛에 의한 조작을 포함한다는 것이 이해될 것이다. 이러한 조작은 데이터 변환하거나 재구성 또는 그렇지 않으면 당업자에게 널리 알려진 방식으로 컴퓨터의 동작을 변경하는 컴퓨터의 메모리 시스템 내의 위치에 유지한다. 데이터가 유지되는 곳의 데이터 구조는 데이터의 포맷에 의해 정의되는 특정 특성들을 갖는 메모리의 물리적인 위치들이다. 그러나, 본 발명이 전술한 컨텍스트로 기술되지만, 당업자라면, 이후에 기술되는 다양한 작용 및 동작이 하드웨어로도 구현될 수 있다는 것을 인식할 것이다.
도 2는 본 발명의 네트워킹 모델 및 컴포넌트들을 구성하는 몇몇의 구성 요소들의 상호관계를 도시하고 있다. 통상적인 동작 동안에, 네트워킹 메시지들은 네트워크 스택(202)을 통해 메시지들이 네트워크 상의 다른 장치들 및 어플리케이션들로 전송되고 다른 장치들 및 어플리케이션들로부터 수신되는 주변 장치(204)로 어플리케이션(200)에 의해 전송된다. 네트워크 스택(202)은 하나 이상의 중간 소프트웨어 계층들(206)을 포함한다. 어플리케이션(200)으로부터 전송된 데이터는 데이터 패키징, 신뢰성있는 데이터 전송, 메시지 다이제스트의 데이터 암호화 및 연산과 같은 특정한 동작이 데이터 상에 수행될 수 있는 중간 소프트웨어 계층(들)(206)을 통해 이동한다.
스위치(208)는 중간 소프트웨어 계층(들)(206)을 위한 네트워크 스택 동작의 수행으로부터 프로세싱 유닛(120)을 오프로딩시키는데 사용된다. 스위치(208)가 분리되어 도시되어 있지만, 스위치(208)는 네트워크 스택(202)의 상부 중간 계층으로 통합될 수 있음에 유의하여야 한다. 데이터는 주변 장치(204)가 네트워크 스택 동작을 수행하도록 침니(chimney)(210)를 통해 주변 장치(204)로 전송된다. 이러한 계층에서, 중간 소프트웨어 계층들은 호스트 또는 주변 장치에 배타적으로 존재하지 않아야 하며 중간 계층들 중 임의의 계층이 완전하게 오프로딩되어 호스트 내에 유지되거나, 양자의 조합 (예를 들어, 하나 이상의 특정 연결들을 오프로딩)이 가능하도록 한다. 또한, 침니들은 그 상부 상에서 계층화될 수 있다(예를 들어, IPSEC 침니가 TCP침니의 상부상에서 계층화될 수 있음). 연결은 신뢰성있는 그리고 신뢰성없는 데이터 전송 및 유니캐스트 또는 멀티캐스트 데이터 전송의 임의의 조합일 수 있다. 중간 계층이 호스트 내에 유지된다면, 호스트는 주변 장치(204) 내에 캐시(다음에서 설명되는 바와 같은) 변수들을 업데이트한다. 예를 들어, 연결을 위한 전송 제어 블럭(TCB) 상태 엔트리가 주변 장치(204)에 오프로딩되는 네트워크 계층에 대한 라우트 캐시 엔트리(RCE)로 전송 계층을 위해 오프로딩될 수 있다. 스위치(208)는 동일한 RCE를 공유하는 네트워크 스택(202)을 통해 상이한 TCB에 대한 트래픽 전송을 계속하며 스위치(208)는 오프로딩된 TCB에 대한 침니(210)를 통해 트래픽을 전송한다.
스위치(208)는 오프로드 요청을 중간 계층(206)에 전송함으로써 오프로드를 시작한다. 이 오프로드 요청은 성공적으로 연결을 오프로드했는지를 주변 장치(204)가 판정하도록 돕는 자원 정보를 포함한다. 각각의 중간 계층(206)은 오프로드 요청을 거절하거나 자원 정보를 오프로드 요청에 추가하고 이 오프로드 요청을 네트워크 스택(202) 내의 인접한 소프트웨어 계층에 전송한다. 주변 장치(202)가 오프로드 요청을 수신할 때, 연결을 오프로딩하는데 이용가능한 자원을 갖고 있는지를 계산한다. 주변 장치(204)는 오프로드가 가능하지 않다면 오프로드 요청을 거절한다. 그렇지 않으면, 주변 장치(204)는 오프로드 요청을 수용하여 연결을 위한 자원을 할당한다. 주변 장치(204)는 중간 소프트웨어 계층(들)(206)에 파라미터들의 링크 리스트를 갖는 완료 메시지를 전송함으로써 오프로드 요청을 완료한다. 파리미터들의 링크 리스트는 중간 소프트웨어 계층(들)(206) 및 스위치(208)에 정보를 제공하여 중간 소프트웨어 계층(들)(206) 및 스위치(208)가 주변 장치와 통신하도록 한다. 각각의 중간 소프트웨어 계층(206)은 파리미터의 링크 리스트로부터 그 계층에 대한 정보를 제거한다.
중간 계층(206)이 오프로딩을 위한 완료 메시지를 수신할 때, 중간 계층(206)은 그 상태를 주변 장치(204)로 전달한다. 각각의 상태는 3가지 형태의 변수, 즉 CONST, CACHED, 및 DELEGATED를 가질 수 있다. 상태는 모두 3가지 형태의 변수이거나 3가지 형태의 변수들의 서브셋을 가질 수 있다. CONST 변수는 오프로딩된 연결의 생존 동안에 결코 변화하지 않는 상수이다. 이들은 연결이 업로딩될 때 계층들로 다시 판독되지 않는다. 호스트 프로세싱 유닛(120)은 CACHED 변수의 소유권을 유지하여 호스트 프로세싱 유닛(120) 내의 CACHED 변수에 대한 임의의 변화들이 주변 장치(204) 내에서 업데이트되는 것을 보장한다. CACHED 상태를 변화시키는 제어 메시지들은 네트워크 스택(202)에 의해 취급된다. 그 결과, 호스트는 기입할 것이지만 연결이 업로딩될 때 CACHED 변수를 다시 판독할 필요는 없을 것이다. 호스트 프로세싱 유닛(120)은 DELEGATED 변수의 소유권을 주변 장치(204)로 전송한다. DELEGATED 변수는 오프로드가 발생할 때 기입되며 오프로드가 종료될 때 다시 판독된다. DELEGATED 변수를 다시 전송만함으로써, 호스트에 대한 재연결을 전송하는 오버헤드는 최소화된다. 네트워크 스택(202)과 주변 장치(204) 사이에서 공유(예를 들어, 제어)되어야 하고 다양한 성능 요인으로 인해 오프로딩(즉, 위임)되어야 하는 상태는 네트워크 스택(202)과 침니(210)(예를 들어, TCP오프로드 내의 IP ID)간에 명확히 분할되어 네트워크 스택(202)과 주변 장치(204) 양자모두가 각각 배타적인 상태부를 갖게된다. 호스트 프로세싱 유닛(120)은 요구될 때 (예를 들어, 통계를 위해) 주변 장치(204)에 DELEGATED 변수에 대해 질의한다. 호스트 프로세싱 유닛(120)은 또한 진단을 위해 CONST 또는 CACHED 변수에 대해 질의할 수 있다. 상태를 3개의 카테고리로 분할하는 것은 네트워크 스택(202)이 침니(210)와 정확히 공존하도록 한다. 상태는 오프로드 요청내에 포함될 수 있음에 유의하여야 한다. 이는 상태가 위임 상태 변수를 포함하지 않거나 초기 오프로드 요청과 오프로드 요청의 완료 사이에서 변화하지 않을 위임 상태 변수를 포함한다면 이루어질 수 있다.
주변 장치(204) 또는 호스트는 오프로딩된 연결이 업로딩되는 때를 결정한다. 업로드는 주변 장치(204) 또는 스위치(208)에 의해 시작된다. 일단 업로드가 시작되면, 주변 장치(204)는 적절한 상태로 모든 미해결 요청들을 완료하고 최상부 중간 계층의 위임 상태를 스위치(208)에 제공한다. 스위치(208)는 임의의 추가 전송 요청에 대해 질의하고 포스팅 수신 버퍼(posting receive buffers)를 중단시킨다. 스위치(208)는 최상부 중간 계층에 위임 상태의 제어를 획득하도록 명령한다. 최상부 중간 계층은 위임 상태의 제어를 획득하여 스위치(208)에 완료 메시지를 전송한다. 스위치(208)가 완료 메시지를 수신한 후에, 스위치(208)는 주변 장치(204)에 대한 업로드를 확인하여, 주변 장치(204)가 더 이상 사용되지 않는 자원을 프리로 하도록 한다.
위임 상태의 제어를 획득할 때까지 최상부 중간 계층은 오프로딩된 연결에 대한 유입 데이터 패킷을 처리를 위해 주변 장치(204)로 전달한다는 것에 유의하여야 한다. 주변 장치(204)가 위임 상태를 스위치(208)에 제공하는 시간과 최상부 중간 계층이 위임 상태의 제어를 획득하는 시간 사이에 데이터 패킷이 도착할 수 있다. 주변 장치(204)가 위임 상태를 스위치(208)에 제공한 후에는, 더 이상 유입 데이터 패킷을 처리할 수 없을 것이다. 주변 장치(204)는 유입 데이터를 수신할 때 업로드가 진행중임을 나타내는 에러 메시지를 최상부 중간 계층에 전송한다. 이 에러 메시지는 최상부 중간 계층이 위임 상태를 수신할 때까지 유입 데이터의 전달을 중단하고 추가 데이터를 버퍼링하도록 최상부 중간 계층에 통보한다. 다르게는, 주변 장치(204) 상의 추가적인 버퍼 메모리의 비용으로, 유입 데이터는 주변 장치(204)가 데이터를 버퍼링하기 위해 주변 장치(204)로 전달될 수 있다.
다중 연결이 중간 소프트웨어 계층(206)에 의해 주변 장치(204)에 대해 오프로딩될 수 있다. 레퍼런스 카운터는 오프로드를 위한 중간 소프트웨어 계층의 상태 객체를 참조하는 다수의 상부 계층 상태 객체들 (즉, 중간 소프트웨어 계층(206) 상부의 계층들의 상태 객체들)의 중간 소프트웨어 계층(206)에 의해 유지된다. 본 명세서에서 사용되는 상태 객체는 본원에서 사용된 CONST, CACHED, DELEGATED로서 카테고리화되는 특정한 계층에 대한 상태 변수들의 집합이다. 중간 계층의 오프로딩된 상태 객체가 그 상부 계층에 의해 참조되지 않는다면, 중간 계층(206)은 메시지를 주변 장치(204)에 전송하여 중간 계층에 대한 상태 객체를 업로딩하고 위임 상태 변수를 중간 계층(206)에 전송하도록 한다. 주변 장치(204)는 중간 계층(206)에 대한 상태 객체를 삭제하고 중간 계층(206)은 완료 메시지를 스위치(208)에 전송한다.
도 3을 참조하면, 전체 개념이 기술되어 있으며, 본 발명의 세부사항이 주변 장치(204)가 NIC(170)이고, 스위치(208)가 전송 계층 인터페이스 스위치(TLI)(306)이며, 네트워크 스택(202)은 전송 계층(300), 네트워크 계층(302), 및 프레이밍 계층(304)을 포함하는 실시예로 설명될 것이다. 네트워크 계층(302)은 또한 경로 계층으로서 공지되어 있으며 프레이밍 계층(304)은 또한 인접 계층으로서 공지되어 있다.
네트워킹 메시지는 동작 동안에 어플리케이션(200)에 의해 네트워크 스택(202)을 통해 NIC(170)로 전송된다. 어플리케이션(200)으로부터 전송된 데이터는 데이터가 호스트 기반 네트워크 스택(202)으로 전송될지 또는 침니(308)로 전송될지를 제어하는 TLI 스위치(306)를 통해 이동한다. TLI 스위치(306)는 네트워크 스택(202)의 상부 계층에 포함될 수 있음에 유의한다. 네트워크 스택(202) 내의 소프트웨어 계층들은 어플리케이션(200)으로부터 데이터를 수신하여, 그것을 패킷 형태로 패키징하고 그것을 NDIS 미니드라이버(310)를 통해 주변 장치 하드웨어(314)로 전송한다. 데이터 패킷이 스택(202)을 통과함에 따라 네트워크 스택(202)이 수행할 수 있는 다른 태스크들은 데이터 암호화, 신뢰성있는 데이터 전송, 및 메시지 다이제스트의 연산 (예를 들어, 체크섬 또는 데이터 패킷에 대한 CRC)을 포함한다. 이들 태스크들 중 다수는 프로세싱 유닛(120)에 의해 수행되며 프로세서 집약적이다.
TLI 스위치(306)는 연결에 대한 데이터를 침니(308)(및 침니 드라이버(312))를 통해 NIC(170)로 전송함으로써 스택 동작을 수행하는 것으로부터 프로세싱 유닛(120)을 오프로딩시키는데 사용된다. 당업자라면, NDIS 미니드라이버(310) 및 침니 드라이버(312)의 상단부가 마이크로소프트 운영 체제에서는 NDIS API이라는 것을 인식할 것이다. 설명을 위해, 전송 제어 프로토콜(TCP) 기반 프로토콜 스택이 본 발명을 설명하는데 사용될 것이다. 그러나, 당업자라면, 본 발명의 교시를 사용하여 다양한 형태의 주변 장치들이 사용될 수 있으며 다른 네트워크 스택들이 오프로딩될 수 있음을 인식할 것이다. 예를 들어, 스트림 제어 전송 프로토콜(SCTP) 또는 사용자 데이터그램 프로토콜(UDP) 기반 프로토콜 스택이 오프로딩될 수 있다. 또한, 본 발명은 인터넷 소형 컴퓨터 시스템 인터페이스(iSCSI) 네트워크 파일 시스템(NFS), 또는 공통 인터페이스 파일 시스템(CIFS)과 같은 상위 기능 프로토콜을 오프로딩하는데 사용될 수 있다.
오프로드가 발생하는 많은 이유가 존재한다. 예로서, 몇몇의 이유들은 다음과 같으며, 이들로서 제한되는 것은 아니다. 시스템 관리자가 오프로딩될 특정한 서비스를 선택할 수 있다. 연결 상의 트래픽이 (바이트 또는 패킷 수의 관점에서) 상당한 량의 자원을 소모한다면 특정한 연결이 오프로딩될 수 있다. 서비스의 형태가 오프로딩될 수 있다. 예를 들어, IPSEC와 같은 보안 프로토콜이 오프로딩될 수 있다. 오프로드는 정책에 의해 구동될 수 있다. 예를 들어, 관리자가 구성 내의 모든 연결들이 먼저 오프로딩되는 정책을 가질 수 있다. 사용되는 시스템 자원 (예를 들어, CPU 이용, 데이터 캐시 사용, 페이지 테이블 캐시 사용, 메모리 대역폭)이 호스트 프로세서가 연결을 오프로딩하도록 할 수 있다.
도 4는 TCP 연결을 오프로딩하도록 취해진 단계들을 도시하고 있다. 3단계 프로세스가 사용된다. 일반적으로, 3단계 프로세스는 TCP 연결을 오프로딩하는데 요구되는 자원 할당, 각각의 계층들(300, 302, 304, 306)에 대한 취급을 제공, 및 각각의 계층들(300, 302, 304, 306)에 대한 상태를 NIC(170)로 오프로딩하는 것이다. 오프로드 트랜지션 동안에, TLI 스위치(306)는 어플리케이션(200)으로부터 전송되는 모든 메시지들을 버퍼링한다. 다르게는, 전송 계층(300)은 데이터를 버퍼링한다. 오프로드가 완료될 때, 버퍼링된 데이터는 오프로드 데이터 전송과 동일한 메카니즘을 사용하여 NIC(170)로 전송된다. 유입 패킷들이 오프로드 트랜지션 동안에 수신될 때, NIC(170)는 전송 계층 위임 상태가 NIC(170)에 전달될 때까지 계층들(300, 302, 304, 306)을 통해 데이터 이동을 계속한다.
TLI 스위치(306)는 전송 계층(300)에 오프로드 요청을 전송함으로써 오프로드를 시작한다(라인 400). 오프로드 요청은 다음 계층의 로컬 상태에 대한 포인터 (예를 들어, 전송 계층(300)에 대한 TCB 포인터, 네트워크 계층(302)에 대한 RCE 포인터, 프레이밍 계층(304)에 대한 ARP 테이블 포인터, 또는 NDIS 미니드라이버(310)에 대한 NDIS 미니포트 포인터), 오프로드 타입 (예를 들어, TLI 스위치(306)에 대한 TCP, 네트워크 계층(302)에 대한 IPv6 등), 및 TCP 연결을 성공적으로 오프로드할 수 있는지를 NIC(170)가 결정하는 것을 돕는 자원 정보를 포함한다. TLI 스위치(306)는 또한 디스패치 테이블(dispatch tables)을 NIC(710)에 제공할 수 있다. 전송 계층(300)은 오프로드 요청을 거절하거나 TLI 스위치 자원 정보에 추가되는 TCP 자원 정보를 사용하여 네트워크 계층(302)으로 오프로드 요청을 전송한다(라인 402).
네트워크 계층(302)은 오프로드 요청을 수신하고 연결을 오프로딩하는 것을 거부하거나 TCP 자원 정보 및 TLI 스위치 자원 정보에 추가되는 네트워크 자원 요구도를 사용하여 오프로드 요청을 프레이밍 계층(304)으로 전송한다(라인 404). 또한, 네트워크 계층(302)은 디스패치 테이블을 NIC(170)에 제공할 수 있다. 프레이밍 계층(304)은 연결을 오프로딩하는 것을 거부하거나 네트워크 자원 요구도, TCP 자원 정보 및 TLI 스위치 자원 정보에 추가되는 프레이밍 자원 요구도를 사용하여 오프로드 요청을 NIC(170)에 전송한다(라인 406).
NIC(170)는 오프로드 요청을 수신하여 TCP 연결을 오프로딩하는데 이용가능한 자원을 갖고 있는지를 계산한다. 오프로드가 가능하지 않다고 NIC가 판정하면, 오프로드 요청을 거부한다. 오프로드가 가능하다고 NIC가 판정하면, 오프로드 요청을 수용하고 연결을 위해 자원(예를 들어, TCB, 라우트 캐시 엔트리(RCE), 어드레스 레졸루션 프로토콜(ARP) 테이블 엔트리(ATE))을 할당한다. NIC(170)는 파라미터들의 링크 리스트 및 디스패치 테이블을 생성하여 계층들(300, 302, 304, 및 306)에 제공하며 파리미터들의 링크 리스트를 갖는 완료 메시지를 프레이밍 계층(304)으로 전송함으로써 오프로드 요청을 완료한다(라인 408). 이 파라미터들은 오프로드 핸들 및 계층들(300, 302, 304, 306) 각각에 대한 디스패치 테이블을 포함한다. 본 명세서에서 사용된 바와 같이, 오프로드 핸들은 소프트웨어 계층이 주변 장치와 통신하도록 하는 메카니즘을 의미한다. 예로서, 오프로드 핸들은 포인터 기반 핸들, 룩업으로서 어레이에 사용되는 정수 값, 해시 테이블 (예를 들어, 해싱 함수), 소프트웨어 계층(또는 네트워크 스택)과 주변 장치 사이의 통신 채널, 또는 주변 장치가 상태 객체를 룩업하도록 사용하는 소프트웨어 계층에 의해 통과되는 한 세트의 파라미터일 수 있으며, 이들로서 제한되는 것은 아니다.
디스패치 테이블은 데이터를 NIC(170)로 직접 전송하거나 데이터를 NIC(170)로부터 직접 수신하는데 사용된다. 이 디스패치 테이블은 또한 진단을 제공하는데 사용될 수 있다. 예를 들어, 시스템이 적절하게 기능하는지를 확인하기 위해 시스템을 감시하고 오류를 주입하는 소프트웨어 계층이 추가될 수 있다. 또한, 디스패치 테이블은 필요하다면 부가 기능을 추가할 수 있는 소프트웨어 계층들에 의해 패치될 수 있다. 예를 들어, 필터 드라이버의 기능을 제공하도록 소프트웨어 계층이 추가될 수 있다. 패칭은 추가된 기능이 삽입되어 그것을 전환(즉, 그 포인팅)시키는 원래의 기능에 대한 포인터를 추가 기능으로 그래빙(grabbing)함으로써 전형적으로 행해진다. 패치가 삽입된 후에, 추가된 기능은 그 기능을 수행하고 다음에 원래 기능이 호출될 때마다 원래의 기능을 호출한다.
프레이밍 계층(304)은 목적지 MAC 어드레스가 변하거나 엔캡슐레이션 타입(encapsulation type)이 변화한다면 오프로드 핸들 및 용이한 업데이트를 위해 ARP 테이블 엔트리 내의 프레이밍 계층에 대한 디스패치 테이블을 저장한다. 프레이밍 계층(304)은 다음에 ATE와 연관된 NIC(170) 상태를 업데이트한다(라인 410). 프레이밍 계층(304)은 그 상태를 링크 리스트로부터 제거하고 링크 리스트 내의 나머지 정보를 네트워크 계층(302)으로 전달한다(라인 412).
네트워크 계층(302)은 오프로드 핸들 및 네트워크 계층(302)에 대한 디스패치 테이블을 저장한다. 또한, 네트워크 계층(302)은 그 상태를 NIC(170)로 전송한다(라인 414). 네트워크 계층(302)은 링크 리스트로부터 네트워크 계층 정보를 제거하고 파라미터들의 링크 리스트 및 디스패치 테이블을 갖는 완료 메시지를 전송 계층(300)으로 전송한다(라인 416). 네트워크 계층(302)은 오프로딩된 상태에 대한 처리를 위해 NIC(170)에 수신되는 IP 프레그먼트(fragments)를 전달하거나 네트워크 계층에서 IP 프레그먼트를 처리하여 이를 전송 계층(300)으로 전달할 수 있다.
다른 실시예에서, 계층의 상태 객체는 오프로드 요청으로 전송된다. 예를 들어, 프레이밍 계층 상태 객체 및 네트워크 계층 상태 객체는 오프로드 요청으로 전송되며 오프로드 요청과 완료 이벤트 사이에 캐시 상태가 변화하기만 하면 상태가 업데이트된다. 전체 계층 상태 객체는 위임 상태가 제공되지 않거나 오프로드 요청과 오프로드 요청의 완료 사이에 변화하지 않는다면 오프로드 요청으로만 전송될 수 있다. 그러나, CONST로서 분류된 상태 변수들은 위임 상태가 제공되고 오프로드 요청과 오프로드 요청의 완료 사이에 변화할 수 있더라도 오프로드 요청으로 전송될 수 있다.
전송 계층(300)은 전송 계층에 대한 오프로드 핸들을 저장하며 그 상태를 NIC(170)에 전송한다(라인 418). 임의의 미해결 송신 또는 수신 버퍼가 계류중이라면, 전송 계층(300)은 버퍼들을 TLI 스위치(306)로 복귀시킨다. 일단 전송 계층(300)이 TLI 스위치(306)에 대해 다시 버퍼 제공을 시작하면, TLI 스위치(306)는 전송 계층(300)에 대한 버퍼 전송을 중단할 것이며 이들을 조회하여 전송 계층(300)이 파라미터의 링크 리스트 및 디스패치 테이블을 갖는 완료 메시지를 TLI 스위치(204)로 전송하는 것을 대기한다. 전송 계층(300)은 모든 버퍼들을 복귀시키고 다음에 완료 메시지를 전송한다(라인 420). 일단 TLI 스위치(306)가 완료 메시지를 수신하면, TLI 스위치(306)는 송신 및 수신 버퍼들을 NIC(170)로 전송한다(라인 422). TLI 스위치(306)는 디스패치 테이블을 과거의 모든 미해결 수신 버퍼 및 미래의 수신 버퍼로 사용하고 처리를 위해 NIC(170)로 전송한다. 오프로드 요청이 완료되는 시간 동안에, 각각의 계층(300, 302, 304)은 오프로딩된 상태 객체 (즉, 계층과 연관된 상태 객체)에 대한 새로운 오프로드 요청들을 거절하거나 오프로드가 완료될 때까지 그들을 조회한다.
전송 계층(300)은 여전히 유입 TCB 데이터를 처리할 능력을 가지며 전송 상태가 NIC(170)로 오프로딩되지 않았다면 데이터를 TLI 스위치(306)로 전달한다. TCB 데이터가 오프로드의 중간에 도달한다면, 전송 계층(300)은 데이터를 보류하거나 데이터를 처리하여 그것을 TLI 스위치(306)로 전달한다. 전송 계층(300)이 그 상태를 NIC(170)로 전송(라인 418)하는 시간과 TLI 스위치가 버퍼들을 NIC(170)로 전송하는 시간 사이에, 네트워크 스택(202)을 통해 유입되는 TCB 데이터는 NIC(170)로 전송된다.
후속 오프로드 요청시에, 네트워크 계층(302) 및 프레이밍 계층(304)은 그들이 NIC(170)로부터 수신한 오프로드 핸들들을 이전의 오프로드로부터 NIC(170)로 통과시킨다. 이는 네트워킹 계층(302) 및 프레이밍 계층(304)에 대한 자원들이 이미 할당된 NIC(170)에 신호하여, NIC 자원들을 보존하고 오프로드 속도를 향상시킨다.
이전에 나타난 바와 같이, 계층들(300, 302, 304)은 그 상태를 NIC(170)로 통과시킨다. 각각의 상태는 3가지 형태의 변수들, 즉 CONST, CACHED, 및 DELEGATED를 갖는다. CONST 변수들은 오프로딩된 연결의 생존 동안에 결코 변화하지 않는 상수이다. 이들은 연결이 종료될 때 계층들에 대해 다시 판독되지 않는다. 호스트 프로세싱 유닛(120)은 CACHED 변수들의 소유권을 유지하고 호스트 프로세싱 유닛(120) 내의 CACHED 변수에 대한 임의의 변화들이 NIC(170)에서 업데이트되는 것을 보장한다. 그 결과, 호스트는 기입하지만 CACHED 변수들을 (시스템 진단이 그것을 요청하지 않으면) 결코 다시 판독하지 않는다. 호스트 프로세싱 유닛(120)은 DELEGATED 변수들의 소유권을 NIC(170)로 전송한다. DELEGATED 변수 들은 오프로드가 발생할 때 기입되고 오프로드가 종료될 때 다시 판독된다. 단지 DELEGATED 변수만을 전송함으로써, 호스트로 다시 연결을 전달하는 오버헤드가 최소화된다. 호스트 프로세싱 유닛(120)은 요구될 때 (예를 들어, 통계를 위해) DELEGATED 변수들에 대해 NIC(170)를 조회한다.
전송 계층(300)에 대한 CONST 변수들은 목적지 포트, 소스 포트, '케어-오브(care-of)' 어드레스가 변화할 수 있는 모바일 IP 케이스가 존재함을 나타내는 플래그, SEND 및 RECV 윈도우 스케일 인자들, 및 네트워크 계층(302)에 대한 NIC 핸들을 포함한다. 전송 계층(300)에 대한 CACHED 변수들은 TCP 변수들 및 IP 변수들이다. TCP변수들은 유효 MSS, NIC(170)에 의한 수신 표시로 복사되는 바이트 수, 네글링(Nagling)을 턴오프하는 플래그, 킵-얼라이브(Keep-Alive)가 요구되는지를 나타내는 플래그, 및 킵-얼라이브 세팅 (즉, 간격, 프로브 수, 및 델타)을 포함한다. IP 변수들은 TOS 및 TTL을 포함한다. DELEGATED 변수들은 현재의 TCP 상태, 다음의 RECV에 대한 시퀀스 넘버(즉, RCV.NEXT), 수신 윈도우 크기(RCV.WND), 퍼스트 언-액크드 데이터(First Un-Acked Data)에 대한 시퀀스 넘버(SND.UNA), 다음의 SEND 에 대한 시퀀스 넘버(SND.NEXT), 전송된 최대 시퀀스 넘버 (SND.MAX), 최대 전송 윈도우(MAX_WIN), 현재의 혼잡 윈도우(CWIN), 느린 시작 임계치 (SSTHRESH), 평탄화된 RTT(8*A), 델타(8*D), 현재의 재전송 카운트, 다음 재전송을 위한 잔여 시간, 및 에코되는 타임 스탬프를 포함한다.
네트워크 계층(302)에 대한 CONST 변수들은 (IPv4 또는 IPv6에 대한) 목적지 IP 어드레스와 (IPv4 또는 IPv6에 대한) 소스 목적지 IP 어드레스를 포함한다. 네 트워크 계층(302)에 대한 CACHED 변수들은 프레이밍 계층(304)에 대한 NIC 핸들을 포함한다. 네트워크 계층(302)에 대한 DELEGATED 변수들은 IP패킷 ID 시작값을 포함한다. 프레이밍 계층(304)에 대한 CACHED 변수들은 ARP 어드레스 및 헤더의 포맷(예를 들어, LLC/SNAP[논리 링크 제어/서브네트워크 억세스 프로토콜] 또는 DIX[디지털, 인텔, 제록스])을 나타내는 플래그를 포함한다.
전송 계층 상태는 네트워크 계층에 대한 핸들을 포함하며 네트워크 계층 상태는 네트워크 계층 상태가 다중 연결들 사이에서 공유될 수 있기 때문에 프레이밍 상태에 대한 핸들을 포함하고 프레이밍 계층 상태는 다중 경로(예를 들어, IP 알리아스)들 사이에서 공유될 수 있다. 이러한 계층은 여러 요인으로 유지된다. 연결은 IP ID 네임스페이스가 경로 베이시스 당 모든 오프로딩된 연결들에 따라 관리되어야 하기 때문에 네트워크 계층에 대한 NIC 핸들을 필요로 한다. 경로는 라우트 업데이트가 다음의 홉 어드레스를 변화시켜 새로운 MAC 어드레스를 포인팅하기 때문에 프레이밍 계층에 대한 NIC 핸들을 필요로 한다. 또한, 계층은 NIC에 의해 유지되도록 요구되는 상태량을 축적한다. 예를 들어, IPv4에 대한 ARP 업데이트는 IP 어드레스로부터 MAC 어드레스로의 맵핑을 변화시킬 수 있다. (예를 들어, 서버 상에서 오류가 발생한 인터페이스) 호스트는 MAC 어드레스를 캐시 변수로서 유지하여, 한번의 캐시 상태 업데이트만 행할 필요가 있으며 모든 연결은 새로운 인터페이스에서는 해제된다.
일단 TCP 연결이 오프로드되면, NIC(170)는 전송하는 패킷에 대한 패킷 식별자들(예를 들어, IP ID)을 할당할 의무가 있다. IP ID는 인터페이스 베이시스 마 다 또는 계층 상태 객체 베이시스 마다 오프로딩된다. NIC(170)는 IP ID 네임 스페이스의 한 부분을 할당한다. 한 실시예에서, NIC(170)는 IP ID 네임스페이스의 절반이 할당되며 네트워크 상태가 NIC(170)에 전달될 때 사용하는 IP 패킷 ID 시작값이 제공된다. NIC(170)는 다음의 수학식을 사용하여 전송하는 IP 패킷 상에 IP ID를 생성한다.
Cur_IPID=[(Start_IPID_For_This_Path)+(Counter_For_This_Path) mod32K]mod 64K
Counter_For_This_Path = Counter_For_This_Path + 1
오프로딩된 연결이 업로드되거나 무효화될 때, NIC(170)는 발생하는 다음의 오프로드를 위해 저장하도록 네트워크 계층에 사용하는 다음의 IPID 값을 전송하고 호스트 프로세싱 유닛(120)은 IP ID 네임스페이스의 할당된 부분을 계속 사용한다. 호스트 프로세싱 유닛(120)은 풀 IP ID 네임스페이스를 사용할 수 있지만, 카운터에는 오프로드가 발생하는 각각의 시간이 설정되어야 한다.
NIC(170)는 데이터가 수신된 순서대로 데이터를 수신 버퍼들에 배열하고 어플리케이션 버퍼들이 오프로딩된 연결을 위해 포스팅된 순서대로 어플리케이션 버퍼들을 채운다. 많은 어플리케이션들은 수신 버퍼를 포스팅하기 전에 수신 표시를 대기한다. 한 실시예에서, NIC(170)는 데이터가 연결을 위해 도착하고 포스팅된 어플리케이션 수신 버퍼가 없는 경우 사용하는 버퍼의 글로벌 풀(global pool)을 갖는다. 이 버퍼의 글로벌 풀은 오프로딩된 연결들에 사용되며 1) 아웃오브오더 TCP(out-of-order TCP) 전송의 핸들링, 2) IP 데이터그램의 디프레그먼팅(de-fragmenting), 3) 어플리케이션이 제로 카피 알고리즘(zero copy algorithm)에 대해 너무 작은 버퍼들을 포스팅하는 경우 제로 카피 알고리즘이 아닌 버퍼 카피 알고리즘을 구현하는데 사용될 수 있다. 다르게는, 버퍼의 퍼 커넥션 풀(per-connection pool)은 자원의 효율적인 사용에 관심이 없는 경우 사용될 수 있다. 그러나, 버퍼들의 글로벌 풀은 NIC가 버퍼의 퍼 커넥션 풀을 지원하지 않거나 시스템 자원이 부족한 경우 (예를 들어, 메모리 내에 어플리케이션 버퍼를 고정하는 자원이 충분하지 않은 경우) 사용된다.
도 5a 내지 도 5d를 참조하면, NIC(170)는 오프로드가 발생하면 오프로드를 나타내는 반전된 트리(500)를 갖는다. 도면들에서, 점선들은 NIC(170)에 의해 할당된 새로운 상태들을 나타낸다. 도 5a에서, NIC(170)는 TCP 엔트리(506)에 연결된 라우트 캐시 엔트리(504)에 연결된 ARP 엔트리(502)를 갖는다. 예를 들어, 모든 트래픽이 라우터로 진행한다면, 다음 홉은 항상 동일한 ARP 엔트리(502)에 존재할 것이다. 라우트 캐시 엔트리(504)가 다음의 TCP 연결 오프로드에 사용된다면, 단지 새로운 자원만이 새로운 오프로딩된 TCB이다. 따라서, 오프로드가 네트워크 스택(202)에서 시작될 때, 이미 오프로딩된 상태를 갖는 중간 소프트웨어 계층들 (예를 들어, 네트워크 계층(302) 및 프레이밍 계층(304))은 이전의 오프로드 요청 상에 할당된 NIC 발생 오프로드 핸들을 간단히 삽입할 것이다. NIC(170)는 단지 새로운 자원들(예를 들어, TCP 엔트리(508))을 할당하고 네트워크 스택(202)을 백업하는 새로운 자원들에 대해 오프로드 핸들을 전송해야 한다. 반전된 트리(500)는 라우트 캐시 엔트리(504)에 연결된 TCP 엔트리(508)를 갖는다(도 5b 참조). 이러한 접근법은 NIC 자원을 절약하며 오프로드 속도를 향상시킨다. 또한, 캐시 변수 상태가 변화한다면, 단지 하나의 구조만이 업데이트될 필요가 있다. 침니 내의 다양한 소프트웨어 계층들에 대한 모든 상태가 단일 엔트리로서 오프로드되었다면, 상부 소프트웨어 계층 아래의 임의의 상태 업데이트는 다중 업데이트를 필요로 한다.
도 5c는 보다 복잡한 구성을 갖는 반전된 트리(500)를 도시하고 있다. ARP 테이블 엔트리(502)를 통과하는 2개의 라우트 캐시 엔트리들(504 및 510)이 존재한다. TCP 연결들(506 및 508)은 라우트 캐시 엔트리(504)를 사용한다. TCP 연결들(512 및 514)은 라우트 캐시 엔트리(510)를 참조한다. 임의의 ARP 업데이트가 발생한다면 (예를 들어, 멀티 홈드 서버의 인터페이스에 오류가 발생하면), 엔트리(502)가 업데이트되어야 한다. 이는 잠재적으로 수천 또는 수십만의 연결들이, 요구되는 NIC(170)에 대해 단지 하나의 업데이트로 새로운 인터페이스에 오류가 발생하게 한다. 도 5d는 라우트 업데이트가 발생한 후에 단일 반전 트리(500)로 병합된 2개의 독립 반전 트리(엔트리들(502-508) 및 엔트리들(510-516))를 도시하고 있다. 라우트 업데이트 이전에, 라우트 캐시 엔트리(510)에 대한 다음 홉 ARP 테이블 엔트리는 ARP 테이블 엔트리(516)이다. 라우트 업데이트 이후에, 다음 홉 ARP 테이블 엔트리는 ARP 테이블 엔트리(502)이다. 따라서, 반전 트리의 사용은 네트워크 스택 상태가 단일 엔트리로서 오프로드되는 경우 수천 또는 수만의 업데이트가 아닌 단일 트랜젝션으로서 처리되는 라우트 업데이트가 NIC(170)에 대해 행해지도록 한다.
도 6을 참조하면, 일단 연결이 NIC(170)에 오프로딩되었기만 하면, NIC(170)에 대해 2개의 경로가 존재한다. 제1 경로는 프레이밍 계층(304), 네트워크 계층(302), 및 전송 계층(300)을 통해 NDIS 미니드라이버(310)를 통하는 것이다. 제2 경로는 소위 침니로 불리는 오프로딩된 연결(608)을 통하는 것이다. 호스트 컴퓨터의 시각으로부터, 통신의 관점에서 2개의 경로에 대해 모든 것이 동일하다. 캐시 상태 변수는 2개의 경로를 이전에 나타난 바와 같이 NIC(170) 내에 캐시 상태 변수들을 업데이트하는 프로세싱 유닛(120)과 동기화시킨다. 캐시 변수들의 업데이트는 화살표 602, 604, 606에 의해 표시되어 있다.
유입 데이터 패킷이 도달할 때, NIC(170)는 유입 데이터 패킷이 오프로딩된 경로를 통해 진행할지 또는 비오프로딩 경로를 통해 (즉, NDIS 미니드라이버(310) 및 계층들(304, 302, 300)의 NDIS 경로를 통해) 진행할지를 결정한다. 한 실시예에서, NIC(170)는 소스 및 목적지 TCP 포트 넘버, 소스 및 목적지 IP어드레스 및 프로토콜 타입에 대해 해싱 기능을 수행함으로써 유입되는 데이터 패킷을 어느 경로가 전송할지를 결정한다. 해시가 오프로딩된 연결 파라미터들을 매칭(즉, 해시 버킷 체인이 조사되어 몇벌의 연결의 정확한 매칭이 발생)하면, 침니(608)가 사용된다. 해시가 해시 인덱스와 일치하지 않으면, 네트워크 스택(202)을 통해 비오프로딩된 경로가 사용된다. 캐시 상태를 업데이트하는 제어 메시지들은 호스트에 의해 핸들링된다. 이는 ICMP, DNS, 및 RIP 메시지들과 같은 오프로딩된 연결 외부에서 임의의 제어 메시지들을 NIC(170)가 핸들링하지 않게 한다.
본 발명은 사용자에게 호스트 프로토콜 타입과 같은 연결 파라미터, 로컬 및 원격 포트와 IP 어드레스 바인딩들, 연결 상태, 프로세스 id 등에서의 모든 연결을 포함하는 다양한 정보를 검색하는 넷스탯(Netstat)과 같은 기존의 툴을 사용하여 통계를 얻는 능력을 제공한다. 통계는 본 발명의 계층 베이시스마다 또는 계층 상태 객체 베이시스 마다 수집된다. 계층 내에서, 계층 상태 객체들은 다중 계층 상태 객체들에서 통계를 수집하도록 그룹화될 수 있다. 예를 들어, 네트워크 계층에 대한 통계는 사용되는 각각의 프로토콜 (예를 들어, IPv4 및 IPv6)에 대해 분할될 수 있다. CONST 및 CACHED 상태 변수들과 연관된 통계는 호스트에 의해 제공되며 DELEGATED 상태 변수들과 연관된 통계는 주변 장치(204)에 의해 제공된다. 조회가 이루어질 때, DELEGATED 상태 변수들과 연관된 통계는 CONST 및 CACHED 상태 변수들과 연관된 통계에 첨부된다.
또한, 호스트 계층 상태 및 패킷 카운트와 같은 주변 장치 계층 상태의 전체 그룹화에 걸쳐 합산된 통계의 클래스가 존재한다. 다른 형태의 통계는 시스템 내의 기능 상태의 리스트 (예를 들어, 시스템 내의 TCB 마다의 상태 리스트)이다. TCB에 대한 통계는 호스트에 의해 트래킹되는 통계와 주변 장치에 의해 트래킹되는 통계의 조합이다. 유사하게, 패킷 카운트에 대한 통계는 호스트 계층 상태 통계와 주변 장치 계층 상태 통계의 합계이다.
TCP MIB(Management Information Base)에 대한 호스트와 주변 장치(204) 사이의 분할 예가 아래의 표 1에 제시되어 있으며 IPv4 MIB 통계는 다음의 표 2에 제시되어 있다. 표들에서, 제1 열은 필드이고, 제2 열은 주변 장치 또는 호스트 네트워크 스택이 통계를 트래킹할 책임이 있는지를 지시하며 제3 필드는 필드가 어떻게 트래킹되는지를 나타낸다. 주변 장치가 책임지고 있는 통계는 각 계층 상태 객체 베이시스 또는 각 계층 베이시스 마다 트래킹된다. 본 명세서에서 사용되는 계층 마다란, 통계가 계층마다 주변장치 마다 프로토콜 마다 트래킹된다는 것을 의미한다. 그러나, 통계가 호스트 상태 및 주변 장치(들)로부터의 상태로부터 동기화될 때, 일반적으로 프로토콜 베이시스마다 제공된다. 주변 장치를 조회하지 않으면서 호스트 네트워크 스택이 생성할 수 있는 통계는 "스택이 완전한 정보를 가짐" 또는 "스택만으로 수행됨"으로 카테고리화된다. "스택이 완전한 정보를 가짐" 카테고리는 주변 장치가 통계에 대해 인식하고 있지만, 통계를 트래킹하지는 않는다는 것을 나타낸다. "스택만으로 수행됨" 통계는 주변 장치가 통계에 대해 인식하고 있지 않다는 것을 나타낸다. 어댑터 통계는 규칙적인 NDIS 인터페이스를 통해 조회된다. 어댑터 통계는 전송된 바이트, 수신된 바이트 등과 같은 변수들을 포함한다.
TCP MIB 통계 스플릿
TCP 통계 구조 필드 의무 필드가 트래킹되는 방식
ts_RtoAlgorithm 호스트 네트워크 스택 스택이 완전한 정보를 가짐
ts_RtoMin 호스트 네트워크 스택 스택이 완전한 정보를 가짐
ts_RtoMax 호스트 네트워크 스택 스택이 완전한 정보를 가짐
ts_MaxConn 호스트 네트워크 스택 스택이 완전한 정보를 가짐
ts_ActiveOpens 호스트 네트워크 스택 스택만으로 수행됨
ts_PassiveOpens 호스트 네트워크 스택 스택만으로 수행됨
ts_AttemptFails 호스트 네트워크 스택 스택만으로 수행됨
ts_EstabResets 호스트 네트워크 스택 스택이 완전한 정보를 가짐
ts_CurrEstab 호스트 네트워크 스택 및 주변장치 계층마다
ts_InSegs 호스트 네트워크 스택 및 주변장치 계층마다
ts_OutSegs 호스트 네트워크 스택 및 주변장치 계층마다
ts_RetransSegs 호스트 네트워크 스택 및 주변장치 계층마다
ts_InErrs 호스트 네트워크 스택 및 주변장치 계층마다
ts_OutRsts 호스트 네트워크 스택 및 주변장치 계층마다
ts_NumCons 호스트 네트워크 스택 스택이 완전한 정보를 가짐
ts_RtoAlgorithm은 확인되지 않은 옥텟(octet)들에 사용되는 타임아웃 값을 판정하는데 사용되는 알고리즘을 위한 값이다. ts_Rto_Min은 밀리초로 측정된 재전송 타임아웃을 위해 TCP 구현에 의해 허용되는 최소값이다. ts_Rto_Max은 밀리초로 측정된 재전송 타임아웃을 위해 TCP 구현에 의해 허용되는 최대값이다. ts_ActiveOpens는 TCP 연결이 CLOSED 상태로부터 SYN_SENT 상태로 직접 트랜지션을 이루는 횟수이다. ts_PassiveOpens은 TCP 연결이 LISTEN 상태로부터 SYN_RCVD 상태로 직접 트랜지션을 이루는 횟수이다. ts_AttemptFails는 TCP 연결이 SYN-SENT 상태 또는 SYN-RCVD 상태로부터 CLOSED 상태로 직접 트랜지션을 이루는 횟수 + TCP 연결이 SYN-RCVD 상태로부터 LISTEN 상태로 직접 트랜지션을 이루는 횟수이다. ts_EstabResets는 ESTABLISHED 상태 또는 CLOSE-WAIT 상태로부터 CLOSED 상태로 직접 트랜지션을 이루는 횟수이다. ts_CurrEstab는 현재 상태가 ESTABLISHED 또는 CLOSE-WAIT인 TCP 연결의 횟수이다. ts_InSegs는 에러로 수신된 세그먼트를 포함하여 수신된 세그먼트의 전체 수이다. ts_OutSegs는 현재 접속은 포함하지만 재전송된 옥텟만을 포함하는 것은 배제하는 전송된 세그먼트들의 전체 수이다. ts_RetransSegs는 재전송된 세그먼트들의 전체 수이다. ts_InErrs는 에러로 수신된 세그먼트(예를 들어, 배드 TCP 체크섬)의 전체 수이다. ts_OutRsts는 RST 플래그를 포함하여 전송된 TCP 세그먼트들의 수이다. ts_NumCons는 현재 존재하는 TCP 연결의 전체 수이다.
IPv4 MIB 통계 스플릿
IPSNMPInfo 구조 필드 의무 필드가 트래킹되는 방식
ipsi_Forwarding 호스트 네트워크 스택 스택만으로 수행됨
ipsi_DefaultTTL 호스트 네트워크 스택 스택이 완전한 정보를 가짐
ipsi_InReceives 호스트 네트워크 스택 및 주변 장치 계층마다
ipsi_InHdrErrors 호스트 네트워크 스택 및 주변 장치 계층마다
ipsi_InAddrErrors 호스트 네트워크 스택 스택만으로 수행됨
ipsi_Forwdatagrams 호스트 네트워크 스택 스택만으로 수행됨
ipsi_UnknownProtos 호스트 네트워크 스택 스택만으로 수행됨
ipsi_InDiscards 호스트 네트워크 스택 및 주변 장치 계층마다
ipsi_InDelivers 호스트 네트워크 스택 및 주변 장치 계층마다
ipsi_OutRequests 호스트 네트워크 스택 및 주변 장치 계층마다
ipsi_RoutingDiscards 호스트 네트워크 스택 스택만으로 수행됨
ipsi_OutDiscards 호스트 네트워크 스택 및 주변 장치 계층마다
ipsi_OutNooutes 호스트 네트워크 스택 및 주변 장치 계층마다
ipsi_ReasmTimeout 호스트 네트워크 스택 스택이 완전한 정보를 가짐
ipsi_ReasmReqds 호스트 네트워크 스택 및 주변 장치 계층마다
ipsi_ReasmOKs 호스트 네트워크 스택 및 주변 장치 계층마다
ipsi_ReasmFails 호스트 네트워크 스택 및 주변 장치 계층마다
ipsi_FragOKs 호스트 네트워크 스택 스택만으로 수행됨
ipsi_FragFails 호스트 네트워크 스택 스택만으로 수행됨
ipsi_FragCreates 호스트 네트워크 스택 스택만으로 수행됨
ipsi_NumIf 호스트 네트워크 스택 스택만으로 수행됨
ipsi_NumAddr 호스트 네트워크 스택 스택만으로 수행됨
ipsi_NumRoutes 호스트 네트워크 스택 스택만으로 수행됨
ipsi_Forwarding은 호스트가 호스트에 의해 수신은 되지만 호스트로 처리되지는 않는 데이터그램의 포워딩에 관하여 IP 라우터로서 작용하는지에 대한 표시를 제공하는 값이다. ipsi_DefaultTTL은 TTL 값이 전송 계층 프로토콜에 의해 공급되지 않을 때마다 이 엔티티에서 발생되는 데이터그램의 IP 헤더의 Time-To-Live 필드로 삽입되는 디폴트 값이다. ipsi_InReceives는 에러로 수신되는 것을 포함하여 인터페이스들로부터 수신되는 입력 데이터그램의 전체 수이다. ipsi_InHdrErrors는 배드 체크섬, 버전 수 미스매치, 다른 포맷 에러, 초과된 타임-투-라이브, IP 옵션을 처리할 시 발견되는 에러 등을 포함하여 그 IP 헤더 내의 에러로 인해 폐기되는 입력 데이터그램의 수이다. ipsi_InAddrErrors는 그 IP 헤더의 목적지 필드 내의 IP 어드레스가 호스트에서 수신되는 유효 어드레스가 아니기 때문에 폐기되는 입력 데이터그램의 수이다. ipsi_ForwDatagrams는 그 최종 목적지에 전달하도록 데이터그램을 포워딩하는 라우트를 탐색한 결과로서 호스트가 IP 목적지가 아닌 입력 데이터그램의 수이다. ipsi_UnknownProto는 성공적이지만 알려지지 않은 또는 지원되지 않은 프로토콜로 인해 폐기되는 수신된 로컬 처리 데이터그램의 수이다. ipsi_InDiscards는 그 계속적인 프로세싱을 방해하는 문제가 발생되지 않았지만 폐기된 (예를 들어, 버퍼 공간의 부족) 입력 IP 데이터그램의 수이다. ipsi_InDelivers는 IP 유저 프로토콜에 성공적으로 전달된 입력 데이터그램의 전체 수이다. ipsi_OutRequests는 로컬 IP 유저 프로토콜(ICMP 포함)이 전송을 위한 요청으로 IP에 공급된 IP 데이터그램의 전체 수이다. ipsi_RoutingDiscards는 유효한 경우에도 폐기되도록 선택된 라우팅 엔트리들의 수이다. ipsi_OutDiscards는 그 목적지로의 전송 방해가 발생하지 않았지만 폐기된 (예를 들어, 버퍼 공간의 부족) 출력 IP 데이터그램의 수이다. ipsi_OutNoRoutes는 그 목적지에 데이터그램을 전송하는 경로가 탐색되지 않기 때문에 폐기되는 IP 데이터그램의 수이다. ipsi_ReasmTimeout는 수신된 프레그먼트들이 호스트에서 재조립을 대기하는 동안에 그것들이 유지되는 최대 초 수이다. ipsi_ReasmReqds는 호스트에서 재조립될 필요가 있는 수신된 IP 프레그먼트들의 수이다. ipsi_ReasmOKs는 성공적으로 재조립된 IP 데이터그램들의 수이다. ipsi_ReasmFails는 IP 재조립 알고리즘 (예를 들어, 타임아웃, 에러 등)에 의해 검출된 오류 수이다. ipsi_FragOKs는 호스트에서 성공적으로 프레그먼트된 IP 데이터그램의 수이다. ipsi_FragFails은 호스트에서 프레그먼트되어야 하지만, 예를 들어, 그 Don't Fragment 플래그가 세트되었기 때문에 프레그먼트 될 수 없어서 폐기된 IP 데이터그램의 수이다. ipsi_FragCreates는 호스트에서의 프레그먼테이션의 결과로서 발생된 IP 데이터그램 프레그먼트들의 수이다. ipsi_NumIf는 사용가능한 인터페이스의 전체 수이다. ipsi_NumAddr은 시스템 상의 고유한 IP 주소의 총 개수이다. ipsi_NumRoutes는 현재 동작중인 라우트의 전체 수이다.
본 발명은 또한 주변 장치로부터 호스트로 오프로딩된 네트워크 연결을 업로딩하는 방법을 제공한다. 업로드가 발생하는 많은 이유가 존재한다. 예로서, 몇몇의 이유가 다음에서 기술된다. 라우트가 변화되어, 상이한 인터페이스로 전송되는 트래픽을 필요로 할 수 있다. 연결 트래픽 동작은 더 이상 오프로드에 적합하지 않도록 변화될 수 있다. 예를 들어, 불충분한 트래픽, 동작 부족이 존재하거나, 연결이 세트 타임보다 길게 흐름 제어된다(예를 들어, 윈도우 업데이트가 수신되지 않음). 또한, 주변 장치는 특정한 기능을 지원할 수 없으며, 너무 많은 IP 프레그먼트들, 너무 많은 아웃오브오더 트래픽, 아웃오브 밴드 데이터 사용, 너무 많은 재전송이 존재하고, 킵-얼라이브(keep-alive)가 타임아웃되고, 보안 연관이 무효하게 되어 재개되지 않거나 너무 많은 데이터가 주변 장치에 전달되는 경우 트래픽 동작은 오프로드에 적합할 수 있다. 오프로딩된 연결을 업로딩하는 다른 이유는 자원 이슈로 인한 것이다. 예를 들어, 주변 장치는 연결(들) 처리를 계속할 자원이 부족할 수 있다. 다른 연결이, 오프로딩된 연결보다 높은 우선순위를 가질 수 있으며 주변 장치 자원 이용가능성이 보다 높은 우선순위 연결이 주변 장치 자원을 계속 사용할 수 있도록 할 수 있는 임계치 아래일 때 연결을 업로딩한다.
시스템 자원은 호스트 프로세서가 오프로딩된 연결을 핸들링할 자원을 갖도록 변화될 수 있다. 침니는 원래의 오프로드(예를 들어, 보안 필터 변화 등)와는 다른 자원들을 필요로 할 수 있다. 호스트는 주변 장치의 자원이 오프로드 연결이 호스트 프로세싱 유닛에 의해 보다 효율적으로 핸들링되는 임계 레벨에 접근하는지를 판정할 수 있다. 예를 들어, 임계치는 트래픽 크기 (바이트 또는 패킷 수), 프레그먼트 수, 윈도우 크기, 및 오프로드 타입을 포함할 수 있다.
도 7을 참조하면, 업로드는 주변 장치(204)(예를 들어, NIC(170)) 또는 TLI 스위치(306)에 의해 시작된다. 연결은 다양한 요인으로 인해 업로딩될 수 있다. 그 요인은 다른 주변 장치로 이동하는 연결, 발생하는 매체 단절, 너무 많은 아웃오브오더 세그먼트, 주변 장치(204)에 전달되는 너무 많은 데이터, 어플리케이션(200)이 버퍼들을 프리포스팅하지 않는 것, 너무 많은 IP 프레그먼트들, 낮은 대역폭 연결, 및 너무 많은 재전송을 포함한다.
도 7은 TLI 스위치(306)에 의해 시작되는 업로드를 도시하고 있다(라인 700). NIC(170)가 업로드를 시작한다면, 라인 700이 제공되지 않는 것에 유의한다. 일단 업로드가 시작되면, NIC(170)는 적절한 상태로 모든 미해결 요청들을 완료시키고 위임 전송 계층 상태를 스위치 계층으로 전달한다(라인 702). NIC(170)는 전송을 완료하지 않거나 수신 버퍼를 완전히 채운다. NIC(170)는 모든 전송 및 수신 상태가, 전송 계층(300)에 다시 전달되는 위임 상태로 동기화되는 것을 보장한다. TLI 스위치(306)는 임의의 추가 전송 요청들을 조회하고 수신 버퍼들을 포스팅하는 것을 중단한다. TLI 스위치(306)는 전송 계층에 위임 전송 상태의 제어를 획득하도록 명령한다(라인 704). 전송 계층(300)은 NIC(170)에 수신되는 임의의 세그먼트 전달을 중단시키고 위임 상태의 제어를 취하며 완료 메시지를 TLI 스위치(306)에 전송한다(라인 706). 전송 계층(300)이 위임 전송 상태의 제어를 획득한 것에 대한 확인을 TLI 스위치(306)가 수신한 후에, TLI 스위치(306)는 NIC(170)가 자원들을 프리로 하도록 하는 NIC(170)으로의 업로드(라인 708)를 확인한다. 또한, 전송 계층(300)은 완료 메시지가 TLI 스위치(306)로 전송되기 이전이나 이후에 네트워크 계층(302)에 연결 업로딩을 통보한다(라인 710).
전송 계층(300)은 위임 상태의 제어를 획득(라인 706)할 때까지 오프로딩된 연결에 대해 유입되는 데이터 패킷을 NIC(170)로 전달한다는 것에 유의하여야 한다. NIC(170)가 위임 상태를 TLI 스위치(306)에 전달(라인 702)하는 시간과 전송 계층(300)이 위임 상태의 제어를 획득(라인 706)하는 시간 사이에 데이터 패킷들이 도달할 수 있다. 일단 NIC(170)가 위임 상태를 TLI 스위치(306)에 전달하면, 더 이상 유입 데이터 패킷을 처리할 수 없다. NIC(170)가 연결을 업로딩하기 위해 유입 패킷을 수신할 때, 이는 에러 메시지를 업로드가 진행 중임을 나타내는 전송 계층(300)으로 전송하여 유입 패킷을 폐기할 수 있다. 이 에러 메시지는 전송 계층(300)에 유입 데이터의 전달을 중단하도록 통보한다. 한 실시예에서, 전송 계층(300)은 위임 상태를 수신할 때까지 추가 데이터를 버퍼링한다.
다중 연결이 중간 소프트웨어 계층들에 의해 주변 장치로 오프로딩될 수 있다. 레퍼런스 카운터는 중간 소프트웨어 계층으로부터 주변 장치로 오프로딩되는 연결 수의 중간 소프트웨어 계층에 의해 유지된다. 레퍼런스 카운트가 제로가 된다면, 업로드 요청이 다음의 중간 소프트웨어 계층에서 생성된다. 이는 다음 계층의 레퍼런스 카운트가 감소되도록 할 것이다. 다음 계층의 레퍼런스 카운트가 제로가 되면 업로드 요청이 네트워크 스택(202)에 계속된다. 이러한 프로세스는 중간 소프트웨어 계층의 레퍼런스 카운트가 제로가 되거나 주변 장치가 업로드 요청을 수신할 때까지 반복된다. 네트워크 계층(302)은 NIC(170)와 연관된 오프로딩 상태 객체들의 수의 레퍼런스 카운트를 감소시킨다. 레퍼런스 카운트가 제로로 되면, 네트워크 계층(302)에 대해 NIC(170)에 할당된 자원을 사용하는 TCB는 존재하지 않는다. 레퍼런스 카운트가 제로로 될 때, 네트워크 계층(302)은 네트워크 계층(302)에 대한 상태 객체를 업로드하고 위임 네트워크 상태 변수들을 네트워크 계층(302)으로 전송하도록 메시지를 NIC(170)에 전송한다(라인 712). NIC(170)는 상태를 삭제하고 NIC(170)가 네트워크 계층(302)에 사용되는 위임 네트워크 상태 변수 및 다음의 IPID 값을 전송한다(라인 714). 연결이 다시 오프로딩되면 네트워크 계층(302)은 이러한 정보를 초기값으로서 사용하도록 저장한다. 또한, 네트워크 계층(302)은 프레이밍 계층(304)이 그 레퍼런스 카운트를 감소시키도록 하는 메시지를 프레이밍 계층(304)에 전송한다(라인 716).
또한, 프레이밍 계층(304)은 레퍼런스 카운트를 유지하고 네트워크 계층(302)으로부터의 메시지가 수신될 때 그 레퍼런스 카운트를 감소시킨다. 프레이밍 계층(304) 내의 레퍼런스 카운트가 제로가 된다면, 프레이밍 계층은 프레이밍 계층 상태를 삭제하도록 메시지를 NIC(170)에 전송한다(라인 718). NIC(170)는 NIC(170) 내의 상태 변수들을 삭제하고 프레이밍 계층에 임의의 보유하고 있는 위임 상태 변수들을 전송한다(라인 720). 프레이밍 계층(304)은 완료 메시지를 네트워크 계층(302)에 전송하고(라인 722) 네트워크 계층(302)은 완료 메시지를 전송 계층에 전송한다(라인 724).
TCP 연결은 그 수명 내에서 임의의 지점에서 IPSEC과 같은 보안 프로토콜을 사용하여 보안 연결을 사용하도록 요구될 수 있다. 연결이 IP 보안이 존재하고 주변 장치(204)가 보안을 핸들링하지 못한다면, 연결은 오프로딩될 수 없다. 보안 IP 연결이 오프로딩될 때, 보안 어소시에이션(들) 상태가 CONST, CACHED, 및 DELEGATED 변수들로 분할되며 이미 기술된 바와 같이 핸들링된다. 호스트 프로세싱 유닛(120)은 키들의 재협상과 같은 제어 메시지들을 관리한다. 주변 장치(204)는 보안 어소시에이션 상태 변수들을 사용하여 모든 필요한 IPSEC 데이터 동작을 수행한다.
도 8을 참조하면, 보안 연결을 오프로딩하는 단계들이 도시되어 있다. 다음의 설명에서, 도 4에 도시된 이미 기술된 단계들이 동일하게 유지되며 반복되지 않는다. 전송 모드에서 동작하는 IPSEC 연결은 설명의 목적으로 사용될 것이다. IPSEC 계층 오프로드는 전송 계층(300)이 TLI 스위치 자원 정보에 추가된 TCP 자원 정보를 사용하여 오프로드 요청을 IPSEC 계층(800)에 전송(라인 402')할 때 시작한다. IPSEC 계층(800)은 TCP 자원 정보 및 TLI 스위치 자원 정보에 추가되는 IPSEC 자원 요구도를 사용하여 오프로드 요청을 네트워크 계층(302)에 전송한다(라인 802). 이 자원 요구도는 IPSEC 계층이 오프로드를 원하는 다수의 보안 어소시에이션을 포함한다. NIC가 오프로드 요청을 수용한다면, 자원들을 보안 어소시에이션 을 핸들링하도록 할당한다. 네트워크 계층(302)은 파라미터의 링크 리스트 및 디스패치 테이블을 갖는 완료 메시지를 전송 계층(300) 대신에 IPSEC 계층에 전송한다(라인 804).
IPSEC 계층(800)이 완료 메시지를 수신할 때, 상태가 이미 오프로딩되어 있지 않고 보안 어소시에이션 내의 위임 상태의 소유권을 NIC(170)에 전달하였다면 IPSEC 계층 상태들을 NIC(170)에 인바운드 디스크립터들(descriptors) 및 아웃바운드 디스크립터들의 일부로서 전송한다(라인 806). 상태가 이미 오프로드되었다면, IPSEC 계층은 참조 카운트를 증가시킨다. 일단 소유권이 전달되면, NIC(170)는 모든 패킷들을 암호화 및 복호화한다. IPSEC 계층(700)은 파라미터의 링크 리스트 및 디스패치 테이블을 갖는 완료 메시지를 전송 계층에 전송한다(라인 414').
IPSEC 계층(800)으로부터 NIC(170)로 통과된 CONST 상태 변수들은 패킷들을 특정한 보안 어소시에이션 및 인바운드 및 아웃바운드 보안 어소시에이션들에 특정된 정보로 분류하도록 요구되는 정보로 구성된다. CONST 변수들은 소스 및 목적지 포트, 프로토콜 타입, 및 보안 어소시에이션 변수들을 포함한다.
CACHED 상태 변수들은 보안 어소시에이션 및 인바운드 및 아웃바운드 보안 어소시에이션에 특정된 정보의 수명을 결정하기 위한 인자들을 포함한다. CACHED 변수들은 암호화된 바이트들에 기반한 소프트 리미트(soft limit)(예를 들어, 바이트 카운트 상의 리키(rekey)) 및 하드 리미트(예를 들어, 바이트 카운트 상의 중단), 보안 어소시에이션이 사용될 수 있는 최대 시간 상의 소프트 리미트(예를 들어, 소정의 틱(tick)에서의 리키) 및 하드 리미트(예를 들어, 소정의 틱에서의 중단), 및 보안 어소시에이션이 사용될 수 있는 최대 휴지 시간 상의 하드 리미트(예를 들어, 최대 휴지 틱들)를 포함한다. NIC(170)는 소프트 리미트 및 하드 리미트에 따른다. 소프트 리미트가 도달될 때, NIC(170)는 호스트 프로세싱 유닛(120)에 통보한다. 하드 리미트가 도달될 때, NIC(170)는 보안 어소시에이션을 폐기한다.
DELEGATED 변수들은 정보의 실행 및 인바운드 및 아웃바운드 보안 어소시에이션에 특정된 정보를 포함한다. DELEGATED 변수들은 보안 어소시에이션, 보안 어소시에이션의 수명, 및 보안 어소시에이션의 휴지 시간으로 암호화 또는 복호화된 바이트의 카운트를 포함한다.
도 9를 참조하면, 주변 장치로부터 호스트로 IPSEC을 통해 오프로딩된 네트워크 연결을 업로딩하는 것이 도시되어 있다. 다음의 설명에서, 도 7에 도시된 이전에 기술된 단계들이 동일하게 유지되며 반복되지는 않을 것이다. 전송 계층(300)은 완료 메시지가 스위치 계층(306)으로 전송되기 이전 또는 이후에 업로딩 연결을 IPSEC 계층(800)에 통보한다(라인 710'). 모든 보안 어소시에이션들과 연관된 레퍼런스 카운트가 감소된다. 레퍼런스 카운트가 제로가 아니라면, IPSEC 계층(800)은 완료 메시지를 전송 계층(300)에 전송한다(라인 724'). 오프로딩된 연결이 특수 보안 어소시에이션을 사용한 최근의 연결이라면, IPSEC 계층(800)은 위임 상태 변수를 IPSEC 계층(800)으로 업로드하도록 메시지를 NIC(170)에 전송한다(라인 900). NIC(170)는 위임 상태 변수를 IPSEC 계층(800)에 반환한다(라인 902). NIC(170)는 보안 어소시에이션의 사용을 중단하고 보안 어소시에이션에 속하는 패킷들을 스택(202)을 통해 IPSEC 계층(800)에 전송한다. IPSEC 계층(800)은 완료 메시지를 NIC(170)에 전송하고 NIC(170)는 보안 어소시에이션을 위해 할당된 자원을 프리로 한다(라인 904).
보안 어소시에이션 레퍼런스 카운트가 제로가 되면, IPSEC 계층(800)은 또한 네트워크 계층(302)에 업로딩된 상태를 통보하는 메시지를 네트워크 계층(302)에 전송한다(라인 906). 프레이밍 계층(304)이 완료 메시지를 네트워크 계층(302)에 전송한 후에(라인 722), 네트워크 계층(302)은 완료 메시지를 IPSEC 계층에 전송한다(라인 908). IPSEC 계층(800)은 완료 메시지를 전송 계층에 전송한다(라인 724').
전송 계층(300), 네트워크 계층(302), 프레이밍 계층(304), 또는 IPSEC 계층(800)에 대한 상태들이 오프로딩될 때, 업데이트 (예를 들어, ARP 업데이트 또는 RIP 업데이트)가 도달할 수 있다. 완료 메시지가 수신되기 전에 업데이트가 발생하면, 로컬 상태가 간단히 업데이트되며 상태 객체가 오프로드 요청으로 전송되었으면 상태가 변화된 것을 나타내도록 플래그가 설정된다.
캐시 상태들을 업데이트하는 NIC의 업데이트 루틴이 호출되는 동안 업데이트가 발생하는 경우에 가능한 경합이 존재한다. 개별 메시지가 상태를 업데이트하면, NIC 업데이트 루틴이 호출되게 하여, NIC가 먼저 스케줄링 이슈로 인해 두 번째 호출을 참조할 것이며, 원래의 업데이트가 도달될 때 실효된 데이터의 사용을 종료한다. 실효 데이터가 사용된다면, 잘못된 엔트리가 다음의 업데이트가 도달할 때까지 사용되어, 다량의 데이터가 잘못된 위치에 전송되거나 중단된다. 이러한 경합 조건에 대해 가능한 2가지 해결책이 존재한다. 가능한 첫 번째 해결책은 다량의 업데이트가 유입되는 경우 회귀 문제점을 야기할 수 있는 두 번째 업데이트를 항상 수행하는 완료 메시지를 구비하는 것이다. 가능한 두 번째 해결책은 가장 최신의 시퀀스 넘버가 항상 사용되도록 시퀀스 넘버를 업데이트에 추가하는 것이다.
IPSEC 지원이 터널링되는 다른 동작 모드에서, 데이터 패킷은 보안 연결의 일부로서 새로운 패킷 내에 엔캡슐레이션된다. 터널은 네트워크 스택(202)에 대한 가상 인터페이스로서 나타난다. IPSEC 터널을 오프로딩하는 단계들은 전송 모드에서 IPSEC 연결을 오프로딩하는 단계들과 유사하다. 전송 모드에서, IPSEC 헤더는 IP 헤더와 TCP 헤더 사이에 위치된다. 터널 모드에서, UDP가 터널을 제공하도록 사용된다. 헤더 체인은 TCP 헤더에서 IPSEC 헤더로, 다시 UDP 헤더로, IP 헤더로, 그리고 프레이밍 헤더로의 체인이다. 터널을 구축하기 위해, 협상된 보안 연결들을 기술하는 인바운드 디스크립터 및 아웃바운드 디스크립터가 주변 장치로 전송된다. 이 디스크립터들은 연결을 위한 상태 변수들 및 연결 구축에 필요한 다른 정보를 포함한다. 터널을 위한 CACHED 및 DELEGATED 상태 변수들은 전송 모드 CACHED 및 DELEGATED 상태 변수들과 동일하다. 터널을 위한 CONST 상태 변수들은 소스 및 목적지 포트, 로컬 어드레스, 리모트 어드레스, 프로토콜 타입, 및 보안 어소시에이션 변수들을 포함한다.
호스트 프로세싱 유닛과 긴밀한 동기화를 유지하면서 주변 장치에 대한 네트워크 스택 연결들을 오프로드 및 업로드하는 방법이 기술되었다. 이 방법은 다수의 프로토콜들과 함께 사용될 수 있다. 예를 들어, 사용될 수 있는 프로토콜들은 TCP, SCTP 등을 포함한다.
본 발명의 원리가 적용될 수 있는 많은 가능한 실시예들의 관점에서, 첨부된 도면들에 대해 본 명세서에서 기술된 실시예들은 단지 설명을 위한 것이지 본 발명을 제한하려는 의도로 이루어진 것은 아니라는 사실을 인식하여야 한다. 예를 들어, 당업자라면, 소프트웨어로 도시된 실시예들의 구성요소들이 하드웨어로 구현될 수도 있고 그 반대의 경우도 가능하며 설명된 실시예가 본 발명의 본질로부터 벗어나지 않으면서 그 배치 및 세부사항이 수정될 수 있다는 것을 인식할 것이다. 그러므로, 본 명세서에 기술된 본 발명은 다음의 특허청구범위 및 그 등가물의 범위 내에서 이루어질 수 있는 모든 실시예들을 포함한다.

Claims (44)

  1. 주변 장치로부터 스위치 계층(switch layer)으로의 제1 경로로부터, 네트워크 스택의 복수의 소프트웨어 계층을 통해 상기 주변 장치로부터 상기 스위치 계층으로의 제2 경로로, 오프로드된 네트워크 스택 상태 객체(offloaded network stack state object)를 업로드하는 방법-상기 복수의 소프트웨어 계층은 중간 계층(intermediate layer)을 포함하고, 상기 네트워크 스택 상태 객체는 적어도 하나의 캐시 상태 변수(cached state variable) 및 적어도 하나의 위임 상태 변수(delegated state variable)를 가짐-으로서,
    상기 주변 장치가 상기 위임 상태 변수의 값을 상기 중간 계층에 전달하는 단계-상기 위임 상태 변수의 값은 상기 네트워크 스택 상태 객체의 오프로드를 통해 상기 주변 장치에 의해 제어됨-;
    상기 적어도 하나의 위임 상태 변수를 제어하도록 상기 중간 계층에 명령하는 단계; 및
    상기 위임 상태 변수의 값과 상기 캐시 상태 변수의 값에 적어도 부분적으로 기초하여 상기 제2 경로를 통해 데이터를 전송하는 단계-상기 캐시 상태 변수의 값은 상기 네트워크 스택 상태 객체의 오프로드를 통해 상기 중간 계층에 의해 제어됨-
    를 포함하는 업로드 방법.
  2. 제1항에 있어서, 상기 오프로드된 네트워크 스택 상태 객체의 업로드를 시작하는 단계를 더 포함하는 업로드 방법.
  3. 제1항에 있어서, 상기 복수의 소프트웨어 계층은 네트워크 계층을 포함하고, 상기 주변 장치는 네트워크 위임 상태를 가지며, 상기 업로드 방법은,
    상기 네트워크 위임 상태에 대해 오프로드된 전송 연결 수의 카운트를 감소시키는 단계; 및
    상기 카운트가 제로로 감소되면, 상기 네트워크 위임 상태를 상기 네트워크 계층으로 전송하라는 메시지를 상기 주변 장치에 전송하는 단계
    를 더 포함하는 업로드 방법.
  4. 제1항에 있어서, 상기 복수의 소프트웨어 계층은 프레이밍 계층(framing layer)을 포함하고, 상기 주변 장치는 프레이밍 위임 상태를 가지며, 상기 업로드 방법은,
    상기 프레이밍 위임 상태에 대해 오프로드된 네트워크 계층 상태 수의 프레이밍 카운트를 감소시키는 단계; 및
    상기 프레이밍 카운트가 제로로 감소되면, 상기 프레이밍 위임 상태를 상기 프레이밍 계층에 전송하라는 메시지를 상기 주변 장치에 전송하는 단계
    를 더 포함하는 업로드 방법.
  5. 제1항에 있어서, 상기 업로드가 시작되어야 하는지를 판정하는 단계를 더 포함하는 업로드 방법.
  6. 제5항에 있어서, 상기 업로드가 시작되어야 하는지를 판정하는 단계는,
    상기 주변 장치로 전달되는 데이터량이 최대 임계치를 초과하는지를 판정하는 단계;
    상기 주변 장치가 소정의 기능을 처리할 수 없는지를 판정하는 단계;
    어플리케이션이 프리포스팅 버퍼(pre-posting buffers)가 아닌지를 판정하는 단계; 및
    상기 주변 장치로 전달되는 데이터량이 최소 대역폭 미만인지를 판정하는 단계
    중 적어도 어느 한 단계를 포함하는 업로드 방법.
  7. 제1항의 업로드 방법을 수행하기 위한 컴퓨터 실행가능한 명령어들을 갖는 컴퓨터 판독가능 매체.
  8. 제7항에 있어서, 상기 업로드가 시작되어야 하는지를 판정하는 단계를 수행하기 위한 컴퓨터 실행가능한 명령어들을 더 가지며,
    상기 업로드가 시작되어야 하는지를 판정하는 단계는,
    상기 주변 장치로 전달되는 데이터량이 최대 임계치를 초과하는지를 판정하는 단계;
    상기 주변 장치가 소정의 기능을 처리할 수 없는지를 판정하는 단계;
    어플리케이션이 프리포스팅 버퍼가 아닌지를 판정하는 단계; 및
    상기 주변 장치로 전달되는 데이터량이 최소 대역폭 미만인지를 판정하는 단계
    중 적어도 어느 한 단계를 포함하는 컴퓨터 판독가능 매체.
  9. 제7항에 있어서, 상기 복수의 소프트웨어 계층은 네트워크 계층 및 프레이밍 계층을 포함하고, 상기 주변 장치는 네트워크 위임 상태 및 프레이밍 위임 상태를 가지며, 상기 컴퓨터 판독가능 매체는,
    상기 네트워크 위임 상태에 대해 오프로드된 전송 연결 수의 카운트를 감소시키는 단계; 및
    상기 카운트가 제로로 감소되면, 상기 네트워크 위임 상태를 상기 네트워크 계층으로 전송하라는 메시지를 상기 주변 장치에 전송하는 단계;
    상기 프레이밍 위임 상태에 대해 오프로드된 네트워크 계층 상태 수의 프레이밍 카운트를 감소시키는 단계; 및
    상기 프레이밍 카운트가 제로로 감소되면, 상기 프레이밍 위임 상태를 상기 프레이밍 계층에 전송하라는 메시지를 상기 주변 장치에 전송하는 단계
    를 수행하기 위한 컴퓨터 실행가능한 명령어들을 더 포함하는 컴퓨터 판독가능 매체.
  10. 주변 장치로부터 스위치 계층으로의 제1 경로로부터, 네트워크 스택의 복수의 소프트웨어 계층을 통해 상기 주변 장치로부터 상기 스위치 계층으로의 제2 경로로, 오프로드된 네트워크 스택 상태 객체 및 적어도 하나의 연관된 프로토콜을 업로드하는 방법-상기 복수의 소프트웨어 계층은 중간 계층을 포함하고, 상기 네트워크 스택 상태 객체는 캐시 상태 변수 및 위임 상태 변수를 가짐-으로서,
    상기 주변 장치가 전송 상태를 갖는 미해결 요청들(outstanding requests)을 완료하는 단계;
    상기 위임 상태 변수의 값을 상기 주변 장치로부터 상기 스위치 계층으로 전달하는 단계-상기 위임 상태 변수의 값은 상기 네트워크 스택 상태 객체의 오프로드를 통해 상기 주변 장치에 의해 제어됨-;
    상기 중간 계층에 대한 상기 주변 장치의 자원들을 프리(free)로 하는 단계; 및
    상기 위임 상태 변수의 값과 상기 캐시 상태 변수의 값에 적어도 부분적으로 기초하여 상기 제2 경로를 통해 데이터를 전송하는 단계-상기 캐시 상태 변수의 값은 상기 네트워크 스택 상태 객체의 오프로드를 통해 상기 중간 계층에 의해 제어됨-
    를 포함하는 업로드 방법.
  11. 제10항에 있어서, 상기 오프로드된 네트워크 스택 상태 객체 및 상기 적어도 하나의 연관된 프로토콜의 업로드를 개시하는 단계를 더 포함하는 업로드 방법.
  12. 제10항에 있어서, 상기 복수의 계층은 네트워크 계층을 포함하고, 상기 주변 장치는 네트워크 위임 상태를 가지며, 상기 업로드 방법은,
    상기 전송 계층으로부터의 모든 오프로드된 연결들이 업로드되었다면 상기 네트워크 위임 상태를 상기 네트워크 계층에 전송하는 단계
    를 더 포함하는 업로드 방법.
  13. 제10항에 있어서, 상기 복수의 계층은 프레이밍 계층을 포함하고, 상기 주변 장치는 프레이밍 위임 상태를 가지며, 상기 업로드 방법은,
    상기 네트워크 계층으로부터의 모든 오프로드된 연결들이 업로드되었다면 상기 프레이밍 위임 상태를 상기 프레이밍 계층으로 전송하는 단계
    를 더 포함하는 업로드 방법.
  14. 제10항에 있어서, 상기 업로드가 시작되어야 하는지를 판정하는 단계를 더 포함하는 업로드 방법.
  15. 제14항에 있어서, 상기 업로드가 시작되어야 하는지를 판정하는 단계는,
    상기 스위치 계층으로부터 상기 주변 장치로 전달되는 데이터량이 최대 임계치를 초과하는지를 판정하는 단계;
    상기 오프로드된 네트워크 스택 연결 내에 동작 결여가 있는지를 판정하는 단계;
    상기 주변 장치가 소정의 기능을 처리할 수 없는지를 판정하는 단계;
    연결 동작이 오프로드에 적합하지 않은지를 판정하는 단계;
    주변 장치 자원 이용가능성이 임계치 미만인 경우, 업로드가, 상기 오프로드된 네트워크 스택 상태 객체의 우선순위보다 높은 우선순위를 갖는 상태 객체들이 주변 장치 자원들을 사용하도록 할 것인지를 판정하는 단계;
    어플리케이션이 프리포스팅 버퍼가 아닌지를 판정하는 단계; 및
    상기 주변 장치로 전달되는 데이터량이 최대 대역폭을 초과하는지를 판정하는 단계
    중 적어도 어느 한 단계를 포함하는 업로드 방법.
  16. 제10항의 업로드 방법을 수행하기 위한 컴퓨터 실행가능한 명령어들을 갖는 컴퓨터 판독가능 매체.
  17. 제16항에 있어서, 상기 업로드가 시작되어야 하는지를 판정하는 단계를 포함하는 단계를 수행하기 위한 컴퓨터 실행가능한 명령어들을 더 가지며, 상기 업로드가 시작되어야 하는지를 판정하는 단계는,
    상기 스위치 계층으로부터 상기 주변 장치로 전달되는 데이터량이 최대 임계치를 초과하는지를 판정하는 단계;
    상기 오프로드된 네트워크 스택 연결 내에 동작 결여가 있는지를 판정하는 단계;
    상기 주변 장치가 소정의 기능을 처리할 수 없는지를 판정하는 단계;
    연결 동작이 오프로드에 적합하지 않은지를 판정하는 단계;
    주변 장치 자원 이용가능성이 임계치 미만인 경우, 업로드가, 상기 오프로드된 네트워크 스택 상태 객체의 우선순위보다 높은 우선순위를 갖는 상태 객체들이 주변 장치 자원들을 사용하도록 할 것인지를 판정하는 단계;
    어플리케이션이 프리포스팅 버퍼가 아닌지를 판정하는 단계; 및
    상기 주변 장치로 전달되는 데이터량이 최대 대역폭을 초과하는지를 판정하는 단계
    중 적어도 어느 한 단계를 포함하는 컴퓨터 판독가능 매체.
  18. 호스트와, 복수의 소프트웨어 계층을 갖는, 호스트 내의 주변 장치 사이에 오프로드된 네트워크 스택 상태 객체를 동기화시키기 위한 방법-상기 복수의 소프트웨어 계층 각각은 적어도 하나의 상태 변수를 가짐-으로서,
    상기 복수의 소프트웨어 계층 내의 각각의 소프트웨어 계층에 대해,
    적어도 하나의 상태 변수를, 고정 변수, 캐시 변수, 및 위임 변수 중 하나로 분류하는 단계;
    상기 적어도 하나의 상태 변수를 상기 주변 장치로 전송하는 단계;
    상기 네트워크 스택 상태 객체가 오프로드된 동안에, 상기 적어도 하나의 상태 변수가 캐시 변수로 분류된 경우, 상기 호스트에 의해 상기 캐시 변수의 값을 제어하는 단계; 및 상기 캐시 변수가 변화된 경우 상기 호스트가 상기 주변 장치 내의 상기 캐시 변수의 값의 업데이트를 제어하는 단계; 및
    상기 네트워크 스택 상태 객체가 오프로드된 동안에, 상기 적어도 하나의 상태 변수가 위임 변수로 분류된 경우, 상기 주변 장치에 의해 적어도 하나의 상태 변수의 값을 제어하는 단계; 및 상기 적어도 하나의 상태 변수의 값을 변경하는 단계
    를 포함하는 동기화 방법.
  19. 제18항에 있어서, 상기 복수의 소프트웨어 계층중 하나는 전송 계층이고, 상기 적어도 하나의 상태 변수는 고정 변수로서 분류되고, 상기 적어도 하나의 상태 변수는 목적지 포트, 소스 포트, 윈도우 스케일 인자(window scale factor), 및 오프로드 핸들(offload handle) 중 적어도 하나를 포함하는 동기화 방법.
  20. 제18항에 있어서, 상기 복수의 소프트웨어 계층 중 하나는 네트워크 계층이며, 상기 적어도 하나의 상태 변수는 고정 변수로서 분류되고, 상기 적어도 하나의 상태 변수는 목적지 IP 어드레스와 소스 IP 어드레스 중 적어도 하나를 포함하는 동기화 방법.
  21. 제18항에 있어서, 상기 복수의 소프트웨어 계층 중 하나는 TCP 계층이며, 상기 적어도 하나의 상태 변수는 캐시 변수로서 분류되고, 상기 적어도 하나의 상태 변수는 TCP 변수 및 IP 변수 중 적어도 하나를 포함하는 동기화 방법.
  22. 제18항에 있어서, 상기 복수의 소프트웨어 계층 중 하나는 네트워크 계층이며, 상기 적어도 하나의 상태 변수는 캐시 변수로서 분류되고, 상기 적어도 하나의 상태 변수는 오프로드 핸들을 포함하는 동기화 방법.
  23. 제18항에 있어서, 상기 복수의 소프트웨어 계층 중 하나는 프레이밍 계층이며, 상기 적어도 하나의 상태 변수는 캐시 변수로서 분류되고, 상기 적어도 하나의 상태 변수는 ARP 어드레스를 포함하는 동기화 방법.
  24. 제18항에 있어서, 상기 복수의 소프트웨어 계층 중 하나는 IP 보안 계층이며, 상기 고정 변수는 소스 포트, 목적지 포트, 프로토콜 타입, 및 보안 어소시에이션 변수들(security association variables) 중 적어도 하나를 포함하는 동기화 방법.
  25. 제18항에 있어서, 상기 복수의 소프트웨어 계층 중 하나는 IP 보안 계층이며, 상기 캐시 변수는 바이트 카운트 상의 리키(rekey), 바이트 카운트 상의 중단, 소정의 틱(tick)에서의 리키, 소정의 틱에서의 중단, 및 보안 어소시에이션이 사용될 수 있는 최대 휴지 시간 중 적어도 하나를 포함하는 동기화 방법.
  26. 제18항에 있어서, 상기 복수의 소프트웨어 계층 중 하나는 TCP 계층이며, 상기 적어도 하나의 상태 변수는 위임 변수로서 분류되고, 상기 적어도 하나의 상태 변수는, 현재의 TCP 상태, 수신 윈도우 크기, 다음의 RECV에 대한 시퀀스 넘버, 최대 전송 윈도우, 현재의 혼잡 윈도우(congestion window), 전송된 최대 시퀀스 넘버, 및 다음의 SEND에 대한 시퀀스 넘버 중 적어도 하나를 포함하는 동기화 방법.
  27. 제18항에 있어서, 상기 복수의 소프트웨어 계층 중 하나는 네트워크 계층이며, 상기 적어도 하나의 상태 변수는 위임 변수로서 분류되고, 상기 적어도 하나의 상태 변수는 IP 패킷 id 시작값을 포함하는 동기화 방법.
  28. 제18항에 있어서, 상기 복수의 소프트웨어 계층 중 하나는 IP 보안 계층이며, 상기 위임 변수는, 보안 어소시에이션으로 암호화 또는 암호해제된 바이트의 카운트, 상기 보안 어소시에이션의 수명, 및 상기 보안 어소시에이션의 휴지 시간 중 적어도 하나를 포함하는 동기화 방법.
  29. 제18항의 동기화 방법을 수행하기 위한 컴퓨터 실행가능한 명령어들을 갖는 컴퓨터 판독가능 매체.
  30. 제29항에 있어서,
    상기 주변 장치에 의해 각각의 위임 변수를 프로세싱하는 단계; 및
    각각의 캐시 변수에 대해, 상기 캐시 변수가 변화된 경우 상기 캐시 변수를 업데이트하는 단계
    를 포함하는 단계들을 수행하기 위한 컴퓨터 실행가능한 명령어들을 더 구비한 컴퓨터 판독가능 매체.
  31. 호스트 장치와 다른 장치 사이의 연결을 위해, 상기 호스트 장치상의 프로세싱 유닛과 주변 장치 사이의 연결 상태의 제어를 공유하는 방법으로서,
    (A) 상기 연결을 오프로드하는 단계-상기 연결을 오프로드하는 단계는, 상기 프로세싱 유닛으로부터 상기 주변 장치로의 연결을 위한 적어도 하나의 네트워크 스택 동작의 제어를 오프로드하는 단계를 포함함-;
    (B) 상기 제어가 오프로드되는 동안에, 상기 주변 장치가 상기 연결의 적어도 하나의 제1 상태 변수의 값을 배타적으로 제어하는 단계; 및
    (C) 상기 제어가 오프로드되는 동안에, 상기 프로세싱 유닛이 상기 연결의 적어도 하나의 제2 상태 변수의 값을 배타적으로 제어하는 단계
    를 포함하는 공유 방법.
  32. 제31항에 있어서, 상기 연결을 위한 네트워크 스택은 복수의 계층을 갖고, 상기 적어도 하나의 제2 상태 변수 및 상기 적어도 하나의 제1 상태 변수는 상기 네트워크 스택의 동일한 계층에 대응하는 상태 변수인 공유 방법.
  33. 제31항에 있어서,
    (D) 상기 연결이 오프로드되는 동안에, 상기 주변 장치가 상기 적어도 하나의 제1 상태 변수의 값을 변화시키는 단계; 및
    (E) 상기 주변 장치로부터 상기 프로세싱 유닛으로의 연결을 업로드하는 단계-상기 주변 장치로부터 상기 프로세싱 유닛으로의 연결을 업로드하는 단계는, 상기 주변 장치가 상기 프로세싱 유닛에 상기 적어도 하나의 제1 상태 변수의 변화된 값을 전달하는 단계를 포함함-
    를 더 포함하는 공유 방법.
  34. 제31항에 있어서, 상기 단계 (C)는 상기 연결이 오프로드되는 동안에, 상기 프로세싱 유닛이 상기 주변 장치에 상기 적어도 하나의 제2 상태 변수의 값의 임의의 변화를 전달하는 단계를 포함하는 공유 방법.
  35. 제31항에 있어서,
    (D) 상기 단계 (B)의 수행에 앞서, 상기 연결의 상기 적어도 하나의 제1 상태 변수를 위임 상태 변수로 지정하는 단계를 더 포함하는 공유 방법.
  36. 제31항에 있어서,
    (D) 상기 단계 (C)의 수행에 앞서, 상기 연결의 상기 적어도 하나의 제2 상태 변수를 캐시 상태 변수로 지정하는 단계를 더 포함하는 공유 방법.
  37. 호스트 장치와 다른 장치 사이의 연결을 제어하는 방법-상기 연결은 상기 호스트 장치상의 프로세싱 유닛에 의해 처리됨-으로서,
    (A) 상기 연결의 적어도 하나의 상태 변수를 위임 상태 변수로서 지정하는 단계;
    (B) 상기 연결의 적어도 하나의 상태 변수를 캐시 상태 변수로서 지정하는 단계;
    (C) 상기 연결을 오프로드하는 단계-상기 연결을 오프로드하는 단계는, 상기 프로세싱 유닛으로부터 주변 장치로의 연결을 위해 적어도 하나의 네트워크 스택 동작의 제어를 오프로드하는 단계를 포함함-;
    (D) 상기 연결이 오프로드되는 동안에, 상기 프로세싱 유닛이 상기 주변 장치에 상기 적어도 하나의 캐시 상태 변수의 값의 임의의 변화를 전달하는 단계; 및
    (E) 상기 연결이 오프로드되는 동안에, 상기 주변 장치가 상기 적어도 하나의 위임 변수의 값의 임의의 변화를 제어하는 단계
    를 포함하는 제어 방법.
  38. 제37항에 있어서,
    (F) 상기 주변 장치로부터 상기 프로세싱 유닛으로의 연결을 업로드하는 단계-상기 업로드하는 단계는, 상기 주변 장치가 상기 적어도 하나의 위임 상태 변수의 값을 상기 프로세싱 유닛에 전달하는 단계를 포함함-를 더 포함하는 제어 방법.
  39. 제37항에 있어서, 상기 연결을 위한 네트워크 스택은 복수의 계층을 포함하고, 상기 적어도 하나의 위임 상태 변수 및 상기 적어도 하나의 캐시 상태 변수는 상기 네트워크 스택의 동일한 계층에 대응하는 상태 변수인 제어 방법.
  40. 삭제
  41. 삭제
  42. 삭제
  43. 삭제
  44. 삭제
KR1020030026310A 2002-04-30 2003-04-25 네트워크 스택으로 오프로딩된 네트워크 스택 연결을 동기화 및 업로딩하는 방법, 공유 방법, 제어 방법, 및 컴퓨터 판독가능 매체 KR100938519B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/135,630 2002-04-30
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 (2)

Publication Number Publication Date
KR20030085484A KR20030085484A (ko) 2003-11-05
KR100938519B1 true KR100938519B1 (ko) 2010-01-25

Family

ID=29249503

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020030026310A KR100938519B1 (ko) 2002-04-30 2003-04-25 네트워크 스택으로 오프로딩된 네트워크 스택 연결을 동기화 및 업로딩하는 방법, 공유 방법, 제어 방법, 및 컴퓨터 판독가능 매체

Country Status (12)

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

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200061286A (ko) * 2018-11-23 2020-06-02 한국과학기술원 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버

Families Citing this family (102)

* 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
US6226680B1 (en) 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
US8782199B2 (en) * 1997-10-14 2014-07-15 A-Tech Llc Parsing a packet header
US6697868B2 (en) * 2000-02-28 2004-02-24 Alacritech, Inc. Protocol processing stack for use with intelligent network interface 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
US8539112B2 (en) 1997-10-14 2013-09-17 Alacritech, Inc. TCP/IP offload device
US8621101B1 (en) 2000-09-29 2013-12-31 Alacritech, Inc. Intelligent network storage interface device
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
WO2002084499A1 (en) 2001-04-11 2002-10-24 Chelsio Communications, Inc. Multi-purpose switching network interface controller
US8218555B2 (en) 2001-04-24 2012-07-10 Nvidia Corporation Gigabit ethernet adapter
US7239636B2 (en) 2001-07-23 2007-07-03 Broadcom Corporation Multiple virtual channels for use in network devices
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
US7411959B2 (en) 2002-08-30 2008-08-12 Broadcom Corporation System and method for handling out-of-order frames
US8180928B2 (en) 2002-08-30 2012-05-15 Broadcom Corporation Method and system for supporting read operations with CRC for iSCSI and iSCSI chimney
US7313623B2 (en) 2002-08-30 2007-12-25 Broadcom Corporation System and method for TCP/IP offload independent of bandwidth delay product
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
US8285881B2 (en) * 2003-09-10 2012-10-09 Broadcom Corporation System and method for load balancing and fail over
US7526577B2 (en) * 2003-09-19 2009-04-28 Microsoft Corporation Multiple offload of network state objects with support for failover events
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 삼성전자주식회사 링크 로컬 주소를 가지는 시스템에서 외부 시스템과통신하는 방법 및 장치
US7945705B1 (en) 2004-05-25 2011-05-17 Chelsio Communications, Inc. Method for using a protocol language to avoid separate channels for control messages involving encapsulated payload data messages
DE602005021487D1 (de) * 2004-06-17 2010-07-08 Broadcom Corp Verfahren und system zum unterstützen von leseoperationen für iscsi- und iscsi-chimney
US7533176B2 (en) * 2004-07-14 2009-05-12 International Business Machines Corporation Method for supporting connection establishment in an offload of network protocol processing
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
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
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
US7660306B1 (en) 2006-01-12 2010-02-09 Chelsio Communications, Inc. Virtualizing the operation of intelligent network interface circuitry
US7660264B1 (en) 2005-12-19 2010-02-09 Chelsio Communications, Inc. Method for traffic schedulign in intelligent network interface circuitry
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
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
US8589587B1 (en) 2007-05-11 2013-11-19 Chelsio Communications, Inc. Protocol offload in intelligent network adaptor, including application level signalling
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
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
US20110258337A1 (en) * 2008-08-04 2011-10-20 Zte Corporation Method and system for enabling zero-copy transmission of streaming media data
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
KR101145385B1 (ko) 2010-05-31 2012-05-15 (주)이앤비소프트 단축 명령을 통한 데이터 업로드 방법
WO2011152593A1 (en) * 2010-05-31 2011-12-08 Hyo-Hwan Bae Data upload method using shortcut
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
US10237206B1 (en) 2017-03-05 2019-03-19 Barefoot Networks, Inc. Equal cost multiple path group failover for multicast
US10404619B1 (en) 2017-03-05 2019-09-03 Barefoot Networks, Inc. Link aggregation 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
CN110113407B (zh) * 2019-04-30 2021-08-17 上海连尚网络科技有限公司 小程序状态同步方法、设备和计算机存储介质
CN113728596A (zh) 2019-05-23 2021-11-30 慧与发展有限责任合伙企业 在网络接口控制器(nic)中促进对幂等操作进行高效管理的系统和方法
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 Российская Федерация, от имени которой выступает ФОНД ПЕРСПЕКТИВНЫХ ИССЛЕДОВАНИЙ Модель бортового вычислителя авиационного средства поражения

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999064952A1 (en) 1998-06-12 1999-12-16 Microsoft Corporation Method and computer program product for offloading processing tasks from software to hardware
KR20010085582A (ko) * 1998-08-28 2001-09-07 추후제출 지능망 인터페이스 장치 및 통신 가속 시스템
US20010027496A1 (en) 1997-10-14 2001-10-04 Alacritech, Inc. Passing a communication control block to a local device such that a message is processed on the device
WO2002027519A1 (en) 2000-09-29 2002-04-04 Alacritech, Inc. Intelligent network storage interface system and devices

Family Cites Families (14)

* 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
EP0848563A3 (en) * 1996-12-11 2000-01-05 Texas Instruments Incorporated Improvements in or relating to telecommunication systems
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US6427171B1 (en) * 1997-10-14 2002-07-30 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US6697868B2 (en) * 2000-02-28 2004-02-24 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US7133940B2 (en) 1997-10-14 2006-11-07 Alacritech, Inc. Network interface device employing a DMA command queue
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
US6591302B2 (en) * 1997-10-14 2003-07-08 Alacritech, Inc. Fast-path apparatus for receiving data corresponding to a TCP connection
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
JP2001230812A (ja) * 2000-02-14 2001-08-24 Hitachi Ltd 通信開始処理をオフロードするネットワーク接続装置およびそれを用いた方法
US7007103B2 (en) * 2002-04-30 2006-02-28 Microsoft Corporation Method to offload a network stack

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010027496A1 (en) 1997-10-14 2001-10-04 Alacritech, Inc. Passing a communication control block to a local device such that a message is processed on the device
WO1999064952A1 (en) 1998-06-12 1999-12-16 Microsoft Corporation Method and computer program product for offloading processing tasks from software to hardware
KR20010085582A (ko) * 1998-08-28 2001-09-07 추후제출 지능망 인터페이스 장치 및 통신 가속 시스템
WO2002027519A1 (en) 2000-09-29 2002-04-04 Alacritech, Inc. Intelligent network storage interface system and devices

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200061286A (ko) * 2018-11-23 2020-06-02 한국과학기술원 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버
KR102151987B1 (ko) 2018-11-23 2020-09-04 한국과학기술원 프록시 서버에서 프록시 서버 기능을 호스트에서 네트워크 어댑터로 동적으로 이양하는 방법 및 이를 수행하는 프록시 서버

Also Published As

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

Similar Documents

Publication Publication Date Title
KR100938519B1 (ko) 네트워크 스택으로 오프로딩된 네트워크 스택 연결을 동기화 및 업로딩하는 방법, 공유 방법, 제어 방법, 및 컴퓨터 판독가능 매체
US7590755B2 (en) Method to offload a network stack
US7526577B2 (en) Multiple offload of network state objects with support for failover events
JP5025941B2 (ja) 統合ホストプロトコルスタック管理を使用するセキュアなインターネットプロトコル(ipsec)オフロードのための方法および装置
EP1494426B1 (en) Secure network processing
US7685287B2 (en) Method and system for layering an infinite request/reply data stream on finite, unidirectional, time-limited transports
JP2005529523A (ja) Iscsiおよびipsecプロトコルをサポートするギガビットイーサネットアダプタ
JP4658546B2 (ja) フェイルオーバーイベントをサポートするネットワーク状態オブジェクトの多重オフロード
EP3539235B1 (en) Systems, apparatuses and methods for cooperating routers

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee