NDIS 6.30(Windows Server 2012)에서는 NVGRE(일반 라우팅 캡슐화) 사용하여네트워크 가상화를 도입했습니다. NDIS 미니포트, 프로토콜 및 필터 드라이버 및 LSO(대규모 송신 오프로드) 버전 2(LSOV2)를 수행하는 NIC는 NVGRE를 지원하는 방식으로 수행해야 합니다.
참고 이 페이지는 큰 TCP 패킷의 세그멘테이션 오프로드정보에 익숙하다는 것을 가정합니다.
NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket TRUE 있으며 TcpIpChecksumNetBufferListInfo OOB(대역 외) 정보가 유효하면 NVGRE 지원이 필요하고 NIC가 NVGRE 형식 패킷에서 LSOV2 오프로드를 수행해야 하며 다음과 같은 조건이 있습니다.
- NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO구조체에서LsoV2Transmit 구조체의 값만 유효합니다. NIC 및 미니포트 드라이버는 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO값을 참조하지 않아야 합니다.LsoV1Transmit 구조체입니다.
- NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO.LsoV2Transmit.TcpHeaderOffset 멤버에는 올바른 오프셋 값이 없으며 NIC 또는 미니포트 드라이버에서 사용해서는 안 됩니다.
LSOV2에서 NVGRE를 지원하려면 프로토콜 및 필터 드라이버에서 다음을 변경해야 합니다.
- NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFOMSS 값을 줄입니다.새 GRE 헤더를 설명하기 위해 LsoV2Transmit 구조체입니다.
- 감소된 MSS 값의 정확한 배수가 아닐 수 있는 TCP 페이로드 길이를 보냅니다.
- InnerFrameOffset, TransportIpHeaderRelativeOffset, 그리고 TcpHeaderRelativeOffset 값을 조정하여 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 구조에서 GRE 헤더를 고려합니다.
NIC 및 미니포트 드라이버는 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 구조에 제공된 InnerFrameOffset, TransportIpHeaderRelativeOffset및 TcpHeaderRelativeOffset 값을 사용할 수 있습니다. NIC 또는 미니포트 드라이버는 터널(외부) IP 헤더 또는 후속 헤더에서 필요한 헤더 검사를 수행하여 이러한 오프셋의 유효성을 검사할 수 있습니다.
미니포트 드라이버는 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO경우를 처리해야 합니다.InnerFrameOffset 패킷의 시작 부분과 다른 분산 수집 목록에 있을 수 있습니다. 프로토콜 드라이버는 앞에 추가된 모든 캡슐화 헤더(ETH, IP, GRE)가 물리적으로 연속되고 패킷의 첫 번째 MDL에 포함되도록 보장합니다.
프로토콜 및 필터 드라이버는 총 TCP 페이로드 길이가 감소된 MSS 값의 정확한 배수임을 보장하지 않습니다. 이러한 이유로 미니포트 드라이버와 NIC는 터널(외부) IP 헤더를 업데이트해야 합니다. NIC는 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO축소된 MSS 값에 따라 가능한 한 많은 전체 크기의 세그먼트를 생성해야 합니다. LsoV2TransmitOOB 정보를. LSOv2 송신당 하나의 하위MSS 세그먼트만 생성될 수 있습니다.
미니포트 드라이버는 다음을 수행해야 합니다.
- 터널(외부) IP 헤더에 대한 체크섬을 계산합니다.
- 모든 패킷에 대해 터널(외부) IP 헤더의 IP ID(IP ID) 값을 증분합니다. 첫 번째 패킷은 원래 터널(외부) IP 헤더에서 IP ID를 사용해야 합니다.
- 모든 패킷에 대한 전송(내부) IP 헤더의 IP ID를 증분합니다. 첫 번째 패킷은 원래 전송(내부) IP 헤더에서 IP ID를 사용해야 합니다.
- TCP 헤더 및 전송(내부) IP 헤더에 대한 체크섬을 계산합니다.
- 캡슐화 터널(외부) 헤더를 포함한 전체 헤더가 생성된 모든 패킷에 추가되는지 확인합니다.