3.1.5.9.5 Processing an ACK Packet

An ACK packet is sent by the Master Client for each of ODATA, RDATA and SPM packets. The server MUST NOT accept an ACK packet if the ClientId field (section 2.2.15) of the ACK packet does not match the MasterClientId (section 3.1.1.3). The server MUST NOT accept an ACK packet if the ODATASeqNo field (section 2.2.15) of the ACK packet is not within the range specified by MCTrailODATASeqNo and MCLeadODATASeqNo (section 3.1.1.3).

The server MUST:

  •  Set SPMCount (section 3.1.1.3) to zero.

  •  Set MCRTT (section 3.1.1.3) to the round trip time for the Master Client by subtracting the ServerTime field (section 2.2.15) from the current local time on server.

  •  Set MCLossRate (section 3.1.1.3) to (LossRate field / 10000000000000000) (section 2.2.15) of ACK packet.

The server MUST compute the number of packets being acknowledged by the Master Client as follows.

PacketsAcknowledged = ODATASeqNo from ACK packet – MCTrailODATASeqNo

The server MUST update CurrentWindowSize (section 3.1.1.3) as specified below when the value of CurrentWindowSize is less than ExpMaxWindowSize (section 3.1.1.4):

CurrentWindowSize = MIN(CurrentWindowSize + ( PacketsAcknowledged x 2 ),  ExpMaxWindowSize )

When the value of CurrentWindowSize (section 3.1.1.3) is within the range specified by ExpMaxWindowSize (section 3.1.1.4) and MaxWindowSize (section 3.1.1.4), then the server MUST update the CurrentWindowSize (section 3.1.1.3) as follows.

CurrentWindowSize = MIN(CurrentWindowSize + PacketsAcknowledgedMaxWindowSize )

The server MUST set MCTrailODATASeqNo (section 3.1.1.3) to ODATASeqNo field (section 2.2.16) of ACK packet.

If Data Packet List (section 3.1.1.3) is empty or MCLeadODATASeqNo (section 3.1.1.3) is equal to the ODATASeqNo of the ODATA packet at the tail of Data Packet List (section 3.1.1.3), then the server MUST stop further processing.

The server MUST calculate the number of ODATA packets that have been sent and are not acknowledged by Master Client as follows.

InFlightPackets = ( MCLeadODATASeqNoMCTrailODATASeqNo )

If InFlightPackets is more than or equal to CurrentWindowSize (section 3.1.1.3), then the server MUST stop further processing.

The server MUST calculate the number of ODATA packets that can be sent as follows.

PacketCount = CurrentWindowSizeInFlightPackets

The server MUST start from the entry in Data Packet List (section 3.1.1.3) with ODATASeqNo being (MCLeadODATASeqNo + 1) (section 3.1.1.3) and MUST send the count of ODATA packets as specified by PacketCount. Each ODATA packet MUST be updated as specified in section 3.1.5.9.7before sending the packet to the multicast address (section 3.2.1.1).

The server MUST add the number of ODATA packets that have been sent to MCLeadODATASeqNo (section 3.1.1.3).