TCP_OFFLOAD_STATE_DELEGATED 구조체(ndischimney.h)

[TCP 굴뚝 오프로드 기능은 더 이상 사용되지 않으며 사용하면 안 됩니다.]

TCP_OFFLOAD_STATE_DELEGATED 구조체에는 TCP 연결 상태 개체의 위임된 변수가 포함됩니다.

구문

typedef struct _TCP_OFFLOAD_STATE_DELEGATED {
  OFFLOAD_STATE_HEADER         Header;
  TCP_OFFLOAD_CONNECTION_STATE State;
  USHORT                       Flags;
  ULONG                        RcvNxt;
  ULONG                        RcvWnd;
  ULONG                        SndUna;
  ULONG                        SndNxt;
  ULONG                        SndMax;
  ULONG                        SndWnd;
  ULONG                        MaxSndWnd;
  ULONG                        SendWL1;
  ULONG                        CWnd;
  ULONG                        SsThresh;
  USHORT                       SRtt;
  USHORT                       RttVar;
  ULONG                        TsRecent;
  ULONG                        TsRecentAge;
  ULONG                        TsTime;
  ULONG                        TotalRT;
  UCHAR                        DupAckCount;
  UCHAR                        SndWndProbeCount;
  struct {
    UCHAR ProbeCount;
    ULONG TimeoutDelta;
  } KeepAlive;
  struct {
    UCHAR Count;
    ULONG TimeoutDelta;
  } Retransmit;
  union {
    struct {
      PNET_BUFFER_LIST SendDataHead;
      PNET_BUFFER_LIST SendDataTail;
    };
    ULONG SendBacklogSize;
  };
  union {
    PNET_BUFFER_LIST BufferedData;
    ULONG            ReceiveBacklogSize;
  };
  ULONG                        DWnd;
} TCP_OFFLOAD_STATE_DELEGATED, *PTCP_OFFLOAD_STATE_DELEGATED;

멤버

Header

OFFLOAD_STATE_HEADER 구조체입니다. NDIS는 HeaderLength 멤버를 TCP_OFFLOAD_STATE_DELEGATED 구조체의 크기(바이트)로 설정합니다. HeaderRecognizedOptions 멤버가 예약되어 있습니다.

State

TCP 연결의 현재 상태(RFC 793 참조)는 다음 TCP_OFFLOAD_CONNECTION_STATE 값 중 하나입니다.

TcpConnectionClosed

연결 상태가 없습니다.

TcpConnectionListen

원격 TCP 및 포트에서 연결 요청을 기다리는 중입니다.

TcpConnectionSynSent

연결 요청을 보낸 후 일치하는 연결 요청을 기다리는 중입니다.

TcpConnectionSynRcvd

연결 요청을 받고 보낸 후 연결 요청 확인을 기다리는 중입니다.

TcpConnectionEstablished

열린 연결: 수신된 데이터를 사용자에게 전달할 수 있습니다. 연결의 데이터 전송 단계에 대한 정상 상태입니다.

TcpConnectionFinWait1

원격 TCP의 연결 종료 요청 또는 이전에 전송된 연결 종료 요청의 승인을 기다리는 중입니다.

TcpConnectionFinWait2

원격 TCP에서 연결 종료 요청을 기다리는 중입니다.

TcpConnectionCloseWait

로컬 사용자의 연결 종료 요청을 기다리는 중입니다.

TcpConnectionClosing

원격 TCP에서 연결 종료 요청 승인을 기다리는 중입니다.

TcpConnectionLastAck

이전에 원격 TCP로 전송된 연결 종료 요청의 승인을 기다리는 중입니다. 여기에는 연결 종료 요청의 승인이 포함됩니다.

TcpConnectionTimeWait

원격 TCP가 연결 종료 요청의 승인을 받았는지 확인하기 위해 충분한 시간이 경과할 때까지 대기합니다.

연결이 TcpConnectionClosed, TcpConnectionListen, TcpConnectionSynRcvd를 제외한 모든 상태에 있는 경우 호스트 스택이 TCP 연결을 오프로드할 수 있습니다.

TcpConnectionSynSent 또는 TcpConnectionTimeWait 상태입니다. 호스트 스택은 연결 상태에 관계없이 TCP 연결을 쿼리, 업데이트, 무효화 또는 종료할 수 있습니다.

Flags

시스템에서 사용하도록 예약되었습니다.

RcvNxt

다음 수신 세그먼트의 시퀀스 번호입니다(RCV 참조). RFC 793의 다음).

RcvWnd

수신 창 크기(바이트)입니다(RCV 참조). RFC 793의 WND).

SndUna

승인되지 않은 데이터의 첫 번째 바이트에 대한 시퀀스 번호입니다(SND 참조). RFC 793의 UNA). 자세한 내용은 재전송할 데이터가 포함된 데이터 보내기를 참조하세요.

SndNxt

연결에서 보낼 다음 바이트의 시퀀스 번호입니다(SND 참조). RFC 793의 NXT). 자세한 내용은 재전송할 데이터가 포함된 데이터 보내기를 참조하세요.

SndMax

연결에서 전송된 최대 시퀀스 번호입니다. 자세한 내용은 재전송할 데이터가 포함된 데이터 보내기를 참조하세요.

SndWnd

송신 창 크기(바이트)입니다(SND 참조). RFC 793의 WND).

MaxSndWnd

최대 송신 창 크기(바이트)입니다(RFC 813 참조).

SendWL1

마지막 창 업데이트에 사용되는 세그먼트 시퀀스 번호입니다(SND 참조). RFC 793의 WL1).

CWnd

정체 창 크기(바이트)입니다(RFC 2581의 cwnd 참조).

SsThresh

느린 시작 임계값(바이트)입니다(RFC 2581의 ssthresh 참조).

SRtt

부드러운 왕복 시간(시계 틱)입니다(RFC 793 및 2988의 SRTT 참조). 연결당 유지 관리되는 이유는 경로, 호스트 및 경우에 따라 애플리케이션 동작을 고려하기 때문입니다.

RttVar

왕복 시간 변형(클록 틱)입니다(RFC 2988의 RTTVAR 참조).

TsRecent

다음 ACK에서 보낼 타임스탬프 값입니다(TS 참조). RFC 1323의 최근 버전)

TsRecentAge

가장 최근 타임스탬프가 수신된 이후의 시간(클록 틱)입니다(RFC 1323 참조).

TsTime

조정된 타임스탬프의 현재 값입니다.

TotalRT

현재 TCP 세그먼트를 다시 전송하는 데 소요된 총 시간(클록 틱)입니다.

DupAckCount

동일한 시퀀스 번호에 대해 허용된 ACK 수입니다(RFC 1323 참조).

SndWndProbeCount

현재 송신 창 프로브 라운드입니다. 송신 창 프로브 라운드에 대한 설명은 타이머 유지를 참조하세요.

KeepAlive

이 멤버는 다음 멤버로 구성된 공용 구조체입니다.

KeepAlive.ProbeCount

응답을 받지 못한 전송된 유지 프로브의 수입니다(RFC 1122 참조).

KeepAlive.TimeoutDelta

남은 시간(클록 틱)은 다음 유지 시간 제한까지입니다(RFC 1122 참조). TCP 연결이 오프로드된 직후 -1 값은 연결이 오프로드되었을 때 keepalive 타이머가 실행되고 있지 않음을 나타냅니다. 오프로드 대상의 keepalive 타이머가 실행되고 있지 않으면 MiniportQueryOffload 함수 또는 MiniportTerminateOffload 함수에 대한 호출에 응답할 때 오프로드 대상은 이 멤버에서 -1을 반환해야 합니다.

Retransmit

이 멤버는 다음 멤버로 구성된 공용 구조체입니다.

Retransmit.Count

전송된 재전송 횟수입니다(RFC 2581 참조).

Retransmit.TimeoutDelta

다음 재전송 시간 제한까지 남은 시간(클록 틱)입니다(RFC 2581 참조). TCP 연결이 오프로드된 직후 -1 값은 연결이 오프로드되었을 때 재전송 타이머가 실행되고 있지 않음을 나타냅니다. 연결이 오프로드되었을 때 연결에 미해결 송신 데이터가 없으므로 재전송 타이머가 실행되고 있지 않습니다. 오프로드 대상의 재전송 타이머가 실행되고 있지 않으면 MiniportQueryOffload 함수 또는 MiniportTerminateOffload 함수에 대한 호출에 응답할 때 오프로드 대상은 이 멤버에서 -1을 반환해야 합니다.

SendDataHead

NET_BUFFER_LIST 구조체에 대한 포인터입니다. 이 NET_BUFFER_LIST 구조체는 의 NetBufferListChain 멤버가 가리키는 연결된 목록에 있습니다. TCP_OFFLOAD_STATE_DELEGATED 구조 바로 앞에 오는 구조체를 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST. NetBufferListChain 포인터가 NULL인 경우 SendDataHead는 중요하지 않습니다.

SendDataHead 포인터는 NET_BUFFER 구조가 연결된 전송 데이터를 버퍼링한 첫 번째 NET_BUFFER_LIST 구조를 가리킵니다.

이 변수는 오프로드 시작 또는 오프로드 종료 작업에서만 사용됩니다. 이 변수를 사용하는 방법에 대한 자세한 내용은 오프로드 작업 중 및 후 미해결 송신 데이터 처리 및 오프로드종료 작업 중 미해결 송신 데이터 처리를 참조하세요.

SendDataTail

NET_BUFFER_LIST 구조체에 대한 포인터입니다. 이 NET_BUFFER_LIST 구조체는 TCP_OFFLOAD_STATE_DELEGATED 구조 바로 앞에 있는 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체의 NetBufferListChain 멤버가 가리키는 연결된 목록에 있습니다. NetBufferListChain 포인터가 NULL인 경우 SendDataTail은 중요하지 않습니다.

SendDataTail 포인터는 NET_BUFFER 구조가 연결된 전송 데이터를 버퍼링한 마지막 NET_BUFFER_LIST 구조를 가리킵니다.

이 변수는 오프로드 시작 또는 오프로드 종료 작업에서만 사용됩니다. 이 변수를 사용하는 방법에 대한 자세한 내용은 오프로드 작업 중 및 후 미해결 송신 데이터 처리 및 오프로드 종료 작업 중 미해결 송신 데이터 처리를 참조하세요.

SendBacklogSize

오프로드 대상은 최적의 성능을 위해 호스트 스택이 오프로드 대상에서 미해결 상태여야 하는 데이터 바이트 수를 나타내기 위해 이 값을 지정합니다. (오프로드 대상에 전달되었지만 오프로드 대상에 의해 아직 완료되지 않은 송신 바이트 수입니다.) 오프로드 대상에서 백로그 보내기 크기를 계산하는 데 사용하는 특정 변수 및 알고리즘은 구현에 따라 다릅니다. 송신 백로그 크기는 연결, 인터페이스 대역폭 및 기타 매개 변수에 대한 RTT(왕복 시간)의 함수일 수 있습니다. 예를 들어 오프로드 대상은 최소 대역폭/지연 제품 및 보급된 수신 창을 사용할 수 있습니다. 그러나 송신 백로그 크기는 현재 연결에 전송하기 위해 게시된 데이터 바이트 수에 따라 달라지지 않습니다.

호스트 스택은 송신 백로그 크기를 얻기 위해 연결에 대한 TCP 위임 상태를 쿼리할 수 있습니다. 또한 오프로드 대상은 를 호출하여 백로그 보내기 크기 변경을 나타낼 수 있습니다. NdisTcpOffloadEventHandler 함수입니다.

오프로드 대상이 send-backlog-size 기능을 지원하지 않는 경우 연결에 대한 TCP 위임 상태를 쿼리할 때 SendBacklogSize 에 0xFFFFFFFF 값을 작성해야 합니다. SendBacklogSize 변수는 오프로드 종료 작업에서 사용되지 않습니다.

BufferedData

버퍼링된 수신 데이터에 대한 포인터입니다. 호스트 스택은 TCP 연결을 오프로드할 때 이러한 데이터를 오프로드 대상에 전달할 수 있습니다. (자세한 내용은 오프로드 작업 중 및 후 버퍼링된 수신 데이터 처리를 참조하세요.) 오프로드 대상은 TCP 연결을 업로드할 때 이러한 데이터를 호스트 스택에 전달할 수 있습니다. 자세한 내용은 오프로드 종료 작업 중 버퍼링된 수신 데이터 처리를 참조하세요.

ReceiveBacklogSize

오프로드 대상은 오프로드된 TCP 연결에 대한 오프로드 대상에 버퍼링된 수신 데이터 바이트 수를 나타내기 위해 이 값을 지정합니다. 호스트 스택은 연결에 대한 TCP 위임 상태를 쿼리하여 이 값을 가져올 수 있습니다. 호스트 스택은 이 값을 사용하여 버퍼링된 모든 데이터를 저장할 수 있을 만큼 큰 연결에 하나 이상의 수신 요청을 게시합니다.

오프로드 대상이 수신 백로그 크기 기능을 지원하지 않는 경우 receiveBacklogSize 에 0xFFFFFFFF 값을 작성해야 합니다.

DWnd

설명

호스트 스택은 이러한 변수를 오프로드 대상에 오프로드할 때 TCP 위임 변수에 대한 초기 값을 제공합니다. 오프로드된 후 TCP 위임 변수는 오프로드 대상에서 소유하고 유지 관리합니다. 오프로드 대상만 오프로드된 TCP 위임 변수의 값을 변경할 수 있습니다. 오프로드 대상은 오프로드된 TCP 위임 변수 값에 대한 변경 내용을 호스트 스택에 알리지 않습니다. 그러나 호스트 스택은 오프로드된 TCP 위임 변수의 값을 쿼리할 수 있으므로 NDIS는 오프로드 대상의 MiniportQueryOffload 함수를 호출합니다. 호스트 스택이 TCP 연결 상태 개체의 오프로드를 종료하는 경우 NDIS가 오프로드 대상을 호출하도록 합니다. MiniportTerminateOffload 함수인 오프로드 대상은 종료된 TCP 연결 상태 개체의 TCP 위임 변수 값을 호스트 스택으로 다시 전달합니다.

오프로드 대상에 전달되면 TCP_OFFLOAD_STATE_DELEGATED 구조가 과 연결됩니다. NDIS_OBJECT_HEADER 구조체로 형식이 지정된 헤더를 포함하는 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체입니다. 이 경우 NDIS_OBJECT_HEADER 구조체의 Revision 멤버는 TCP_OFFLOAD_STATE_DELEGATED 구조체의 수정 번호를 지정합니다.

요구 사항

요구 사항
헤더 ndischimney.h(Ndischimney.h 포함)

추가 정보

MiniportQueryOffload

MiniportTerminateOffload

NDIS_OBJECT_HEADER

OFFLOAD_STATE_HEADER

TCP_OFFLOAD_STATE_CACHED

TCP_OFFLOAD_STATE_CONST