수신 경로에서 캡슐화된 패킷에 대한 전송 헤더 찾기
패킷을 수신할 때 NVGRE(제네릭 라우팅 캡슐화)를 사용하여 네트워크 가상화를 지원하는 NIC는 먼저 패킷이 캡슐화되어 있는지 여부와 캡슐화 형식을 결정해야 합니다.
참고 송신 경로에서 패킷은 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 경우 캡슐화됩니다. IsEncapsulatedPacket 은 TRUE입니다.
수신 경로에서 NIC는 IPv4 터널(외부) 헤더의 프로토콜 필드 또는 IPv6 터널(외부) 헤더의 NextHeader 필드에서 프로토콜 번호를 확인하여 패킷이 캡슐화되는지 여부를 결정해야 합니다. 할당된 프로토콜 번호 목록은 에서 https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml찾을 수 있습니다.
패킷이 캡슐화된 패킷으로 결정되면 NIC는 캡슐화된 패킷의 프로토콜을 구문 분석하여 전송(내부) IP 헤더에 대한 오프셋을 결정해야 합니다.
NDIS 6.30(Windows Server 2012) 이상에서는 GRE IP 캡슐화만 지원됩니다. 따라서 NIC는 보급된 기능에 따라 다음을 구문 분석할 수 있어야 합니다.
- GRE(RFC 2784: GRE(일반 라우팅 캡슐화) 헤더
- RFC 2890: GRE로 키 및 시퀀스 번호 확장
- IPv4(RFC 791: 인터넷 프로토콜) 헤더
- IPv6(RFC 2460: 인터넷 프로토콜, 버전 6(IPv6)) 헤더
NIC가 알 수 없거나 지원되지 않는 캡슐화 프로토콜을 찾은 경우 변경되지 않은 패킷을 호스트 스택에 전달해야 합니다.
따라서 수신 경로에서 미니포트는 전송(내부) IP 헤더를 구문 분석하여 IP 버전을 확인하고 TCP 또는 UDP 헤더로 이동해야 합니다. 이는 NDIS 6.30(Windows Server 2012) 이상에 대한 새로운 요구 사항입니다.