넷 링 소개

NET_RING 개요

NET_RING NetAdapterCx와 클라이언트 드라이버 간에 공유되는 네트워크 데이터의 순환 버퍼입니다. 클라이언트 드라이버의 모든 패킷 큐에는 코어 패킷 설명자를 위한 패킷 링 과 각 패킷의 조각 설명자에 대한 조각 링 이라는 두 개의 링이 있습니다.

패킷 설명자에 대한 자세한 내용은 패킷 설명자 및 확장을 참조하세요.

패킷 링의 모든 코어 설명자에는 해당 패킷의 조각 설명자를 찾기 위한 조각 링에 인덱스가 있습니다. 또 다른 데이터 구조인 NET_RING_COLLECTION 다음 다이어그램과 같이 지정된 패킷 큐에 대해 패킷 링과 조각 링을 그룹화합니다.

패킷 링 및 조각 링을 포함하여 NET_RING_COLLECTION 구조체의 다중 링 레이아웃을 보여 주는 다이어그램

모든 패킷 큐에는 고유한 NET_RING_COLLECTION 구조가 있으며, 따라서 해당 링의 자체 패킷 링, 조각 링 및 설명자가 있습니다. 따라서 각 패킷 큐의 네트워크 데이터 전송 작업은 완전히 독립적입니다. 패킷 큐에 대한 자세한 내용은 큐 전송 및 받기를 참조하세요.

요소 소유권 NET_RING

NET_RING 각 요소는 클라이언트 드라이버 또는 NetAdapterCx가 소유합니다. 소유권은 NET_RING 섹션을 표시하는 세 개의 인덱스에 의해 제어됩니다. 이러한 인덱스는 다음 표에 설명되어 있습니다. 이러한 인덱스를 이동하는 행위는 포스트드레이닝 의미 체계에 의해 설명됩니다.

덱스 이름 NET_RING Description 네트워크 데이터 전송에 필요 수정한 사람
BeginIndex NIC 클라이언트 드라이버가 소유한 NET_RING 요소 범위의 시작입니다. BeginIndexNET_RING드레이닝 하위 섹션의 시작 부분이기도 합니다. BeginIndex가 증가하면 드라이버는 링에서 요소를 드레이닝하고 소유권을 OS로 전송합니다. NIC 클라이언트 드라이버
NextIndex NET_RING사후 하위 섹션의 시작 부분입니다. NextIndex 는 클라이언트 드라이버가 소유한 링의 섹션을 포스트 및 드레이닝 하위 섹션으로 나눕니다. NextIndex가 증가하면 드라이버는 버퍼를 하드웨어에 게시하고 버퍼를 링의 드레이닝 섹션으로 전송합니다. 아니요 NIC 클라이언트 드라이버
EndIndex 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 링으로 네트워크 데이터 보내기 및 받기

네트워크 데이터를 net 링으로 보내고 회수하는 방법에 대한 자세한 내용 및 코드 샘플은 다음 topics 참조하세요.

Net 링으로 네트워크 데이터 보내기

Net 링으로 네트워크 데이터 수신