다음을 통해 공유


수신 세그먼트 병합의 예

이 섹션에서는 순서대로 수신되고 단일 DPC(지연 프로시저 호출)에서 처리되는 세그먼트의 예제를 사용하여 병합 알고리즘을 보여 줍니다.

이 페이지에서는 연속 세그먼트에 레이블을 지정하는 데 X 및 X'를 사용합니다. 다른 모든 세그먼트 및 단일 병합 단위(SCU) 필드는 TCP/IP 세그먼트 병합 규칙에 설명되어 있습니다.

예제 1: 데이터 세그먼트

세그먼트 설명

동일한 TCP 연결에 속하는 10개의 연속 세그먼트가 처리됩니다. 다음 조건은 모두 각각에 대해 true입니다.

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

이러한 세그먼트 중 어느 것도 예외를 생성하지 않습니다.

결과

단일 SCU는 10개 세그먼트 중에서 형성됩니다. 단일 NET_BUFFER_LIST 단일 NET_BUFFER표시됩니다.

예제 2: 데이터 세그먼트, 다음 예외, 데이터 세그먼트

세그먼트 설명

동일한 TCP 연결에 속하는 5개의 연속 세그먼트가 처리됩니다. 다음 조건은 모두 각각에 대해 true입니다.

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

이러한 세그먼트 중 어느 것도 예외를 생성하지 않습니다. 6번째 세그먼트는 TCP SACK 옵션이 있는 중복 ACK 세그먼트이며 TCP /IP 세그먼트 병합 규칙의 규칙 번호 3에 따라 예외를 생성합니다.

참고 이 경우 TCP 옵션을 처리하기 위한 예외 규칙이 우선적으로 적용되므로 병합 규칙이 재정의됩니다.

동일한 TCP 연결에 속하는 2개의 연속 세그먼트가 처리됩니다. 다음 조건은 모두 각각에 대해 true입니다.

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

이러한 세그먼트 중 어느 것도 예외를 생성하지 않습니다.

결과

처음 5개 세그먼트에서 단일 SCU가 형성됩니다. 6번째 세그먼트는 SCU를 구성하지 않습니다.

7번째 및 8번째 세그먼트는 SCU를 함께 형성합니다.

NET_BUFFER_LIST 체인은 각각 단일 NET_BUFFER 갖는 세 개의 NET_BUFFER_LIST 구조로 표시됩니다. 수신된 세그먼트의 순서는 유지 관리됩니다.

예제 3: 데이터 세그먼트, 여러 창 업데이트

세그먼트 설명

동일한 TCP 연결에 속하는 5개의 연속 세그먼트가 처리됩니다. 다음 조건은 모두 각각에 대해 true입니다.

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

이러한 세그먼트 중 어느 것도 예외를 생성하지 않습니다. 6번째 세그먼트는 SEG를 사용하는 창 업데이트인 순수 ACK입니다. WND = 다음 순서도와 같이 65535입니다.

TCP 타임스탬프 옵션을 사용하여 세그먼트를 병합하는 규칙을 보여 주는 순서도입니다.

7번째 세그먼트는 SEG를 사용하는 창 업데이트인 순수 ACK입니다. WND = 동일한 순서도에 표시된 대로 131070입니다.

결과

단일 SCU는 7개 세그먼트 중에서 구성됩니다. 단일 NET_BUFFER_LIST 단일 NET_BUFFER표시됩니다.

SCU입니다. WND = 131070이며 체크섬은 이 값에 따라 업데이트됩니다.

예제 4: 데이터 세그먼트와 혼합된 피기백된 ACK

세그먼트 설명

동일한 TCP 연결에 속하는 3개의 연속 세그먼트가 처리됩니다. 다음 조건은 모두 각각에 대해 true입니다.

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

이러한 세그먼트 중 어느 것도 예외를 생성하지 않습니다. 동일한 TCP 연결에 속하는 2개의 연속 세그먼트가 처리됩니다. 다음 조건은 모두 각각에 대해 true입니다.

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

이러한 세그먼트 중 어느 것도 예외를 생성하지 않습니다.

결과

단일 SCU는 5개 세그먼트 중에서 구성됩니다. 단일 NET_BUFFER_LIST 단일 NET_BUFFER표시됩니다. SCU입니다. ACK는 마지막 SEG.ACK로 설정됩니다.