Instant Ebooks Textbook Network Programming With Rust 1st Edition Abhishek Chanda Download All Chapters
Instant Ebooks Textbook Network Programming With Rust 1st Edition Abhishek Chanda Download All Chapters
com
https://textbookfull.com/product/network-
programming-with-rust-1st-edition-abhishek-chanda/
https://textbookfull.com/product/programming-webassembly-with-
rust-1st-edition-kevin-hoffman/
textbookfull.com
https://textbookfull.com/product/programming-rust-1st-edition-jim-
blandy/
textbookfull.com
https://textbookfull.com/product/the-rust-programming-language-covers-
rust-2018-steve-klabnik/
textbookfull.com
https://textbookfull.com/product/the-natural-history-of-flowers-
michael-fogden/
textbookfull.com
https://textbookfull.com/product/paul-a-biography-1st-edition-n-t-
wright/
textbookfull.com
https://textbookfull.com/product/standard-catalog-of-world-
coins-1901-2000-45th-edition-thomas-michael-editor/
textbookfull.com
The Perennial Way New English Versions of Yoga Sutras
Dhammapada Heart Sutra Ashtavakra Gita Faith Mind Sutra
Tao Te Ching and More Bart Marshall
https://textbookfull.com/product/the-perennial-way-new-english-
versions-of-yoga-sutras-dhammapada-heart-sutra-ashtavakra-gita-faith-
mind-sutra-tao-te-ching-and-more-bart-marshall/
textbookfull.com
Network Programming with
Rust
Abhishek Chanda
BIRMINGHAM - MUMBAI
Network Programming with Rust
Copyright © 2018 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form
or by any means, without the prior written permission of the publisher, except in the case of brief quotations
embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented.
However, the information contained in this book is sold without warranty, either express or implied. Neither the
author, nor Packt Publishing or its dealers and distributors, will be held liable for any damages caused or alleged to
have been caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products
mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy
of this information.
ISBN 978-1-78862-489-3
www.packtpub.com
To my wife, Anasua, for being an amazing partner and friend, and also for all the diagrams in
this book.
To the memory of my mother, Sikha, for her sacrifices and for exemplifying the power of
determination.
mapt.io
Mapt is an online digital library that gives you full access to over 5,000 books and videos, as
well as industry leading tools to help you plan your personal development and advance
your career. For more information, please visit our website.
Why subscribe?
Spend less time learning and more time coding with practical eBooks and Videos
from over 4,000 industry professionals
Improve your learning with Skill Plans built especially for you
PacktPub.com
Did you know that Packt offers eBook versions of every book published, with PDF and
ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a
print book customer, you are entitled to a discount on the eBook copy. Get in touch with us
at service@packtpub.com for more details.
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a
range of free newsletters, and receive exclusive discounts and offers on Packt books and
eBooks.
Contributors
I would like to thank Packt and their wonderful team for making this possible, especially
Vikas, Chaitanya, Madhunikita, and Diwakar. I am grateful to Pradeep and all the
reviewers for their insightful comments. This book would not have been possible without
the support of my wife, Anasua.
About the reviewer
Pradeep R is a software professional at Gigamon. He is a technology enthusiast passionate
about network programing and security, with wide experience in working on leading
enterprise network switching and routing solutions and in development and deployment of
traditional network security elements. Currently, he is working on next-generation network
pervasive visibility solutions.
He extensively works with C, C++, Python, JavaScript, Perl, and occasionally with Java,
.NET, and Rust. Pradeep has recently reviewed Rust Cookbook.
I would like to thank Vigneshwer Dhinakaran, my brother, who has shown me that
boundaries exists only in our minds and they are meant to be breached. I would also like to
acknowledge with gratitude my mother, Vasanthi, my grandma, Sulochana, and my sister,
Deepika, for their constant encouragement and support.
[ ii ]
Table of Contents
Index 258
[ iii ]
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Preface
Rust has steadily become one of the most important new programming languages in recent
years. Like C or C++, Rust enables the developer to write code that is low-level enough to
make Rust code quickly. And since Rust is memory-safe by design, it does not allow code
that can crash on a null pointer exception. These properties make it a natural choice for
writing low-level networking applications. This book will enable developers to get started
with writing networking applications with Rust.
Chapter 2, Introduction to Rust and its Ecosystem, contains an introduction to Rust. This is an
overall introduction that should be good enough to get the reader started. We do assume
some familiarity with programming.
Chapter 3, TCP and UDP Using Rust, dives into using Rust for networking. We start with
basic socket programming using the standard library. We then look at some crates from the
ecosystem that can be used for network programming.
Chapter 4, Data Serialization, Deserialization, and Parsing, explains that an important aspect
of networked computing is handling data. This chapter is an introduction to serializing and
deserializing data using Serde. We also look at parsing using nom and other frameworks.
Chapter 5, Application Layer Protocols, moves up a layer to look at protocols that operate
above TCP/IP. We look at a few crates to work with, such as RPC, SMTP, FTP, and TFTP.
Preface
Chapter 6, Talking HTTP in the Internet, explains that arguably the most common
application of the internet is HTTP. We look at crates such as Hyper and Rocket which are
used for writing HTTP servers and clients.
Chapter 7, Asynchronous Network Programming Using Tokio, looks at the Tokio stack for
asynchronous programming using futures, streams, and event loops.
Chapter 8, Security, delves into securing the services we have described so far. This is using
certificates and secret keys.
Chapter 9, Appendix, discusses a number of crates have appeared that propose alternate
ways of doing things already covered in this book. This includes the async/await syntax,
parsing using Pest, and so on. We will discuss some of these in the appendix.
[2]
Preface
Once the file is downloaded, please make sure that you unzip or extract the folder using the
latest version of:
The code bundle for the book is also hosted on GitHub at https://github.com/
PacktPublishing/Network-Programming-with-Rust. We also have other code bundles from
our rich catalog of books and videos available at https://github.com/PacktPublishing/.
Check them out!
Conventions used
There are a number of text conventions used throughout this book.
CodeInText: Indicates code words in text, database table names, folder names, filenames,
file extensions, pathnames, dummy URLs, user input, and Twitter handles. Here is an
example: "The target directory contains compilation artifacts."
Bold: Indicates a new term, an important word, or words that you see onscreen. For
example, words in menus or dialog boxes appear in the text like this. Here is an example: "It
will not need to call connect for that same connection:"
[3]
Preface
Get in touch
Feedback from our readers is always welcome.
General feedback: Email feedback@packtpub.com and mention the book title in the
subject of your message. If you have questions about any aspect of this book, please email
us at questions@packtpub.com.
Errata: Although we have taken every care to ensure the accuracy of our content, mistakes
do happen. If you have found a mistake in this book, we would be grateful if you would
report this to us. Please visit www.packtpub.com/submit-errata, selecting your book,
clicking on the Errata Submission Form link, and entering the details.
Piracy: If you come across any illegal copies of our works in any form on the Internet, we
would be grateful if you would provide us with the location address or website name.
Please contact us at copyright@packtpub.com with a link to the material.
If you are interested in becoming an author: If there is a topic that you have expertise in
and you are interested in either writing or contributing to a book, please visit
authors.packtpub.com.
Reviews
Please leave a review. Once you have read and used this book, why not leave a review on
the site that you purchased it from? Potential readers can then see and use your unbiased
opinion to make purchase decisions, we at Packt can understand what you think about our
products, and our authors can see your feedback on their book. Thank you!
[4]
Introduction to Client/Server
1
Networking
This book is an introduction to writing networking applications in Rust. This title begs two
questions: why should anyone care about networking? And why would anyone want to
write networking applications in Rust? We attempt to answer the first question in this
chapter. We will introduce Rust and network programming using Rust in subsequent
chapters. Firstly, in this chapter, we will start with a bit of history and try to understand
how network architecture evolved over the last hundred years. In subsequent sections, we
will see how modern networks are layered and addressed. Afterwards, we will describe
common service models used in networking. We will end with a summary of networking-
related programming interfaces that Linux exposes. Note that this book deliberately ignores
network programming in other operating systems and focuses only on Linux for the sake of
simplicity. While the Rust compiler is platform-agnostic, there can be cases where some
things are different in other platforms compared to Linux. We will point out those
differences as we progress.
History of networking: why and how networks came into use and how the
internet evolved
Layering in networks: how layering and encapsulation works
Addressing: how networks and individual hosts are uniquely identified on the
internet
How IP routing works
How DNS works
Service models for data delivery
The network programming interface in Linux
Introduction to Client/Server Networking Chapter 1
Since networks evolved in silos all around the world, they were often organized according
to geographical proximity. A Local Area Network (LAN) is a collection of host machines in
small proximity like a building or a small neighborhood. A Wide Area Network (WAN) is
one that connects multiple neighborhoods; the global internet is at the top of the
hierarchy. The next picture shows a map of the ARPANET in 1977. Each node in this map is
a computer (a server, in today's terms). Most of these were located in large universities like
Stanford or at national laboratories like Lawrence Berkeley (source: https://commons.
wikimedia.org/wiki/File:Arpanet_logical_map,_march_1977.png).
[6]
Introduction to Client/Server Networking Chapter 1
Layering in networks
Computer science often focuses on subdividing a problem into smaller, hopefully
independent components that can be solved in isolation. Once that is done, all that is
needed is a set of rules on how those components should communicate to have a solution to
the larger problem. This set of rules, along with a pre-agreed data format, is called a
protocol. A network is composed of a number of layers, each of which has a fixed purpose.
Thus, each of these layers run one or many protocols, forming a stack of protocols. In the
early days of networking, different people implemented their networks in different ways.
When the internet was conceived, there was a need to make these networks communicate
seamlessly. Since they were constructed differently, this turned out to be difficult.
[7]
Introduction to Client/Server Networking Chapter 1
There was a clear need to agree on standard protocols and interfaces to make the internet
work. The first attempt at standardizing networking protocols was in 1977, which led to the
OSI model. This model has the following layers:
The following figure shows a visual representation of this model (source: https://commons.
wikimedia.org/wiki/File:Osi-model-jb.svg). This also shows two vertical classifications,
the host running the network stack and the physical media (including the wire and the
network device). Each layer has its own data unit, the representation of the information it
works on, and since each layer encapsulates the one below it, the data units encapsulate too.
A number of bits form a frame, a number of frames form a packet, and so on, to the top:
[8]
Introduction to Client/Server Networking Chapter 1
While OSI was working on standardizing this model, Defense Advanced Research Projects
Agency (DARPA) came up with a full implementation of the much simpler TCP/IP model
(also known as the IP (Internet Protocol) suite). This model has the following layers, from
closest to the physical medium to the farthest:
Hardware interface layer: This is a combination of layers one and two of the OSI
model. This layer is responsible for managing media access control, handling
transmission and reception of bits, retransmission, and coding (some texts on
networking differentiate between the hardware interface layer and the link layer.
This results in a five layer model instead of four. This hardly matters in practice,
though.)
IP layer: This layer corresponds to layer three of the OSI stack. Thus, this layer is
responsible for two major tasks: addressing hosts and networks so that they can
be uniquely identified and given a source and a destination address, and
computing the path between those given a bunch of constraints (routing).
Transport layer: This layer corresponds to layer four of the OSI stack. This layer
converts raw packets to a stream of packets with some guarantees: in-order
delivery (for TCP) and randomly ordered delivery (for UDP).
[9]
Introduction to Client/Server Networking Chapter 1
Application layer: This layer combines layers five to seven of the OSI stack and is
responsible for identifying the process, data formatting, and interfacing with all
user level applications.
Note that the definition of what a particular layer handles changes as we move from one
layer to another. The hardware interface layer handles collection of bits and bytes
transmitted by hosts, the IP layer handles packets (the collection of a number of bytes sent
by a host in a specific format), the transport layer bunches together packets from a given
process on a host to another process on another host to form a segment (for TCP) or
datagram (for UDP), and the application layer constructs application specific
representations from the underlying stream. For each of these layers, the representation of
data that they deal with is called a Protocol Data Unit (PDU) for that layer. As a
consequence of this layering, when a process running on a host wants to send data to
another host, the data must be broken into individual chunks. As the chunk travels from
one layer to another, each layer adds a header (sometimes a trailer) to the chunk, forming
the PDU for that layer. This process is called encapsulation. Thus, each layer provides a set
of services to layers above it, specified in the form of a protocol.
The modern internet exhibits a form of geographical hierarchy. Imagine a number of homes
which are served by a number of Internet Service Providers (ISPs). Each of these homes
is in a LAN (either via Ethernet, or more commonly, Wi-Fi). The ISP connects many such
LANs in a WAN. Each ISP has one or many WANs that they connect to form their own
network. These larger networks, spanning cities, which are controlled by a single business
entity, are called Administrative Systems (AS). Routing between multiple ISPs is often
more complex than regular IP routing since they have to take into account things like
trading agreements and so on. This is handled by specialized protocols like the Border
Gateway Protocol (BGP).
As mentioned before, one of the earliest and most successful networking technologies is
Ethernet. First introduced in 1974, it quickly became the predominant technology for LAN
and WAN due to its low cost and relative ease of maintenance. Ethernet is a shared media
protocol where all the hosts must use the same physical medium to send and receive
frames. Frames are delivered to all hosts, which will check if the destination MAC address
(these addresses will be described in the next section) matches its own address. If it does,
the frame is accepted, otherwise, it is discarded. Since the physical medium can only carry
one signal at any given moment, there is a probability that frames might collide in transit. If
that does occur, the sender can sense the collision by sensing transmission from other hosts
while it is transmitting its frame. It then aborts the transmission and sends a jam signal to
let other hosts know of the collision. Then, it waits for an exponentially backed off amount
of time and retries the transmission. After a fixed number of attempts, it gives up if the
transmission does not succeed.
[ 10 ]
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
Introduction to Client/Server Networking Chapter 1
This scheme is called carrier-sense multiple access with collision detection (CSMA/CD).
One problem with Ethernet is its relatively short range. Depending on the physical wiring
technology used, the maximum length of an Ethernet segment varies between 100 m to 500
m. Thus, multiple segments must be connected to form a larger network. The most common
way of doing that is using layer two switches between two adjacent Ethernet segments.
Each port of these switches forms different collision domains, reducing the overall
probability of collisions. These switches can also monitor traffic to learn which MAC
addresses are on which ports so that eventually, they will send out frames for that MAC
address only on that port (referred to as a learning switch). In modern homes, Wi-Fi is often
the dominant LAN technology compared to Ethernet.
Addressing in networks
We have seen why it is important to identify hosts and networks uniquely to be able to
deliver packets reliably. Depending on the scale, there are three major ways of doing this;
we will discuss each of those in this section. The end to end process of IP routing will be
discussed in the next section. One interesting fact to note is that for each of these addressing
modes, one or more addresses are reserved for special use. Often, these are marked by a
known set of bits being on or off in a known pattern:
Ethernet address: This is also known as a Media Access Control (MAC) address.
It is a 48-bit long unique identifier assigned to a network device (usually stored
on the card) that is used to identify it in a network segment. Usually, these are
programmed by the network card manufacturer, but all modern OS's allow one
to modify it. The standard way of writing Ethernet addresses are in six groups of
two hexadecimal digits (01-23-45-67-89-ab-cd-ef). Another common way is to use
a colon to separate the digits (01:23:45:67:89:ab:cd:ef). A few special sequences of
bits are reserved for addressing special cases: the sender can request that an
Ethernet frame should be received by all hosts in that segment by setting the least
significant bit of the first octet to 1; this is called multicasting. If that particular bit
is set to 0, the frame should be delivered to only one receiver. Today, these are
used widely with Ethernet and Wi-Fi.
[ 11 ]
Introduction to Client/Server Networking Chapter 1
Apart from these, communication between hosts often uses a port number to distinguish
between processes. When the OS allocates a specific port to a process, it updates its
database of the mapping between process identifier and port number. Thus, when it
receives incoming packets on that port, it knows what process to deliver those packets to. In
case the process has exited by that time, the OS will drop the packets and in the case of TCP,
initiate closing of the connection. In the subsequent sections, we will see how TCP works in
practice.
A range of port numbers between 0 and 1024 are reserved for common
services by the OS. Other applications are free to request any port above
1024.
[ 12 ]
Introduction to Client/Server Networking Chapter 1
[ 13 ]
Introduction to Client/Server Networking Chapter 1
There are two broad classes of IP address; some blocks of addresses can be routed in the
public internet, these are called public IP addresses. Some other blocks can only be used in
private networks that do not directly interface with the internet, these are called private
addresses. If a router on the internet receives a packet that is destined for a private IP
address, it will have to drop that packet. Other than these two, IP addresses are also
classified on various parameters: some are reserved for documentation only (192.0.2.0/24),
some are reserved for point to point communication between two hosts (169.254.0.0/16), and
so on. The Rust standard library has convenience methods to classify IP addresses
according to their types.
All routers maintain a routing table which maps prefixes to the outgoing interface of the
router (while a router administrator might decide to store individual addresses instead of
prefixes, this will quickly lead to a large routing table in a busy router). An entry in the table
basically says If a packet needs to go to this network, it should be sent on this interface. The next
host that receives the packet might be another router or the destination host. How do
routers figure out this table? Multiple routers run routing protocols between those which
compute those tables. Some common examples are OSPF, RIP, and BGP. Given these
primitives, the actual routing mechanism is fairly simple, as shown in the next diagram.
An interesting aspect of IP is the use of the Time To Live (TTL) field, this is also known as
hop limit. The host sends out packets with a fixed value of TTL (usually 64). Each router the
packet crossed decreases the TTL. When it reaches 0, the packet is discarded. This
mechanism ensures that packets are not stuck in an infinite loop between routers:
[ 14 ]
Introduction to Client/Server Networking Chapter 1
Note that while trying to match the prefix to routes in the routing table, multiple routes
might match. If that happens, the router must select the most specific match and use that for
forwarding. Since the most specific routes will have the maximum number of leading 1s,
and hence the largest prefix, this is called the longest prefix match. Say our router has the
following routing table, as shown in the diagram. eth1, eth2, and eth3 are three network
interfaces attached to our router, each having a different IP address in different networks:
At this point, if our device gets a packet that has a destination address set to 192.168.1.33, all
three prefixes have this address but the last one is the largest of the three. So, the packet will
go out through eth3.
A lot of what we described so far about IPv4 addresses does not change for IPv6, except, of
course, it has a larger address space of 128 bits. In this case, the length of the network mask
and the host mask depends on the address type.
One might be wondering, how do routers construct the routing table? As always, there are
protocols to help with that. Routing protocols are of two major types: interior gateway
protocols which are used for routing inside an autonomous system, and exterior gateway
protocols which are used in routing between autonomous systems; an example of the latter
is BGP. Interior gateway protocols can again be of two types, depending on how they look
at the whole network. In link state routing, each router participating in the protocol
maintains a view of the whole network topology. In distance vector routing, each router
only knows about its one hop neighbors. An example of the former is the Routing
Information Protocol (RIP) and of the latter is Open Shortest Path First (OSPF). Details
about these are beyond the scope of this book. However, we can note that the common
theme among all the routing protocols is that they work by exchanging information
between routers. Thus, they have their own packet formats for encapsulating that
information.
[ 15 ]
Random documents with unrelated
content Scribd suggests to you:
à José Germain
CHAPITRE II
(9 mars 1916).
Le cheval du cuirassier, une superbe bête, est attaché à un arbre. Comme
des obus battent la lisière du bois, il regimbe. Son cavalier le calme et lui
parle à voix basse, puis l’enfourche et nous demande si nous sommes prêts.
La question est moins une politesse qu’une injonction. Hélas! oui, nous
sommes prêts. Nous nous mettons lentement en route. La canonnade s’est
apaisée. Toute la campagne est blanche. Il fait froid. Où dormirons-nous, ce
soir? Après tant de forces dépensées, nous éprouvons un violent besoin de
dormir. La tension des jours derniers et l’excitation du combat sont
tombées, une pesante lassitude nous reste, et de la fièvre.
A peine sortis du bois, nous voici au milieu d’attelages en station.
—Ravitaillement, dit le cuirassier.
Ce sont en effet des cuisines roulantes, arrêtées en ordre et formées en
parc. Toutes les voitures sont attelées de quatre chevaux; tous les chevaux
ont une couverture dépliée sur le dos. Les hommes de corvée sont
silencieux. Ils nous regardent passer, ne nous reconnaissent peut-être pas,
s’écartent, et ne disent rien.
Il tombe de la neige en flocons menus et du verglas. La route est
défoncée et creusée d’ornières profondes. Nous glissons. Il faut se raidir
pour éviter les chutes, et on ne les évite pas toujours. Le cuirassier, qui a
toutes les peines à tenir son cheval, met pied à terre.
Peu à peu, lentement, nous nous éloignons du champ de bataille et de la
ligne de feu. Les obus français ne nous gênent plus. Les carrefours sont
libres. Notre artillerie n’entrave pas à cette heure, et si loin, le travail
nocturne, toujours si intense. Des coups de canon nous arrivent assourdis.
Nous sommes prisonniers. C’est la pensée obsédante. Nous sommes des
vaincus, et nous marchons vers l’exil. Quel sort nous est réservé? Et surtout,
comment préviendrons-nous ceux qui vont s’inquiéter là-bas? Nous
n’avions jamais prévu que nous pourrions tomber vivants aux mains de
l’ennemi. Demain, les papiers officiels nous porteront comme «disparus».
Or, nous avons trop souvent répété nous-mêmes que «disparu» est un mot
de politesse et de pudeur qui cache un autre mot, trop pénible. Seront-ils
rassurés, et quand seront-ils enfin rassurés, ceux qui peut-être dans quelques
jours nous pleureront? Mornes et douloureuses pensées, que notre fièvre
ressasse à loisir.
Le cuirassier essaye de lier conversation. Va-t-il nous demander si nous
croyons qu’ils prendront Verdun? C’est un grand gaillard maigre, sans
manteau, coiffé du casque à pointe. Il baragouine un peu de français, appris
dans nos villages occupés, et nous baragouinons, le capitaine et moi, un peu
d’allemand, souvenir des leçons du collège. Pourtant nous parvenons à nous
entendre à peu près.
Il est Prussien, il est sur le front depuis le début; il a pris part aux
premières batailles dans le Nord, quand c’étaient encore les jours de la
cavalerie et des combats d’hommes. Il nous dit, ce que nous avons déjà
entendu plus de dix fois depuis que nous sommes prisonniers, que pour
nous la guerre est finie. Il accompagne sa phrase d’un soupir de regret, et
nous demande si nous croyons et si l’on croit en France que «ça durera
longtemps encore». Comme nous n’avons aucune raison de lui dorer la
pilule, le capitaine V*** lui répond:
—Quand la France sera kapùt (abattue, morte, détruite), quand
l’Allemagne sera kapùt, il ne restera plus debout que les Anglais. Alors, la
guerre sera finie,—dans deux ou trois ans.
Tristement, le cuirassier approuve. Il n’aime pas l’Angleterre. Il suit la
mode. Lecteur docile des journaux, il n’en veut à la France ni du mal qu’ils
ont voulu nous faire, ni du mal qu’ils nous ont fait, ni de tout le mal qu’ils
n’ont pas pu nous faire, précisément parce que l’Angleterre les empêcha de
mener jusqu’au bout leur fureur. Et maintenant l’Allemagne déteste cette
France si pitoyable qui s’est défendue, mais elle hait terriblement
l’Angleterre, car l’Allemagne a fini par découvrir pour les besoins de sa
cause et par imposer à ses hommes cette idée que c’est l’Angleterre qui a
cherché la guerre. Le cuirassier prussien s’apitoie en effet sur notre pauvre
France. Comme la route que nous suivons est labourée d’ornières très
profondes, qui lui donnent un aspect irréparable, il nous dit:
—Après la guerre, ça vous coûtera cher, la remise en état de ces
chemins, ils sont bien abîmés. Partout c’est pareil. De même pour vos
forêts: nous les avons complètement déboisées.
Dans ce paysage de neige et de misère, cette phrase, moins charitable
que cynique, car le cuirassier ne regrette rien, nous brise le cœur. Répondre?
Et quoi? Que les coupables seront punis? Qu’ils seront condamnés à payer?
Mais ne faut-il pas retenir cet aveu d’un simple soldat, qui marque leur
impuissance désormais certaine, qu’ils ne semblent plus espérer garder pour
eux ces terres qu’ils occupent en Belgique et chez nous?
Tout en devisant tant bien que mal, nous arrivons à hauteur de l’ancienne
première ligne française, celle du 20 février 1916. Nous n’en voyons pas
grand’chose. De chaque côté de la route partiellement refaite, nous
apercevons des éléments de tranchées clayonnées, des sacs à terre, des
créneaux, un réseau de fils de fer. Ce petit coin du champ de bataille paraît
intact, ou du moins peu endommagé. Autant que la nuit nous le permet,
nous remarquons aussi que la position est telle que nous l’avons perdue et
que, comme nous disons en style militaire, les tranchées n’ont pas été
«retournées» contre nous par les Allemands en vue d’une défense probable.
La route est longue et pénible, et nous sommes fatigués. Le cuirassier ne
sait pas très bien où il nous conduit. Il parle d’Azanne et de Villes, sans que
nous puissions démêler si nous allons à Villes ou à Azanne. Mais nous
sommes prisonniers, et nous n’avons qu’à nous laisser conduire.
De grandes ombres trapues se découpent sur le bord de la route.
—Des minenwerfer tout neufs, nous dit le cuirassier.
Il y en a une douzaine, qui attendent sous la neige. A leur suite deux
masses plus hautes et plus longues, plus élégantes aussi: ce sont deux
canons lourds, mais des canons français, de 155, pris à nos artilleurs. Nous
les reconnaissons sans avoir recours aux complaisances un peu trop crues
de notre guide.
Un convoi nous précède. Un carrefour est encombré de voitures et de
chevaux. Dans le désordre et le brouhaha, des blessés légers gagnent par
leurs propres moyens le premier poste d’évacuation. L’un d’eux, qui a gardé
son fusil, nous apostrophe violemment. Le cuirassier lui fait remarquer que
nous ne comprenons pas. Et lui, s’emportant, déclare qu’il faudra bien que
nous comprenions et que nous parlions l’allemand, comme tout le monde,
car personne n’aura plus le droit de connaître une autre langue que la leur.
Ce troupier de deuxième classe, socialiste ou césarien, est un pangermaniste
convaincu.
Comme cette marche est pénible! Nous glissons, nous tombons, nous
soufflons, nous avons soif. Précisément nous touchons à une espèce de
bivouac. Un soldat boche, sous une petite baraque en plein vent éclairée par
une lanterne, travaille à je ne sais quelle réparation. Le cuirassier l’appelle
et lui demande s’il a de l’eau à nous donner. L’homme n’en a pas, mais il
prend un de nos bidons et disparaît pour aller chercher ce que nous désirons
tant. Et nous nous asseyons près de la baraque.
Quelques minutes après, l’homme revient. Quelle joie! Mais quelle
stupeur quand nous voyons qu’au lieu de nous rendre le bidon, l’homme
l’approche de sa bouche, avale une gorgée d’eau, passe sa main sur le
goulot et tend la gourde au capitaine! Cela, évidemment, pour nous prouver
qu’il n’avait pas empoisonné notre boisson. Et voilà que ce mince tableau
de guerre me rappelle des histoires de l’autre guerre, de celle qui a nourri
notre enfance. Je revois les Prussiens de 1870 faisant goûter par leurs hôtes
forcés les mets qu’on leur avait préparés; et je songe à leur méfiance
perpétuelle, parce qu’ils n’ont jamais l’âme tranquille, et je songe aussi que,
plus naïf et donc inférieur selon leur morale, je n’aurais même pas pensé
que l’eau de cet homme pût être empoisonnée. J’ai souri du geste de ce
soldat allemand, geste pour la galerie comme ils en font toujours, geste pour
pays neutres, geste si peu français. J’ai bu de cette eau. J’aurais vidé le
bidon tout seul sans être rassasié. Nous étions quatre à nous partager un litre
de cet élixir.
Enfin nous allons arriver à Villes, car nous apprenons que nous allons à
Villes. Pour les derniers cent mètres, nous tendons le jarret. En cachette, je
fais l’examen de mes poches. Je déchire en menus morceaux tous les
papiers que je possède, des lettres, des photographies, deux billets de
banque, et je les sème peu à peu dans le fossé de la route.
Encore un coup de collier et nous arrivons à Villes.
L’aspect du village est tragique dans cette nuit de lune. Nous savions
bien déjà, hélas! ce que la guerre peut faire d’une bourgade en
l’anéantissant comme à Souchez, par exemple, et en l’écrasant sous les obus
au point de ne plus permettre à l’agent de liaison égaré de retrouver même
l’emplacement approximatif de l’église. Mais ce village que nous avons
devant nous a été systématiquement détruit par l’ennemi. Quelques maisons
sont en ruines, certes, et des canons ou des avions en sont la cause à peu
près certaine: mais toutes les autres maisons qui sont intactes, ou du moins
qui ont encore leurs murs debout, n’ont pas autre chose: les portes, les
fenêtres, les planchers, les poutres, les chevrons, tout ce qui est charpente
ou menuiserie, et naturellement les meubles aussi, on a tout enlevé, soit
pour étayer des tranchées ou construire des abris-cavernes, soit pour faire
du feu. Et je ne parle pas de tout ce que l’on a pu expédier en Allemagne.
C’est le premier village de ce genre que nous voyons: une tristesse lourde
nous pèse sur les épaules.
Il nous faut traverser ce village mort dans toute sa longueur, en
pataugeant dans la neige et la boue, et en évitant de nous cogner aux
hommes de corvée qui grouillent autour de nous. C’est ici le même ordre et
le même silence que nous avons remarqués près de la ligne de feu. On nous
regarde beaucoup, mais personne ne nous adresse la parole. Le cuirassier
s’informe du chemin à suivre. On nous conduit au P. C. de la division, qui
se trouve en dehors de l’agglomération.
Un long sentier de caillebotis nous dirige vers le point que nous croyons
être le terme de notre route. Nous nous y engageons, heureux d’échapper à
la boue glaciale. Nous sommes en pleine campagne. D’immenses tentes se
dressent devant nous: c’est un lazarett (hôpital). Nous nous rangeons pour
laisser passer un blessé que l’on ramène sur un brancard de la salle
d’opérations. A notre gauche, un moteur ronfle. Nous pensons que c’est
grâce à lui que tout le campement que nous traversons est éclairé à la
lumière électrique.
Le P. C. de la division est un gourbi vraiment colossal, creusé dans la
terre, couvert et étayé d’un nombre surprenant de rondins, et l’ensemble a la
forme d’une pyramide de proportions excessives. Jamais nous n’avions vu
d’abri de cette importance. Il est vrai que la vie d’un général de division est
chose sacrée en Allemagne, et nous n’ignorons pas que le Kronprinz lui-
même a donné l’exemple des précautions à prendre à la guerre. On accède
au P. C. par un couloir à ciel ouvert taillé dans le flanc de la pyramide. Au
fond, deux portes. Le cuirassier frappe à l’une d’elles et pénètre dans une
vaste salle où nous apercevons plusieurs officiers. Nous attendons devant la
porte, pendant que notre cuirassier rend compte de notre arrivée et remet
l’ordre écrit qui nous accompagne. Deux officiers sortent nu-tête, crânes
tondus, nous regardent, ne nous disent rien, et rentrent. Une ordonnance
pénètre à son tour dans la grande salle avec un plateau où je compte huit
verres. Ces messieurs vont sans doute célébrer leur victoire de la journée, et
ce n’est probablement pas pour nous convier à la fêter avec eux qu’ils se
font apporter ces verres. Non, certainement; car peu de temps après, le
cuirassier sort du P. C., et il n’a pas l’air content.
Il n’est pas content du tout. Il nous annonce en effet, d’une voix
maussade, qu’il vient de recevoir l’ordre de nous conduire sans délai à la
Kommandantur de Rouvrois.
Rouvrois? Où est-ce? Est-ce loin? Est-ce près? Le cuirassier nous
montre le bout du papier qui lui fixe l’itinéraire et nous lisons ces quatre
noms: Azanne, Mangiennes, Pillon, Rouvrois. Quelque courte que soit la
distance qui sépare chacun de ces villages du suivant, ces quatre noms
représentent tout de suite pour nous un nombre considérable de kilomètres.
Nous sommes déjà éreintés. Nous sommes tous plus ou moins blessés. Le
sait-on? Ou s’en moque-t-on? Mais pourrons-nous arriver jusqu’au bout?
Quand nous nous remettons en route lentement, très lentement, il nous
semble que nous ne ferons même pas cent mètres. Hélas! dans quelle galère
sommes-nous embarqués! Nous sommes prisonniers, oui, bien prisonniers,
et nous nous en apercevons. Et que sont des prisonniers, sinon du bétail,
qu’on pousse devant soi jusqu’au jour des préliminaires de paix, où l’on
discutera le prix de rachat de chaque tête? En Allemagne, nous sommes un
objet de haine; et en France un objet de mépris. N’importe. Il faut marcher,
même quand on n’a rien mangé depuis trente-quatre heures. Pas un de nous
au reste ne consentirait à refuser d’aller plus loin; car dans l’ignorance où
nous sommes de ce que nous deviendrons plus tard, aucun de nous ne
voudrait se séparer de ses camarades, qu’il ne reverrait jamais sans doute.
Nous traversons Villes de nouveau dans toute sa longueur, et, pendant un
kilomètre environ, nous reprenons la mauvaise route par où nous sommes
venus. Nous croisons un assez long convoi d’artillerie: quatre gros canons
montés sur des chariots massifs aux roues énormes, chacun d’eux tiré par
huit chevaux. Et tout de suite après, nous entrons dans la nuit, dans la neige,
dans la boue et dans le froid. Nous avançons à grand’peine, sans savoir
comment nous nous tenons encore debout.
A la première halte que nous faisons, nous nous asseyons sur un talus du
chemin tout couvert de neige, et le mouvement seul que nous faisons pour
nous asseoir nous est une douleur de tout le corps. Qui n’a pas connu la
fatigue à son dernier période, ne pourra pas me comprendre. J’avais
conservé, dans la poche de ma capote, ma carte d’état-major au 1/80.000ᵉ,
la seule que nous eussions à notre disposition au début des affaires de
Verdun. Le capitaine me la demande, et nous cherchons à nous situer dans
l’espace, puisque le temps ne compte plus pour nous. A la clarté de la lune
et à la lueur d’une allumette, nous nous trouvons sans difficulté. Voici le
ravin du Bois-Chauffour, voici les Chambrettes, voici Villes, Azanne,
Mangiennes, Pillon, et voilà Rouvrois. Nous avons déjà fait une douzaine
de kilomètres. Nous en avons encore une trentaine à faire pour parvenir à
Rouvrois, terme de notre voyage, jusqu’à nouvel ordre. Trente kilomètres!
Est-ce possible? Mais les ferons-nous? Mais comment les ferons-nous? Il
neige toujours. Il fait froid. La route est complètement défoncée. Nous
enfonçons dans les ornières. Nous glissons dans des trous profonds.
Véritable marche au Calvaire. Nous marcherons toute la nuit. Arriverons-
nous? Et quand arriverons-nous?
Je tenterais vainement de rendre la désolation de notre lamentable exode.
Par quelle mystérieuse association d’idées me vient à l’esprit le souvenir
d’un livre de Pierre Loti, qui s’intitule Le Désert et qui, tout le long de ses
trois cents pages, ne parle que de soleil, de ciel bleu, et de sable rose, et de
solitude, prestigieux tour de force d’un poète qui peut chanter le néant
pendant des heures et des heures? Ainsi, pour nous, ce soir, tout se résume
en ceci: de la nuit, de la neige, du froid, de la fatigue, de la fièvre et du
découragement, et de la nuit et de la fatigue et toujours du découragement,
et cela pendant toute la nuit sans fin et tout le long de ces quarante
kilomètres de route que nous devons subir. L’homme du désert n’a pas plus
d’émotion en apercevant au loin la pierre d’un puits que nous n’en eûmes
nous-mêmes en découvrant dans l’ombre la silhouette minable du village de
Mangiennes.
Mangiennes ressemble à Villes. Aux maisons béantes, on n’a laissé que
les murs. Tout a disparu. La lune éclaire affreusement ces carcasses de
grands cadavres de pierres, et le village est un village mort. Nous nous
arrêtons sur une place, près d’une fontaine publique qui alimente une auge
assez importante. Une pancarte nous défend de boire de cette eau qui n’est
pas bonne et qui doit être réservée pour la lessive. Mais la fièvre est
impérieuse et la soif imprudente. Nous buvons quand même. Nous ne
parlons pas. Nous ne nous traînons plus que comme des automates. Le
village a l’air vide et ne semble pas abriter des troupes au cantonnement. A
tous les carrefours, de gigantesques inscriptions sur bois indiquent, par un
mot et une flèche, les directions à prendre. Et nous sortons de Mangiennes
sans tâtonner.
De Mangiennes à Pillon, nous mîmes certes plus de temps que je n’en
mettrai à le rapporter. C’est la même marche, dans le même paysage, avec
la même fatigue, sur une route identique, peut-être un peu moins mauvaise,
bien qu’elle soit très mauvaise encore. A chaque halte, il nous apparaît que
nous sommes au bout de nos forces, et nous continuons néanmoins jusqu’à
la halte suivante, où nous nous apercevons que nous sommes encore plus
brisés qu’à la précédente, ce que nous aurions cru impossible.
Somnambules que nous sommes, nous n’avons plus la ressource de penser.
Nous allons, groupe muet, éclopé, fourbu, glacé, à côté d’un cuirassier
prussien qui ne dit plus rien, lui non plus, tant il est épuisé de marcher à
pied dans la neige glissante, en soutenant son cheval qui le gêne plus qu’il
ne l’aide.
Si nous avons trouvé facilement notre route à travers Mangiennes, la
chose est moins aisée à Pillon, car il n’y a ici aucun de ces gigantesques
écriteaux, qui étaient si nombreux là-bas. Je tire de nouveau ma carte et
montre au cuirassier le chemin qu’il doit suivre. Il regarde ce que je lui
indique, mais il ne se décide pas. Il n’a sans doute pas confiance en nous. Il
frappe à la porte d’une maison qui semble être une ambulance. Vainement.
Personne ne répond. Tenant toujours son cheval par la bride, il va de porte
en porte, sans succès. Il trouve enfin une espèce de ferme, disparaît, revient,
attache sa monture dehors, et nous fait entrer avec lui dans une vaste grange
au fond de laquelle nous voyons, chichement éclairés, deux hommes mal
vêtus et deux cuisines roulantes côte à côte. L’un des cuisiniers est occupé à
tailler des parts dans de gros morceaux de viande bouillie, et l’autre, debout
sur le marchepied, plonge une grande louche dans l’immense marmite. Ni
celui-ci, ni celui-là ne nous adresse la parole.
Tout de suite la chaleur du foyer nous ranime. Mais quelle dérision!
Nous amener dans une cuisine alors que nous n’avons rien mangé depuis
quarante heures! Le cuirassier va-t-il cyniquement casser la croûte devant
nous? Il n’en faut pas douter. Déjà on lui donne du pain et une tranche de
bœuf. Mais, lui servi, on nous offre aussi du pain, de la viande et du café.
Qui n’a jamais eu faim ne concevra point que nous n’ayons pas eu la
dignité de refuser cette pitance clandestine. Nous avons mangé et bu. Pour
la première fois, nous goûtons en pays ennemi de ce fameux pain de guerre,
si cruellement cinglé par nos railleries françaises. Il n’est pas bon, il est
même mauvais, mais nous avions faim, et il nous contente. Quant au café,
s’il est nécessaire de l’appeler ainsi, c’est une vague décoction de je ne sais
quoi, sans sucre, sans couleur, sans saveur, et qui nous lèverait le cœur, si le
froid ne nous la faisait juger la meilleure des boissons chaudes. Tel fut notre
premier repas en Allemagne.
L’impression que nous en pûmes tirer, c’est que le soldat boche n’a peut-
être pas une cuisine très fine, mais il a de quoi se sustenter.
Au moment de repartir, car nous ne sommes pas au bout de nos peines,
le cuirassier nous dit sans aucun embarras:
—On vous demandera si vous avez mangé. Vous répondrez non.
Sa phrase est moins une prière qu’un ordre.
Comme nous passons devant l’église de Pillon, l’horloge sonne quatre
coups. Je regarde ma montre: elle marque trois heures. S’est-elle arrêtée?
Non, il faut désormais que nous nous réglions sur l’heure allemande et que
nous tenions compte d’une différence de cinquante minutes.
Les derniers kilomètres d’une étape paraissent toujours plus longs.
Ceux-ci nous semblent interminables. L’arrêt que nous avons fait dans la
cuisine de Pillon nous a cassé les jambes. Nous avons mal aux pieds, aux
reins, aux épaules, sans parler des blessures du combat. On doit se raidir et
se tendre de toute sa volonté pour marcher encore.
A la lisière d’un petit bois, nous rencontrons un cavalier en patrouille.
Tout en passant, il nous dit:
—’ten Abend (Bonsoir).
Il ne s’est peut-être même pas aperçu que nous sommes des prisonniers.
Enfin, car il faut bien que tout finisse, nous arrivons à Rouvrois. Nous
avons tellement répété que nous n’en pouvions plus, que nous aurions
besoin d’inventer une expression pour marquer à quel degré de fatigue nous
atteignons. Ah! se coucher! s’allonger! se reposer! dormir! dormir surtout,
comme des brutes, après tant d’émotions et de surmenage. Est-ce que nous
dormirons? Est-ce vraiment ici qu’on nous retiendra? Ne va-t-on pas d’ici
nous expédier plus loin? Qui sait? Et pourquoi non?
La kommandantur occupe une petite maison en briques. Une inscription
en gros caractères noirs la signale par ces mots: «GENERAL K D O». La
même inscription se trouve sur une lanterne à verre rouge accrochée, non
pas à la porte d’un établissement spécial, mais au premier étage de la
maison voisine, qui fait le coin de la rue. Un grand poteau chargé de fils
téléphoniques et télégraphiques se dresse près de la kommandantur; et le
quartier général est gardé par une sentinelle de la landsturm, qui, l’arme à la
bretelle et les mains dans les poches de sa capote grise, se promène le long
d’un sentier de caillebotis, en rotant régulièrement toutes les trente secondes
avec une vigueur qui nous surprend d’abord quelque peu.
Le cuirassier est entré à la kommandantur. Nous nous sommes assis sur
un banc de pierre, le dos contre la muraille. Il fait froid. La nuit s’achève.
Le capitaine s’est assoupi. La sentinelle continue sa lourde promenade en
rotant consciencieusement avec la même régularité, comme par gageure, à
moins que ce ne soit un procédé recommandé par les consignes du poste
pour résister au sommeil.
Mais voici que le cuirassier sort de la kommandantur. Il a l’air plus
satisfait qu’au départ du P. C. de la division. Sa mission est finie. Il nous dit
adieu très simplement et nous remet entre les mains d’un fantassin en
calotte de campagne qui, baïonnette au canon, nous conduit, à une
cinquantaine de mètres de là, dans une petite maison de pauvre apparence.
Allons-nous enfin nous reposer? Nous entrons dans une pièce qui a, pour
tout mobilier, un bahut, une table, deux bancs et un poêle. Le parquet est
sale. Les murs suintent l’humidité. La table est recouverte d’un enduit
crasseux. Dans un coin, il y a une dizaine de paillasses, qui ne sont pas trop
propres. Une odeur infâme règne. Ne soyons pas dégoûtés. Nous sommes
prisonniers et nous en verrons bien d’autres sans doute.
Sous la surveillance d’un feldwebel, l’homme qui nous a conduits
dispose les paillasses l’une à côté de l’autre. Puis, de lui-même et avant que
le sous-officier ait pu l’en empêcher, il se met à nous allumer du feu dans le
poêle. Pendant que nous nous installons et que lui s’emploie à ce travail, le
feldwebel le traite à plusieurs reprises, et à mi-voix, de «dummkerl», comme
si nous ne devions pas comprendre qu’il le sacre imbécile et triple imbécile.
Et cela nous assure sans hésitation des sentiments que le feldwebel nourrit à
notre égard.
à José Germain
CHAPITRE III
DE ROUVROIS A PIERREPONT