NET_RING 개요
NET_RING NetAdapterCx와 클라이언트 드라이버 간에 공유되는 네트워크 데이터의 순환 버퍼입니다. 클라이언트 드라이버의 모든 패킷 큐에는 코어 패킷 설명자에 대한 패킷 링, 각 패킷의 조각 설명자에 대한 조각 링 두 개의 링이 있습니다.
패킷 설명자에 대한 자세한 내용은 패킷 설명자 및 확장참조하세요.
패킷 링의 모든 코어 설명자에는 해당 패킷의 조각 설명자를 찾기 위한 인덱스가 조각 링에 있습니다. 또 다른 데이터 구조인 NET_RING_COLLECTION다음 다이어그램과 같이 지정된 패킷 큐에 대해 패킷 링과 조각 링을 그룹화합니다.
모든 패킷 큐에는 고유한 NET_RING_COLLECTION 구조가 있으며, 따라서 해당 링의 자체 패킷 링, 조각 링 및 설명자가 있습니다. 따라서 각 패킷 큐의 네트워크 데이터 전송 작업은 완전히 독립적입니다. 패킷 큐에 대한 자세한 내용은 전송 및 수신 큐를 참조하세요.
NET_RING 요소 소유권
NET_RING 각 요소는 클라이언트 드라이버 또는 NetAdapterCx에서 소유합니다. 소유권은 NET_RING섹션을 표시하는 세 개의 인덱스로 제어됩니다. 이러한 인덱스는 다음 표에 설명되어 있습니다. 이러한 인덱스를 이동하는 행위는 게시물 및 소모 의미 체계에 의해 설명됩니다.
| NET_RING 인덱스 이름 | 묘사 | 네트워크 데이터를 전송하는 데 필요 | 수정한 사람: |
|---|---|---|---|
| 시작지수 | NIC 클라이언트 드라이버가 소유하는 NET_RING 요소 범위의 시작입니다. BeginIndex는 NET_RING의 드레인 하위 섹션의 시작이기도 합니다. BeginIndex가 증가될 때, 드라이버는 링에서 요소를 추출하여 해당 요소의 소유권을 OS로 이전합니다. | 예 | NIC 클라이언트 드라이버 |
| 다음 인덱스 | NET_RING의 게시물 하위 섹션의 시작입니다. NextIndex 클라이언트 드라이버가 소유한 링의 섹션을 포스트 및 드레이닝 하위 섹션으로 나눕니다. NextIndex 가 증가하면 드라이버는 버퍼를 하드웨어에 게시하고 버퍼를 링의 배수 섹션으로 전송합니다. | 아니요 | NIC 클라이언트 드라이버 |
| 끝 인덱스 | NIC 클라이언트 드라이버가 소유하는 NET_RING 요소 범위의 끝입니다. 클라이언트 드라이버는 최대 EndIndex - 1 포함 요소를 소유합니다. | 예 | NetAdapterCx |
패킷 큐의 EvtPacketQueueAdvance 콜백 중에 이러한 인덱스를 조작하는 것은 클라이언트 드라이버가 시스템과 NIC(네트워크 인터페이스 카드) 하드웨어 간에 네트워크 데이터를 전송하는 방법입니다.
클라이언트 드라이버는 BeginIndex부터 EndIndex - 1 포함까지 모든 요소를 소유합니다. 예를 들어 BeginIndex 2이고 EndIndex 5이면 클라이언트 드라이버는 인덱스 값이 2, 3 및 4인 요소의 세 가지 요소를 소유합니다.
BeginIndexEndIndex같으면 클라이언트 드라이버는 요소를 소유하지 않습니다.
NetAdapterCx는 요소를 링 버퍼에 게시하기 위해 endIndex을 증가시킵니다. 클라이언트 드라이버는 버퍼를 비우고 BeginIndex앞으로 나아가면서 요소의 소유권을 반환합니다.
NextIndex은 클라이언트 드라이버가 선택적으로 사용할 수 있으며, 이는 링의 클라이언트 드라이버 섹션에서 포스트 및 드레인 하위 섹션을 편리하게 분리할 수 있도록 제공됩니다.
NextIndex 및 EndIndex 사이에 인덱스 값이 있는 요소 - 1 포함)은 클라이언트가 소유하지만 하드웨어에 아직 게시되지 않았습니다. NextIndexBeginIndex동일한 경우 클라이언트 드라이버에는 OS로 전송할 완료된 버퍼가 없습니다. NextIndexEndIndex동일한 경우 클라이언트 드라이버에는 하드웨어에 게시할 버퍼가 없습니다.
넷 링은 원형이므로, 결국 인덱스 값은 버퍼 끝을 감싸서 시작 부분으로 돌아옵니다. NetAdapterCx는 클라이언트 드라이버가 적절한 메서드를 호출할 때 링 주위에 인덱스 값 래핑을 자동으로 처리합니다.
net 링에서 요소를 관리하는 방법에 대한 자세한 내용은 Net 링 요소 관리참조하세요.
네트워크 링을 사용하여 네트워크 데이터 보내기 및 받기
네트워크 데이터를 순 링으로 보내고 받는 방법에 대한 자세한 내용 및 코드 샘플은 다음 항목을 참조하세요.