넷 링 소개
NET_RING 개요
NET_RING NetAdapterCx와 클라이언트 드라이버 간에 공유되는 네트워크 데이터의 순환 버퍼입니다. 클라이언트 드라이버의 모든 패킷 큐에는 코어 패킷 설명자를 위한 패킷 링 과 각 패킷의 조각 설명자에 대한 조각 링 이라는 두 개의 링이 있습니다.
패킷 설명자에 대한 자세한 내용은 패킷 설명자 및 확장을 참조하세요.
패킷 링의 모든 코어 설명자에는 해당 패킷의 조각 설명자를 찾기 위한 조각 링에 인덱스가 있습니다. 또 다른 데이터 구조인 NET_RING_COLLECTION 다음 다이어그램과 같이 지정된 패킷 큐에 대해 패킷 링과 조각 링을 그룹화합니다.
모든 패킷 큐에는 고유한 NET_RING_COLLECTION 구조가 있으며, 따라서 해당 링의 자체 패킷 링, 조각 링 및 설명자가 있습니다. 따라서 각 패킷 큐의 네트워크 데이터 전송 작업은 완전히 독립적입니다. 패킷 큐에 대한 자세한 내용은 큐 전송 및 받기를 참조하세요.
요소 소유권 NET_RING
NET_RING 각 요소는 클라이언트 드라이버 또는 NetAdapterCx가 소유합니다. 소유권은 NET_RING 섹션을 표시하는 세 개의 인덱스에 의해 제어됩니다. 이러한 인덱스는 다음 표에 설명되어 있습니다. 이러한 인덱스를 이동하는 행위는 포스트 및 드레이닝 의미 체계에 의해 설명됩니다.
인 덱스 이름 NET_RING | Description | 네트워크 데이터 전송에 필요 | 수정한 사람 |
---|---|---|---|
BeginIndex | NIC 클라이언트 드라이버가 소유한 NET_RING 요소 범위의 시작입니다. BeginIndex는 NET_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인 요소의 세 가지 요소를 소유합니다.
BeginIndex가 EndIndex와 같으면 클라이언트 드라이버는 요소를 소유하지 않습니다.
NetAdapterCx는 EndIndex를 증가시켜 요소를 링 버퍼에 게시합니다. 클라이언트 드라이버는 버퍼를 드레이닝하고 BeginIndex를 진행하여 요소의 소유권을 반환합니다.
NextIndex 는 클라이언트 드라이버가 사용할 선택 사항이며, 링의 클라이언트 드라이버 섹션의 포스트 및 드레이닝 하위 섹션을 분리하는 데 편의를 위해 제공됩니다.
NextIndex와 EndIndex 사이의 인덱스 값이 있는 요소 - 1 포괄 요소는 클라이언트가 소유하지만 아직 하드웨어에 게시되지 않았습니다. NextIndex가 BeginIndex와 같으면 클라이언트 드라이버에 OS로 전송할 완료된 버퍼가 없습니다. NextIndex가 EndIndex와 같으면 클라이언트 드라이버에 하드웨어에 게시할 버퍼가 없습니다.
넷 링이 순환이므로 결국 인덱스 값은 버퍼의 끝을 감싸고 다시 시작 부분으로 돌아갑니다. NetAdapterCx는 클라이언트 드라이버가 적절한 메서드를 호출할 때 인덱스 값을 링 주위에 래핑하는 것을 자동으로 처리합니다.
넷 링에서 요소를 관리하는 방법에 대한 자세한 내용은 Net 링 요소 관리를 참조하세요.
Net 링으로 네트워크 데이터 보내기 및 받기
네트워크 데이터를 net 링으로 보내고 회수하는 방법에 대한 자세한 내용 및 코드 샘플은 다음 topics 참조하세요.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기