Share via


IPsec 오프로드 버전 2를 사용하여 네트워크 데이터 보내기

[IPsec 작업 오프로드 기능은 더 이상 사용되지 않으며 사용해서는 안 됩니다.]

TCP/IP 전송은 OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID를 사용하여 하나 이상의 SA에 대한 IPsec 오프로드 버전 2(IPsecOV2) 정보를 제공합니다. 미니포트 드라이버가 OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA 대한 성공적인 결과를 반환하기 전에 미니포트 드라이버는 오프로드 핸들을 초기화합니다. TCP/IP 전송은 NET_BUFFER_LIST OOB(대역 외) 정보의 일부인 NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFONDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO 구조에 IPsecOV2 정보를 지정하여 미니포트 드라이버에 NET_BUFFER_LIST 구조체의 처리를 오프로드 하도록 요청합니다.

TCP/IP 전송은 송신 패킷의 전송(엔드투엔드 연결) 부분에 대한 SA(아웃바운드 보안 연결)에 대한 핸들을 지정하는 NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFOOffloadHandle 멤버에 오프로드 핸들을 제공합니다.

TCP/IP 전송은 NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO 구조에서 다음 헤더 정보를 제공합니다.

  • AH 헤더, ESP 헤더 또는 둘 다에 대한 헤더 오프셋입니다.

  • 다음 프로토콜 값(ESP 트레일러에 포함된 프로토콜 값과 동일)입니다.

  • 결합된 LSO(대규모 송신 오프로드) 및 IPsec 오프로드에 사용되는 패드 길이입니다.

또한 송신 패킷이 터널을 통해 전송되는 경우 TCP/IP 전송은 NDIS_IPSEC_OFFLOAD_V2_TUNNEL_NET_BUFFER_LIST_INFO 구조를 제공합니다. 이 구조체는 송신 패킷의 터널 부분에 대한 아웃바운드 SA에 대한 오프로드 핸들을 지정합니다. OOB 정보에 액세스하는 방법에 대한 자세한 내용은 IPsec 오프로드 버전 2에서 NET_BUFFER_LIST 정보 액세스를 참조하세요.

미니포트 드라이버는 OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA OID 집합 요청에 대한 응답으로 오프로드 핸들을 제공했습니다. SA에 대한 자세한 내용은 IPsec 오프로드 버전 2에서 보안 연결 관리를 참조하세요.

미니포트 드라이버가 MiniportSendNetBufferLists 함수에서 송신 요청을 처리하는 경우 미니포트 드라이버는 다음과 같습니다.

  • 하드웨어가 IPsec 오프로드 서비스를 처리하도록 구성되어 있는지 확인합니다. 하드웨어가 IPsec 오프로드 서비스를 처리하도록 구성되지 않은 경우 미니포트 드라이버는 오프로드 서비스를 제공하지 않고 보내기 요청을 처리해야 합니다.

  • NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFONDIS_IPSEC_OFFLOAD_V2_TUNNEL_NET_BUFFER_LIST_INFO 구조의 핸들을 확인하여 IPsec 암호화 처리가 필요한지 확인합니다. 오프로드 핸들 값이 0이면 NET_BUFFER_LIST 대해 IPsec 작업 오프로드를 수행해서는 안 됨을 나타냅니다. 미니포트 드라이버가 지정된 오프로드 핸들에 해당하는 오프로드된 SA를 찾을 수 없는 경우 송신 패킷은 NDIS_STATUS_FAILURE 값으로 실패해야 합니다.

  • NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO 구조체의 핸들을 확인하여 NET_BUFFER_LIST 대해 분할 오프로드를 수행해야 하는지 확인합니다.

  • NET_BUFFER_LIST 모든 송신 패킷에 필요한 AH 및 ESP 처리를 완료합니다. NIC는 송신 패킷에서 IPsec 처리를 수행할 때 패킷 데이터에 대한 암호화 작업을 수행합니다. TCP/IP 전송은 이미 패킷 프레임을 지정하고, 패딩하고(필요한 경우) 시퀀스 번호 및 SPI(보안 매개 변수 인덱스)를 할당했습니다. 결합된 LSO 및 IPsec 오프로드의 경우 NET_BUFFER NIC가 큰 패킷을 세그먼트하는 동안 삭제되는 패딩이 있을 수 있습니다. 안쪽 여백의 양은 NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO 구조체의 PadLength 멤버에 지정됩니다. 분할된 패킷은 IPsec 작업을 지원하기 위해 패딩이 필요할 수 있습니다.

프로토콜 드라이버가 LSO 및 IPsecOV2를 모두 요청하는 패킷을 전송하는 경우 ESP 트레일러의 프레임을 지정하지 않습니다. 이는 안쪽 여백 길이와 같은 ESP 트레일러의 정보가 NIC에 의해 생성된 마지막 세그먼트에 대해 정확하지 않기 때문입니다.