Net 링 소개
NET_RING 개요
NET_RING NetAdapterCx와 클라이언트 드라이버 간에 공유되는 네트워크 데이터의 순환 버퍼입니다. 클라이언트 드라이버의 모든 패킷 큐에는 코어 패킷 설명자에 대한 패킷 링과 각 패킷의 조각 설명자에 대한 조각 링이라는 두 개의 링 이 있습니다.
패킷 설명자에 대한 자세한 내용은 패킷 설명자 및 확장을 참조 하세요.
패킷 링의 모든 코어 설명자에는 해당 패킷의 조각 설명자를 찾기 위한 인덱스가 조각 링에 있습니다. 다른 데이터 구조인 NET_RING_COLLECTION 다음 다이어그램과 같이 지정된 패킷 큐에 대해 패킷 링과 조각 링을 함께 그룹화합니다.
모든 패킷 큐에는 고유한 NET_RING_COLLECTION 구조가 있으며, 따라서 해당 링의 자체 패킷 링, 조각 링 및 설명자가 있습니다. 따라서 각 패킷 큐의 네트워크 데이터 전송 작업은 완전히 독립적입니다. 패킷 큐에 대한 자세한 내용은 전송 및 수신 큐를 참조 하세요.
요소 소유권 NET_RING
NET_RING 각 요소는 클라이언트 드라이버 또는 NetAdapterCx에서 소유합니다. 소유권은 NET_RING 섹션을 표시하는 세 개의 인덱스로 제어됩니다. 이러한 인덱스는 다음 표에 설명되어 있습니다. 이러한 인덱스를 이동하는 행위는 포스트 및 드레이닝 의미 체계에 의해 설명됩니다.
NET_RING 인덱스 이름 | 설명 | 네트워크 데이터를 전송하는 데 필요 | 수정한 사람 |
---|---|---|---|
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 Ring에서 요소를 관리하는 방법에 대한 자세한 내용은 Net 링 요소 관리를 참조하세요.
네트워크 링을 사용하여 네트워크 데이터 보내기 및 받기
네트워크 데이터를 순 링으로 보내고 받는 방법에 대한 자세한 내용 및 코드 샘플은 다음 항목을 참조하세요.