병합된 세그먼트 표시
단일 병합 단위(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 구조에서 TcpChecksumValueInvalid 및 IpChecksumValueInvalid 플래그를 설정해야 합니다. 또한 이 경우 NIC 또는 미니포트 드라이버는 필요에 따라 세그먼트의 TCP 및 IPv4 헤더 체크섬 값을 0으로 표시할 수 있습니다.
NIC 및 미니포트 드라이버는 병합된 세그먼트를 나타내기 전에 항상 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 구조체에서 IpChecksumSucceeded 및 TcpChecksumSucceeded 플래그를 설정해야 합니다.
병합 규칙에 대한 자세한 내용은 TCP/IP 세그먼트 병합 규칙을 참조하세요.
예외에 대한 자세한 내용은 병합을 종료하는 예외 조건을 참조하세요.
병합은 최선의 노력으로 수행될 것으로 예상됩니다. 예를 들어 리소스 부족으로 인해 하드웨어가 병합되지 않을 수 있습니다. 여기에 명시된 요구 사항은 주로 병합하지 않을 시기와 병합 방법을 지정하는 것입니다.
높은 수준에서 NIC 및 미니포트 드라이버는 다음과 같이 와이어를 통해 TCP 세그먼트의 수신을 처리해야 합니다.
다음과 같이 들어오는 세그먼트에서 예외를 확인합니다.
예외가 발생하지 않은 경우 규칙에 따라 동일한 TCP 연결에 대해 수신된 마지막 세그먼트와 세그먼트를 병합할 수 있는지 여부를 검사.
세그먼트가 예외를 트리거하거나 이전에 받은 세그먼트와 병합할 수 없는 경우 세그먼트를 개별적으로 나타냅니다.
NIC 및 미니포트 드라이버는 프로토콜 드라이버가 RSC 상태 쿼리 및 변경에 설명된 대로 RSC를 사용하도록 설정할 때까지 병합된 세그먼트를 나타내서는 안 됩니다.
지정된 TCP 연결의 경우 미니포트 어댑터에서 호스트 TCP/IP 스택으로의 데이터 표시는 병합할 수 없는 하나 이상의 개별 세그먼트로 구분된 하나 이상의 병합된 세그먼트로 구성될 수 있습니다.
NIC 및 미니포트 드라이버는 병합 여부에 관계없이 TCP 세그먼트의 표시를 지연해서는 안 됩니다. 특히 NIC 및 미니포트 드라이버는 세그먼트 병합을 시도하기 위해 한 DPC(지연 프로시저 호출)에서 다음으로 세그먼트 표시를 지연해서는 안 됩니다.
NIC 및 미니포트 드라이버는 타이머를 사용하여 병합의 끝을 결정할 수 있습니다. 그러나 대기 시간에 중요한 워크로드의 처리는 DPC 경계 요구 사항만큼 효과적이어야 합니다.