title: Piggybacking (data transmission)
text: # Piggybacking (data transmission)
  
  In two-way communication, whenever a frame is received, the receiver waits and does not send the control frame (acknowledgment or ACK) back to the sender immediately. The receiver waits until its network layer passes in the next data packet. The delayed acknowledgment is then attached to this outgoing data frame. This technique of temporarily delaying the acknowledgment so that it can be hooked with next outgoing data frame is known as piggybacking.
  
  ## Working principle
  
  Piggybacking data is a bit different from sliding window protocols used in the OSI model. In the data frame itself, we incorporate one additional field for acknowledgment (i.e., ACK).
  
  Whenever party A wants to send data to party B, it will carry additional ACK information in the PUSH as well.
  
  For example, if A has received 5 bytes from B, with a sequence number starting from 12340 (through 12344), A will place "ACK 12345" as well in the current PUSH packet to inform B it has received the bytes up to sequence number 12344 and expects to see 12345 next time. (ACK number is the next sequence number of the data to be pushed by the other party.)
  
  Three rules govern the piggybacking data transfer.
  
  * If station A wants to send both data and an acknowledgment, it keeps both fields there.
  * If station A wants to send the acknowledgment, after a short period of time to see whether a data frame needs to be sent, then decide whether send an ACK frame alone or attach a data frame with it.
  * If station A wants to send just the data, then the previous acknowledgment field is sent along with the data. Station B simply ignores this duplicate ACK frame upon receiving.
  
  ## Advantages and disadvantages
  
  Advantages:
  
  * Improves the efficiency
  * Usage cost reduction
  * Improves latency of data transfer
  * Better use of available channel bandwidth.
  
  Disadvantages: The receiver can jam the service if it has nothing to send. This can be solved by enabling a counter (receiver timeout) when a data frame is received. If the count ends and there is no data frame to send, the receiver will send an ACK control frame. The sender also adds a counter (emitter timeout). If the counter ends without receiving confirmation, the sender assumes packet loss, and sends the frame again.
  
  