What causes these duplicate TCP ACKs to go to the linux kernel

I captured these packages using tcpdump on an Android device (linux 3.4.39), these packages are in the HTTP GET stream:

1 385.447794 Server → Client: SEQ 12517, LEN 100
2 385.498345 Client → Server: SEQ 3086, LEN 0, ACK 12617
3 385.497836 Server → Client: SEQ 12617, LEN 1348
4 385.498644 Client → Server: [DUP ACK] SEQ 3086, LEN 0, ACK 12617
5 385.498735 Server → Client: SEQ 13965, LEN 619
6 385.498978 Client → Server: [Dup ACK] SEQ 3086, LEN 0, ACK 12617
7 385.718843 Server → Client: [Retrans] SEQ 13965, LEN 619
8 385.719280 Client → Server: [DUP ACK] SEQ 3086, LEN 0, ACK 12617
9 385.733230 Server → Client: [Retrans] SEQ 12617, LEN 1348
10 385.733602 Client → Server: SEQ 3086, LEN 0, ACK 14584
11 385.909921 Server → Client: [ Retrans] SEQ 12617, LEN 1348
12 385.910449 Client → Server: [DUP ACK] [Window update] SEQ 3086, LEN 0, ACK 14584
13 388.031541 Client → Server: SEQ 832, LEN 0, ACK 4192, FIN
14 388.031681 Client → Server: SEQ 3086, LEN 0, ACK 14584 FIN

The client is my device.

What causes these duplicate TCP ACKs to be sent by the client?

UPDATE:
Why does the client send the previous DUP ACK (# 4) after receiving the next TCP packet (# 3)?

Thank.

+4
source share
1 answer

What causes these duplicate TCP ACKs to be sent by the client?

receiver (client)sends ACK#in the quality SEQ#that he expects from sender (server).

In your example, the server sent:

1 385.447794 Server -> Client: SEQ 12517, LEN 100

clienttakes it and then requests a packet with SEQ# 12517+100 = 12617, placingACK = 12617

2 385.498345 Client -> Server: SEQ 3086, LEN 0, ACK 12617

If package with SEQ# 12617:

3 385.497836 Server -> Client: SEQ 12617, LEN 1348

receiver, receiver duplicate ACK, sender ( , ).

4 385.498644 Client -> Server: [DUP ACK] SEQ 3086, LEN 0, ACK 12617

DUP ACK (# 4) TCP- (# 3)?

SEQ#12617 , client . , ACK 12617, server .

, ​​Linux ACK ?

, ACKS# SEQ#. , . , ().

+2

Source: https://habr.com/ru/post/1535705/


All Articles