다음을 통해 공유


병합된 세그먼트 표시

단일 병합 단위(SCU)는 TCP/IP 세그먼트 병합 규칙에 정의된 규칙에 따라 단일 TCP 세그먼트로 병합되는 TCP 세그먼트의 시퀀스입니다. 이 섹션에서는 결과 병합 세그먼트를 나타내는 방법을 설명합니다.

SCU는 다음을 수행해야 합니다.

  • NdisMIndicateReceiveNetBufferLists를 호출하여 표시합니다.

  • 와이어를 통해 수신되는 일반 TCP 세그먼트처럼 보입니다.

  • RFC 791의 섹션 3.1에 정의된 대로 최대 법적 IP 데이터그램 길이보다 크지 않습니다.

    참고 IPv6 확장 헤더가 있는 세그먼트는 병합할 수 없으므로( 병합을 종료하는 예외 조건 참조) IPv6 데이터그램에 대한 SCU 크기도 최대 법적 데이터그램 길이로 제한됩니다.

NIC 또는 미니포트 드라이버는 병합된 세그먼트를 나타내기 전에 TCP 및 IPv4 체크섬(해당하는 경우)을 다시 계산해야 합니다. NIC 또는 미니포트 드라이버가 TCP 및 IPv4 체크섬의 유효성을 검사하지만 병합된 세그먼트에 대해 다시 계산하지 않는 경우 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조에서 TcpChecksumValueInvalidIpChecksumValueInvalid 플래그를 설정해야 합니다. 또한 이 경우 NIC 또는 미니포트 드라이버는 필요에 따라 세그먼트의 TCP 및 IPv4 헤더 체크섬 값을 0으로 표시할 수 있습니다.

NIC 및 미니포트 드라이버는 병합된 세그먼트를 나타내기 전에 항상 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조체에서 IpChecksumSucceededTcpChecksumSucceeded 플래그를 설정해야 합니다.

병합 규칙에 대한 자세한 내용은 TCP/IP 세그먼트 병합 규칙을 참조하세요.

예외에 대한 자세한 내용은 병합을 종료하는 예외 조건을 참조하세요.

병합은 최선의 노력으로 수행될 것으로 예상됩니다. 예를 들어 리소스 부족으로 인해 하드웨어가 병합되지 않을 수 있습니다. 여기에 명시된 요구 사항은 주로 병합하지 않을 시기와 병합 방법을 지정하는 것입니다.

높은 수준에서 NIC 및 미니포트 드라이버는 다음과 같이 와이어를 통해 TCP 세그먼트의 수신을 처리해야 합니다.

  • 다음과 같이 들어오는 세그먼트에서 예외를 확인합니다.

    1. 예외가 발생하지 않은 경우 규칙에 따라 동일한 TCP 연결에 대해 수신된 마지막 세그먼트와 세그먼트를 병합할 수 있는지 여부를 검사.

    2. 세그먼트가 예외를 트리거하거나 이전에 받은 세그먼트와 병합할 수 없는 경우 세그먼트를 개별적으로 나타냅니다.

  • NIC 및 미니포트 드라이버는 프로토콜 드라이버가 RSC 상태 쿼리 및 변경에 설명된 대로 RSC를 사용하도록 설정할 때까지 병합된 세그먼트를 나타내서는 안 됩니다.

  • 지정된 TCP 연결의 경우 미니포트 어댑터에서 호스트 TCP/IP 스택으로의 데이터 표시는 병합할 수 없는 하나 이상의 개별 세그먼트로 구분된 하나 이상의 병합된 세그먼트로 구성될 수 있습니다.

  • NIC 및 미니포트 드라이버는 병합 여부에 관계없이 TCP 세그먼트의 표시를 지연해서는 안 됩니다. 특히 NIC 및 미니포트 드라이버는 세그먼트 병합을 시도하기 위해 한 DPC(지연 프로시저 호출)에서 다음으로 세그먼트 표시를 지연해서는 안 됩니다.

  • NIC 및 미니포트 드라이버는 타이머를 사용하여 병합의 끝을 결정할 수 있습니다. 그러나 대기 시간에 중요한 워크로드의 처리는 DPC 경계 요구 사항만큼 효과적이어야 합니다.