Skip to content

TFTP server ignores ack number after lost data packet #44

@calandoa

Description

@calandoa

While a client is downloading a file from the TFTP server, if a data packet from the server get lost, the client will send acks with the last good received data packet number, but the server will ignore the number and keep sending following data packets, despite one packet is missing for the client. Check tshark log below:

    6 0.466264295    127.0.0.1 → 127.0.0.1    TFTP 101 Read Request, File: f100k, Transfer type: octet, blksize=1468, tsize=0, windowsize=16, timeout=1
    7 0.467073448    127.0.0.1 → 127.0.0.1    TFTP 61 Option Acknowledgement, blksize=1468, =, =
    8 0.467141328    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 1
    9 0.467353412    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 0
   10 0.467452560    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 2
   11 0.467867442    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 1
   12 0.467955963    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 2
   13 0.468169455    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 3
   14 0.468261700    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 3
   15 0.468287480    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 4
   16 0.468304213    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 4
   17 0.468318758    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 5
   18 0.468348409    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 5
   19 0.468361356    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 6
   20 0.468397769    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 6
   21 0.468401552    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 7
   22 0.468445730    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 7
   23 0.468475749    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 8
   24 0.468524534    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 8
   25 0.468529251    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 9
   26 0.468545597    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 9
   27 0.468558458    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 10
   28 0.468571784    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 10
   29 0.468574212    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 11
   30 0.468612964    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 11
   31 0.468615710    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 12
   32 0.468650898    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 12
   33 0.468671720    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 13
   34 0.468693038    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 14
   35 0.468704803    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 13
   36 0.468739146    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 15
   37 0.468740696    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 14
   38 0.468756060    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 16
   39 0.468757283    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 15
   40 0.468769877    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 16
   41 0.468773296    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 17
   42 0.468786553    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 17
   43 0.468788962    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 18
   44 0.468798479    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 19
   45 0.468807938    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 18
   46 0.468836238    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 20
   47 0.468843225    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 19
   48 0.468869973    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 21
   49 0.468877981    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 20
   50 0.468917742    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 21
   51 0.468920165    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 22
   52 0.468948366    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 23
   53 0.468955422    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 22
   54 0.468982302    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 24
   55 0.468989763    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 23
   56 0.469016199    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 25
   57 0.469029917    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 24
   58 0.469057630    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 26
   59 0.469064358    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 25
   60 0.469098371    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   61 0.469125693    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 28                <==== here missing data 27
   62 0.469153508    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   63 0.469181459    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 29
   64 0.469231726    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   65 0.469261241    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 30
   66 0.469305261    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   67 0.469334473    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 31
   68 0.469370281    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   69 0.469397756    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 32
   70 0.469432345    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   71 0.469459294    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 33
   72 0.469494346    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   73 0.469522906    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 34
   74 0.469569092    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   75 0.469596870    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 35
   76 0.469633391    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   77 0.469660490    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 36
   78 0.469695136    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   79 0.469723269    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 37
   80 0.469770362    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   81 0.469797414    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 38
   82 0.469832246    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   83 0.469859083    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 39
   84 0.469894117    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   85 0.469922786    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 40
   86 0.469965339    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   87 0.469992333    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 41
   88 0.470027985    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   89 0.470056084    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 42
   90 0.470097993    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   91 0.470125318    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 43
   92 0.470165742    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   93 0.470199707    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 44
   94 0.470240091    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   95 0.470269523    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 45
   96 0.470315142    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   97 0.470342465    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 46
   98 0.470379120    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
   99 0.470408731    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 47
  100 0.470449974    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  101 0.470477888    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 48
  102 0.470520276    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  103 0.470546901    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 49
  104 0.470582457    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  105 0.470609367    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 50
  106 0.470644327    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  107 0.470672557    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 51
  108 0.470714507    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  109 0.470741287    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 52
  110 0.470775905    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  111 0.470802844    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 53
  112 0.470838726    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  113 0.470873858    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 54
  114 0.470911041    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  115 0.470930941    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 55
  116 0.470938099    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  117 0.470951059    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 56
  118 0.471002904    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  119 0.471030318    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 57
  120 0.471067383    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  121 0.471095626    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 58
  122 0.471138637    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  123 0.471166772    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 59
  124 0.471222980    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  125 0.471250459    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 60
  126 0.471290259    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  127 0.471317262    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 61
  128 0.471353492    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  129 0.471381616    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 62
  130 0.471422741    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  131 0.471449833    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 63
  132 0.471484881    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  133 0.471511611    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 64
  134 0.471551595    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  135 0.471579598    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 65
  136 0.471618660    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  137 0.471645346    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 66
  138 0.471680451    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  139 0.471708578    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 67
  140 0.471751174    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  141 0.471777781    127.0.0.1 → 127.0.0.1    TFTP 1514 Data Packet, Block: 68
  142 0.471813128    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  143 0.471840993    127.0.0.1 → 127.0.0.1    TFTP 222 Data Packet, Block: 69 (last)
  144 0.471884162    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26
  145 5.790366991    127.0.0.1 → 127.0.0.1    TFTP 46 Acknowledgement, Block: 26

Here is the relevant part of uftpd log:

84397> tftp block 5376 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 20
84397> ACK block 20, file still open ...
84397> tftp block 5632 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 21
84397> ACK block 21, file still open ...
84397> tftp block 5888 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 22
84397> ACK block 22, file still open ...
84397> tftp block 6144 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 23
84397> ACK block 23, file still open ...
84397> tftp block 6400 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 24
84397> ACK block 24, file still open ...
84397> tftp block 6656 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 25
84397> ACK block 25, file still open ...
84397> tftp block 6912 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 26
84397> ACK block 26, file still open ...
84397> tftp block 7168 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 26
84397> ACK block 26, file still open ...
84397> tftp block 7424 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 26
84397> ACK block 26, file still open ...
84397> tftp block 7680 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 26
84397> ACK block 26, file still open ...
84397> tftp block 7936 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 26
84397> ACK block 26, file still open ...
84397> tftp block 8192 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 26
84397> ACK block 26, file still open ...
84397> tftp block 8448 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 26
84397> ACK block 26, file still open ...
84397> tftp block 8704 reading 1468 bytes ...
84397> SND ^@: header size: 4, data len: 1468 ...
84397> tftp ACK, block # 26
84397> ACK block 26, file still open ...

Also, it seems that there is missing acks in the log, but it does not prevent the transfer to continue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions