실제 네트워크 어댑터에 패킷 전달

참고 이 페이지에서는 다음 페이지의 정보 및 다이어그램에 익숙하다고 가정합니다.

이 페이지에서는 Hyper-V 확장 가능 스위치 전달 확장이 패킷 전송 요청을 기본 물리적 어댑터로 전달하는 방법을 설명합니다. 하나 이상의 물리적 네트워크 어댑터를 확장 가능한 스위치 외부 네트워크 어댑터에 바인딩할 수 있습니다.

예를 들어 확장 가능한 스위치 외부 네트워크 어댑터는 NDIS MUX(멀티플렉서) 중간 드라이버의 가상 미니포트 에지에 바인딩할 수 있습니다. MUX 중간 드라이버 자체는 호스트에 있는 하나 이상의 물리적 네트워크 팀에 바인딩될 수 있습니다. 이 구성을 확장 가능한 스위치 팀이라고 합니다. 확장 가능한 스위치 팀에 대한 자세한 내용은 물리적 네트워크 어댑터 구성 유형을 참조하세요.

이 구성에서는 확장 가능한 스위치 확장이 확장 가능한 스위치 팀의 모든 네트워크 어댑터에 노출됩니다. 이렇게 하면 확장 가능한 스위치 드라이버 스택의 전달 확장을 통해 팀의 개별 네트워크 어댑터 구성 및 사용을 관리할 수 있습니다. 예를 들어 확장은 개별 어댑터에 송신 패킷을 전달하여 팀을 통해 LBFO(부하 분산 장애 조치( failover) 솔루션을 지원할 수 있습니다. 확장과 같은 를 팀 공급자라고 합니다. 팀 공급자에 대한 자세한 내용은 팀 공급자 확장을 참조 하세요.

전달 확장이 확장 가능한 스위치 드라이버 스택에 설치되고 사용하도록 설정된 경우 패킷이 NVGRE 패킷이 아닌 한 확장 가능한 스위치 수신 데이터 경로에서 가져오는 각 패킷에 대해 전달 결정을 내릴 책임이 있습니다. (NVGRE 패킷에 대한 자세한 내용은 하이브리드 전달을 참조하세요.) 이러한 전달 결정에 따라 확장은 패킷 NET_BUFFER_LIST 구조의 OOB(대역 외) 데이터에 대상 포트를 추가할 수 있습니다. 패킷이 확장 가능한 스위치 데이터 경로의 통과를 완료한 후 확장 가능한 스위치 인터페이스는 지정된 대상 포트에 패킷을 전달합니다.

참고 전달 확장이 설치되거나 활성화되지 않은 경우 확장 가능한 스위치 자체는 수신 데이터 경로에서 가져온 패킷에 대해 전달 결정을 내립니다. 스위치는 패킷을 확장 가능한 스위치 송신 데이터 경로 위로 전달하기 전에 패킷 NET_BUFFER_LIST 구조의 OOB 데이터에 대상 포트를 추가합니다.

전달 확장의 FilterSendNetBufferLists 함수가 호출되면 NetBufferList 매개 변수는 연결된 NET_BUFFER_LIST 구조 목록에 대한 포인터를 포함합니다. 이러한 각 구조체는 수신 데이터 경로에서 가져온 패킷을 지정합니다. 각 패킷의 NET_BUFFER_LIST 구조의 OOB 데이터 내에서 대상 포트에 대한 데이터는 NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 구조에 포함됩니다. 확장은 GetNetBufferListDestinations를 호출하여 NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 구조체 및 해당 요소를 가져옵니다.

참고 성능을 향상시키기 위해 전달 확장은 GetNetBufferListDestinations 대신 GrowNetBufferListDestinations 함수를 호출하여 NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 구조에 대한 포인터를 가져올 수 있습니다. 확장은 대상 포트에 대한 패킷의 OOB 데이터에 추가 배열 요소가 필요하다고 판단되는 경우 이 작업을 수행합니다. 자세한 내용은 패킷에 확장 가능한 스위치 대상 포트 데이터 추가를 참조하세요.

NDIS_SWITCH_FORWARDING_DESTINATION_ARRAY 배열의 각 요소는 대상 포트를 정의하고 NDIS_SWITCH_PORT_DESTINATION 구조체로 형식이 지정됩니다. 이 구조체에는 다음 멤버가 포함됩니다.

  • PortId 멤버에는 확장 가능한 스위치의 대상 포트를 지정하는 값이 포함되어 있습니다.

  • NicIndex 멤버는 PortId 멤버가 지정한 확장 가능한 스위치 포트에 연결된 네트워크 어댑터의 인덱스를 지정합니다.

    이러한 인덱스 값에 대한 자세한 내용은 네트워크 어댑터 인덱스 값을 참조하세요.

전달 확장이 외부 네트워크 어댑터에 연결된 대상 포트를 추가하는 경우 확장은 기본 물리적 네트워크 어댑터의 인덱스 를 지정할 수 있습니다. 예를 들어 확장은 확장 가능한 스위치 팀을 통해 LBFO 지원을 위한 팀 공급자로 작동할 수 있습니다. 이를 통해 확장은 팀의 다른 어댑터에 전송 요청을 전달하여 트래픽 오버헤드의 균형을 맞출 수 있습니다.

전달 확장은 기본 물리적 네트워크 어댑터에 요청을 전송하기 위해 NDIS_SWITCH_PORT_DESTINATION 구조를 추가하거나 수정할 때 다음 지침을 따라야 합니다.

  • PortId 멤버가 외부 네트워크 어댑터가 연결된 확장 가능한 스위치 포트를 지정하는 경우 확장은 NicIndex 멤버를 다음 인덱스 값 중 하나로 설정해야 합니다.

    • 하나의 물리적 네트워크 어댑터만 외부 네트워크 어댑터에 바인딩된 경우 확장은 NicIndex 멤버를 NDIS_SWITCH_DEFAULT_NIC_INDEX 또는 1로 설정해야 합니다.

    • 여러 물리적 네트워크 어댑터가 외부 네트워크 어댑터에 바인딩된 경우 확장은 확장 가능한 스위치 팀에서 NicIndex 멤버를 대상 네트워크 어댑터의 0이 아닌 인덱스 값으로 설정해야 합니다.

    참고PortId 멤버가 외부 네트워크 어댑터가 연결된 확장 가능한 스위치 포트를 지정하지 않으면 확장은 NicIndex 멤버를 NDIS_SWITCH_DEFAULT_NIC_INDEX 설정해야 합니다.

  • 확장에서 패킷에 대한 모든 대상 포트를 추가한 후에는 NdisFSendNetBufferLists 를 호출하여 수신 데이터 경로에서 패킷을 전달해야 합니다.

패킷에 대상 포트를 추가하는 방법에 대한 자세한 내용은 Hyper-V 확장 가능한 스위치 포트에 패킷 전달을 참조하세요.

송신 데이터 경로에 대한 자세한 내용은 Hyper-V 확장 가능한 스위치 데이터 경로를 참조하세요.