다음을 통해 공유


이더넷 프레임 보내기

Windows TCP/IP 전송은 이더넷 프레임을 보내기 위한 일련의 요구 사항을 지원합니다. 전송 요청을 시작하거나 오버리싱 드라이버의 송신 요청을 수정하는 모든 드라이버(예: MUX 중간 드라이버 또는 필터 드라이버)는 TCP/IP 전송이 구현하는 요구 사항을 지원해야 합니다.

참고 드라이버 스택의 드라이버가 이러한 요구 사항을 따르지 않는 경우 기본 미니포트 드라이버, MUX 중간 드라이버 및 필터 드라이버가 예측 불가능하게 동작할 수 있습니다.

이더넷 보내기 요청의 경우 드라이버는 다음 요구 사항을 지원해야 합니다.

  • 드라이버가 송신 요청을 시작하는 경우 드라이버는 이더넷 프레임에 대한 NET_BUFFER_LIST 구조를 할당해야 합니다. 각 NET_BUFFER_LIST 구조의 NetBufferListInfo 멤버에는 특정 용도에 필요한 OOB(out-of-band) 데이터가 포함되어야 합니다. OOB 데이터는 NET_BUFFER_LIST 구조와 연결된 모든 NET_BUFFER 구조체에 적용됩니다.

  • 드라이버가 송신 요청을 시작하는 경우 드라이버는 이더넷 프레임에 대해 하나 이상의 NET_BUFFER 구조를 할당하고 이러한 구조를 NET_BUFFER_LIST 구조체에 연결해야 합니다. NET_BUFFER_LIST 구조체에 연결된 각 NET_BUFFER 구조체는 단일 이더넷 프레임을 설명합니다. 드라이버는 전송 요청에서 여러 NET_BUFFER_LIST 구조를 연결할 수 있습니다.

  • NET_BUFFER_LIST 구조체와 연결된 모든 NET_BUFFER 구조체에는 동일한 이더넷 프레임 형식과 IP 프로토콜 버전(IPv4 또는 IPv6)이 있어야 합니다.

  • NET_BUFFER_LIST 구조체와 연결된 모든 NET_BUFFER 구조체에는 동일한 원본 및 대상 MAC 주소가 있어야 합니다.

  • 드라이버가 TCP 또는 UDP 프레임을 보내는 경우 NET_BUFFER_LIST 구조체와 연결된 모든 NET_BUFFER 구조체를 동일한 TCP 또는 UDP 연결과 연결해야 합니다. 참고 다음 요구 사항에 따라 전송된 이더넷 프레임을 분할할 수 있습니다. 즉, 여러 MDL(메모리 설명자 목록)을 송신 요청의 NET_BUFFER 구조와 연결할 수 있습니다.

  • 전송 이더넷 프레임의 MAC 헤더를 여러 MDL에 분할하지 마세요. 가상 LAN(또는 우선 순위) 플래그(있는 경우)를 MAC 헤더의 일부로 처리합니다. 따라서 이 플래그는 MAC 헤더의 나머지 부분과 동일한 MDL에 있어야 합니다.

  • 드라이버가 NET_BUFFER 구조의 MDL 체인 또는 NET_BUFFER_LIST 구조체의 NET_BUFFER 체인의 링크를 변경하는 경우 드라이버는 NET_BUFFER_LIST 소유권을 오버리싱 드라이버에 반환하기 전에 원래 구성에 대한 링크를 복원해야 합니다. 그러나 드라이버는 NET_BUFFER_LIST 구조 간의 링크를 복원할 필요가 없습니다.