<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Developing a High-Speed Connectionless File Transfer System with WASM Based Client</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Robert Tornai</string-name>
          <email>tornai.robert@inf.unideb.hu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Dalma Kiss-Imre</string-name>
          <email>imre.dalma99@gmail.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Péter Fürjes-Benke</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Zoltán Gál</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>University of Debrecen, Faculty of Informatics</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2020</year>
      </pub-date>
      <fpage>29</fpage>
      <lpage>31</lpage>
      <abstract>
        <p>This paper describes an application named FFTM (Fast File Transfer Manager) that is based on Xinan Liu's Reliable File Transfer Protocol. The system consists of a server and a client program utilizing UDP connection. The aim is to transfer big files quickly by this program on busy network connections. We developed a   -based minimum viable product relying on Xinan Liu's solution by adding control over chunk size. This article introduces the results of rewriting the modified software in C++ and the improvement of the client by a graphical user interface. Furthermore, we want to make this program available for as many platforms as we can. To achieve this goal we paid special attention to the WebAssembly programming language. Thanks to the generated WASM binary, our application can be used from a browser without installation.</p>
      </abstract>
      <kwd-group>
        <kwd>high-speed networking</kwd>
        <kwd>high-performance computing</kwd>
        <kwd>Internet</kwd>
        <kwd>parallel communication</kwd>
        <kwd>congestion control</kwd>
        <kwd>trafic engineering</kwd>
        <kwd>statistical analysis</kwd>
        <kwd>scale independence</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        The need for handle big amount of data and make computation on them led to
using supercomputers. This introduces new problems, e.g., transfer a huge amount
of data between workstations and supercomputer nodes for processing. Not only
the upload process is slow, but the result can be huge also to download. Even
gigabit connections can slow down to a few megabit range in a busy network in
real-life use cases having even packet loss [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], as we experienced this at file transfers
forth and back with a server hosted in the Gyires supercomputer’s data center [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>Transmission Control Protocol (TCP) based solutions have a lot of problems
with trafic control. Usually, the transfer rate fluctuates a lot, even having just
a small extra data transfer on the network from other nodes. A User Datagram
Protocol (UDP) based software handles big data transfers a way better. Albeit,
they have a challenge of the feedback of the unsuccessfully transferred packages.
By creating a UDP based high-speed file transfer system, the demand to quickly
move huge data between supercomputer nodes and workstations could be satisfied.</p>
      <p>
        The UFTP and UFTPD software pair mostly accomplish the needed features
as transfer rate control, encryption or integration checking [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. They cannot be
used with a GUI and query the path on the server. Implementing a GUI for
the UFTP software could be a solution for the server side path management and
the Midnight Commander style two-pane operation. However, it would not be
available in browsers, which is a basic requirement in our project. The whole
source code of the two applications of UFTP and UFTPD should be modified to
be able to compile for WebAssembly. Instead of this, we decided to write an own
implementation designed for WASM from scratch, this way it can be run in modern
browsers [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. The chosen Qt system contained support for WebAssembly first as a
tech preview in version 5.12 beta at the end of 2018.
      </p>
      <p>Xinan Liu’s Reliable File Transfer Protocol was chosen for the starting point of
the development work, because beside its small code base it achieved the first place
in CS2105 (Introduction to Computer Networks) Speed Contest AY15/16 Sem1.</p>
      <p>
        Moreover, we take a glance at the possibility of the usage of the Stream Control
Transmission Protocol (SCTP) [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. SCTP is able to handle the data transfer and
control feedback by utilizing both TCP and UDP protocols [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
      </p>
      <p>The structure of the paper is following: in chapter two is described the
development environment of the fast file transfer application including Qt customization,
SCTP support and Webassembly considerations. In chapter three
reimplementation method in  ++ of the fast file transfer application is presented. Performance
features of the new product are given in chapter four. Possible continuation and
future research and development targets are described in chapter five.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Developing environment</title>
      <p>
        For the platform independent development the Qt 5.14.0 stable version was chosen
[
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. The work was carried out on a Debian 10.2 workstation. Qt has a lot of
desktop operating system targets as Windows, Linux and macOS. Furthermore,
it supports mobile equipment as Android and iOS [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. In recent years one of
the most interesting new platforms is WebAssembly [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. Through this technology
almost native speed program running is available from modern web browsers.
      </p>
      <p>The chosen programming language is the highly portable  ++11. In Qt, the
other natural choice could be QML. However, since it is a script language, it does
not suite the eficiency needed for high-speed network transfer.</p>
      <p>
        The server is designed to run in headless mode. The client is built for the
necessary target system natively having a GUI. The WebAssembly client is lacking
SCTP support right now. Qt contains 32bit WASM target at present which is
enough for our purposes, in Qt’s future plans they will support 64bit as well.
By switching to Qt, it enabled us to use the SCTP protocol easily through its
QSctpSocket and QSctpServer class. Although, we have a working SCTP file
transfer system now, the performance of the TCP based FTP transfer and our
SCTP and UDP based file transfer implementations need more investigation [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
Diferent message sizes shall be examined to find an optimal value for later use as
default. In the following development phase we will try to make SCTP work in
WebAssembly also.
      </p>
      <sec id="sec-2-1">
        <title>2.1. Customization of the Qt system</title>
        <p>
          The research work started by testing the Qt network examples. We found many
good solutions, but the most promising program was the MultiStreamServer and
the MultiStreamClient pair utilizing the SCTP protocol [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]. Trying to build and
run these sample programs in QtCreator, it yielded error messages because it could
not found the QSctpSocket class. This was solved by rebuilding the Qt system by
enabling the SCTP package for the Linux target. Looking for solution, it was
suggested to build it statically, but Qt was slow to compile and later the building
phase of the project was even slower. It was not efective enough at compilation
(binary executables were about 400 MB in size). This binary target will be used for
the distribution of the release version because it has no dependencies (see Figure 1).
For further optimization some other arguments were also added beside omitting the
static flag for testing dynamic binding. In this way compiling Qt became quicker
and building with this target was also faster.
2.2. SCTP
After having compiled the whole Qt system to support SCTP [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], we could try the
sample programs and investigate their features. MultiStreamServer and
MultiStreamClient have three channels for three distinct features as Movie, Time, and
Chat. This server-client pair was the base of our implementation.
        </p>
        <p>A new channel was added for file transfer that is based on the Chat provider.
It worked as expected with small files, but when we tried with bigger files, the
performance was subpar. A nanosecond timer was added to the client and to the
server to examine the packet sending and arrival rates. These timestamps are
visible on the console, and they are saved in server and client log files for later
processing. Using these logs we will optimize the algorithm.</p>
      </sec>
      <sec id="sec-2-2">
        <title>2.3. File management in WebAssembly</title>
        <p>
          The client was implemented in a way that it can be compiled in WebAssembly as
well [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. Reaching local resources shall be implemented in a diferent way. Since
WebAssembly programs run in a stacked virtual machine, our program can only
reach its own resources. In order to solve the problem, we need to redefine the Qt’s
own file access mechanism. One of the hardest challenges related to WebAssembly
was to make it possible to load data files from local resources into the program.
As our program runs on the WebAssembly stacked-machine, basically, we can only
reach the virtual machine’s filesystem. Our final solution is based on Morten
Johan Sørvig’s 1 example. It is implemented through a callback function mechanism.
Basically, we have to upload the local files to the WebAssembly memory, and from
there, the application can load in. At downloading the results of the supercomputer
work, the user can download the file similarly onto his computer, but the data goes
in the opposite direction. Right now, we have a test software for copying data files
(see Figure 2). This will be transformed to a real file transfer client software by
hiding the GUI elements needed for testing only, and it will be converted to a two
pane commander style application.
        </p>
        <p>1Morten Johan Sørvig solution is available here:
https://github.com/msorvig/qt-webassembly-examples/tree/master/emscripten_localfiles</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Conclusions of  ++ reimplementation</title>
      <p>
        The first solution to transfer files was using the standard FTP protocol which runs
over TCP. For testing we used a gigabit network. In real life circumstances the
speed fluctuated a lot in our throughout tests, and it was sustained around 40 Mbps
during a lot of time. This led us to create our own file transfer implementation.
The initial approach was to have a UDP data channel with a TCP control channel
similar to SABUL [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] which lived on as UDT until it was abandoned in 2013 [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ].
Solutions based on UDP, especially by adopting rate-based algorithms, give better
performance than other alternatives according to Cosimo Anglano et al. work [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
Later this led us to the conlusion to refine our software to use a UDP channel for
the control messages also [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. On lost of either the data packet or the acknowledge
packet, a resend is needed. Instead of the usual 40 Mbps transfer rate of the FTP
connection, we could reach a stable 800 Mbps with our UDP based FFTM software.
      </p>
      <p>
        The main reason for the reimplementation was the fact that contrary to   ,
 ++ programming language provides low-level access to the hardware. So our
intention was to increase the application’s performance. Qt’s container classes are
generally exception neutral. They pass any exception to the user while keeping
their internal state valid [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. Using try-catch blocks in   had big resource
requirement, so we replaced them with a more efective error handling solution.
For the data transfer we used QNetworkDatagram and QUdpSocket classes. We
could measure that the CPU utilization of the  ++ code was less than the  
implementation’s [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ]. For  ++ the throughput reached 817 Mbps at chunk size
of 1100 bytes, while   produced 239 Mbps. At chunk size of 4000 bytes these
values measured at 836 Mbps and 545 Mbps respectively. The former was a 3.42x
while the latter a 1.53x speedup. The decreasement in the CPU load was 50%
on average, which means a twofold acceleration (see Figure 3.). It is interesting
that parallel with the speedup, the packet transmission success rate decreased from
92.6% of the   software to 83.3% of the  ++ program.
      </p>
      <sec id="sec-3-1">
        <title>C++ implementation</title>
        <p>Java implementation
1,000
]
sp 800
b
M
[
te 600
a
r
r
fse 400
n
a
r
T
200
0
200
1,000
2,000
3,000
4,000</p>
      </sec>
      <sec id="sec-3-2">
        <title>Chunk size [bytes]</title>
        <p>The test server was a Cisco UCS C240 M5 having gigabit Ethernet connection,
connected to the Gyires supercomputer. The applied virtual machine runs under
VMWare’s vSphere 6.7 having 20 GB memory and 8 cores of an Intel® Xeon®
Gold 6130 CPU @ 2.10 GHz. The test machine has an Intel® Core™ i7 CPU 920
@ 2.67 GHz with 18 GB memory having gigabit Ethernet connection, connected
to the academic Internet network.</p>
        <p>The testing task was to transfer 60 TB data from desktop workstations to
the Gyires supercomputer for processing and download the results of a smaller
magnitude. This amount of data will be a typical usage in the future. At full
speed on gigabit connection this means minimum 5.79 days. FTP transfers slowed
down to the 40 Mbps range which could mean 138.89 days. Understandably, the
realized time of the transfer is between of these two extreme values.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Results</title>
      <p>Our first   implementation had a UDP data channel and a TCP control channel.
It was enhanced to a high-speed connectionless file transfer system by using UDP
control channel relying on Xinan Liu’s work. Later, reimplementing it in C++ the
software became more suitable for high-speed file transfer to supercomputer nodes.</p>
      <p>As low as 40 Mbps FTP transfers were sped up to 800 Mbps on busy
connections. Using WebAssembly, the client runs in browsers. SCTP was also added to
the desktop client. Reimplementing in  ++ yields a twofold speedup in execution.</p>
    </sec>
    <sec id="sec-5">
      <title>5. Future work</title>
      <p>We will investigate the efect of jumbo frames on the transfer rate with the diferent
algorithms. MTU sizes up to 9000 bytes will be tested. Our hope is that it helps to
get closer to 1000 Mbps. SCTP is disabled for the WASM target in the Qt system
at this time. Qt needs modification at the configuration process. We will try to
make it work in the future. The server shall be made multithreaded to service more
clients eficiently. Broken transfers will be enabled to resume later. The client will
be modified to be a two pane file transfer and manager software.</p>
      <p>Acknowledgements. This paper was supported by the FIKP-20428-3/2018/
FEKUTSTRAT project of the University of Debrecen, Hungary and by the
QoSHPC-IoT Laboratory. This work was supported by the construction
EFOP-3.6.3VEKOP-16-2017-00002. The project was supported by the European Union,
coifnanced by the European Social Fund.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Sawashima</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hori</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sunahara</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <article-title>Characteristics of UDP Packet Loss: Efect of TCP Trafic, in Proceeding of the 7th Annual Conference of the Internet Society</article-title>
          , Kuala Lumpur,
          <string-name>
            <surname>Malaysia</surname>
          </string-name>
          (
          <year>June 1997</year>
          ), URL https://web.archive.org/ web/20160103125117/https:/www.isoc.org/inet97/proceedings/F3/F3_1.HTM.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <article-title>[2] Gyires supercomputer (May 8,</article-title>
          <year>2020</year>
          ), URL https://hpc.unideb.hu/hu/node/219.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Schuller</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pohlmann</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <article-title>UFTP: High-Performance Data Transfer for UNICORE</article-title>
          , in M. Romberg,
          <string-name>
            <given-names>P.</given-names>
            <surname>Bała</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Müller-Pfeferkorn</surname>
          </string-name>
          , D. Mallmann, editors,
          <source>7th UNICORE Summit 2011 Proceedings</source>
          , vol.
          <source>IAS Series 9</source>
          ,
          <string-name>
            <given-names>Forschungszentrum</given-names>
            <surname>Jülich</surname>
          </string-name>
          <string-name>
            <surname>GmbH</surname>
          </string-name>
          , Toruń,
          <source>Poland (July</source>
          <year>2011</year>
          ),
          <source>ISSN 1868-8489</source>
          , pp.
          <fpage>135</fpage>
          -
          <lpage>142</lpage>
          , URL https://core.ac.uk/download/pdf/34995345.pdf#page=
          <fpage>144</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Rourke</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Learn</surname>
            <given-names>WebAssembly</given-names>
          </string-name>
          :
          <article-title>Build web applications with native performance using Wasm and C/C++</article-title>
          , Packt Publishing Ltd.,
          <string-name>
            <surname>Birmingham</surname>
          </string-name>
          , England, 1st edn.
          <source>(September</source>
          <volume>24</volume>
          ,
          <year>2018</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <surname>Gn</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <article-title>Multimedia Streaming in MANETs using SCTP, LAP LAMBERT Academic Publishing, paperback edn</article-title>
          . (
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <surname>Khatri</surname>
            ,
            <given-names>S.,</given-names>
          </string-name>
          <article-title>SCTP Performance Improvement Based on: Adaptive Retransmission Time-Out Adjustment, LAP LAMBERT Academic Publishing, paperback edn</article-title>
          . (
          <year>2012</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Lazar</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Penea</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <source>Mastering Qt</source>
          <volume>5</volume>
          :
          <article-title>Create stunning cross-platform applications</article-title>
          , Packt Publishing Ltd.,
          <string-name>
            <surname>Birmingham</surname>
          </string-name>
          ,
          <source>England (December</source>
          <volume>15</volume>
          ,
          <year>2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <surname>Eng</surname>
            ,
            <given-names>L. Z.</given-names>
          </string-name>
          , Qt5 C+
          <article-title>+ GUI Programming Cookbook: Practical recipes for building cross-platform GUI applications, widgets, and animations with Qt 5</article-title>
          ,
          <string-name>
            <surname>Packt</surname>
            <given-names>Publishing Ltd.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Birmingham</surname>
          </string-name>
          , England, 2nd edn.
          <source>(March</source>
          <volume>27</volume>
          ,
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Qt</surname>
            <given-names>for WebAssembly</given-names>
          </string-name>
          (
          <year>December 16</year>
          ,
          <year>2019</year>
          ), URL https://wiki.qt.io/Qt_for_ WebAssembly.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Madhuri</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Reddy</surname>
            ,
            <given-names>P. C.</given-names>
          </string-name>
          ,
          <article-title>Performance comparison of TCP, UDP and SCTP in a wired network</article-title>
          ,
          <source>in 2016 International Conference on Communication and Electronics Systems (ICCES)</source>
          , Coimbatore, India (
          <year>October 2016</year>
          ),
          <source>ISBN 978-1-5090-1066-0</source>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>6</lpage>
          , doi:10.1109/CESYS.
          <year>2016</year>
          .
          <volume>7889934</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Leung</surname>
            ,
            <given-names>V. C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ribeiro</surname>
            ,
            <given-names>E. P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wagner</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Iyengar</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <article-title>Multihomed Communication with SCTP (Stream Control Transmission Protocol)</article-title>
          , CRC Press Taylor &amp; Francis Group,
          <volume>1st</volume>
          <fpage>edn</fpage>
          . (
          <year>2012</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>Stream</given-names>
            <surname>Control Transmission Protocol</surname>
          </string-name>
          , URL https://en.wikipedia.org/wiki/ Stream_Control_Transmission_Protocol,
          <source>the page was last edited on 29 December</source>
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>Gallant</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          , WebAssembly in Action, Manning Publications Co.,
          <string-name>
            <surname>Shelter</surname>
            <given-names>Island</given-names>
          </string-name>
          , New York, 1st edn.
          <source>(December 7</source>
          ,
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>Gu</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grossman</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <article-title>SABUL: A Transport Protocol for Grid Computing</article-title>
          ,
          <source>Journal of Grid Computing</source>
          , vol.
          <volume>1</volume>
          (
          <issue>4</issue>
          ) (
          <year>Dec 2003</year>
          ):pp.
          <fpage>377</fpage>
          -
          <lpage>386</lpage>
          , ISSN 1572- 9184, doi:10.1023/B:GRID.
          <volume>0000037553</volume>
          .18581.3b, URL https://doi.org/10.1023/ B:GRID.
          <volume>0000037553</volume>
          .18581.
          <year>3b</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <article-title>UDP-based Data Transfer Protocol (UDT)</article-title>
          , URL https://udt.sourceforge.io/.
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>Anglano</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Canonico</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>A Comparative</surname>
          </string-name>
          <article-title>Evaluation of High-Performance File Transfer Systems for Data-intensive Grid Applications, 13th IEEE International Workshops on Enabling Technologies: Infrastructure for Collaborative Enterprises</article-title>
          (
          <year>June 2004</year>
          ):pp.
          <fpage>283</fpage>
          -
          <lpage>288</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>Liu</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          ,
          <source>ReliableFileTransferProtocol (October</source>
          <volume>30</volume>
          ,
          <year>2015</year>
          ), URL https://github. com/xinan/ReliableFileTransferProtocol/tree/master/src.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>Exception</surname>
            <given-names>Safety</given-names>
          </string-name>
          , URL https://doc.qt.io/qt-5/exceptionsafety.html, visited on 2020-
          <volume>01</volume>
          -28.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <surname>Java</surname>
            <given-names>performance</given-names>
          </string-name>
          , URL https://en.wikipedia.org/wiki/Java_performance#
          <source>cite_note-43, the page was last edited on 7 November</source>
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>