You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The transport implementation is secondary, now in an especially
meaningful sense given that transports communicate over PeerIds, while
derp uses NodePublicKeys. This rename aligns with separation of the
client into the core non-transport functionality, and a transport
wrapper that handles translating to and from PeerId (forthcoming in a
future commit).
Signed-off-by: Nathan Perry <nathan@tailscale.com>
Change-Id: If5dd9a39d4e1299fe999f8457e38e94a6a6a6964
Copy file name to clipboardExpand all lines: ARCHITECTURE.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,7 +19,7 @@ point. More detailed usage instructions and technical details can be found in ea
19
19
```mermaid
20
20
block-beta
21
21
columns 4
22
-
22
+
23
23
API["API/Language Bindings"]:4
24
24
RT["Runtime"]:4
25
25
CP["Control Plane"]:1
@@ -59,7 +59,7 @@ Implements the TCP, UDP, and raw socket abstractions for the overlay network (ta
59
59
60
60
### Control Plane
61
61
62
-
Crates that communicate with Tailscale's control plane (or Headscale) and provide configuration for the data plane. The control plane handles authentication/authorization, node registration, policy updates, network map distribution, and much more for the nodes in a tailnet.
62
+
Crates that communicate with Tailscale's control plane (or Headscale) and provide configuration for the data plane. The control plane handles authentication/authorization, node registration, policy updates, network map distribution, and much more for the nodes in a tailnet.
63
63
64
64
-[`ts_control`](ts_control/src/lib.rs): control plane client that handles registration, authorization/authentication, configuration, and streaming updates.
65
65
-[`ts_control_noise`](ts_control_noise/src/lib.rs): abstraction that wraps control plane communications in a Noise IK tunnel, transparently handling cryptography for the client.
@@ -78,7 +78,7 @@ Types and (de)serialization code for control plane traffic "on the wire". `ts_co
78
78
79
79
Crates that communicate with other Tailscale nodes on the tailnet. The data plane is responsible for actually exchanging packets between peers on the tailnet, including transport management (DERP, TUN, etc.), routing, packet filtering, and tunneling.
80
80
81
-
-[`ts_dataplane`](ts_dataplane/src/lib.rs): wires all the individual data plane functions together, flowing inbound and outbound packets through the components in the correct order. The various data plane components are described below.
81
+
-[`ts_dataplane`](ts_dataplane/src/lib.rs): wires all the individual data plane functions together, flowing inbound and outbound packets through the components in the correct order. The various data plane components are described below.
82
82
83
83
#### Packet Filtering
84
84
@@ -88,13 +88,13 @@ Crates that communicate with other Tailscale nodes on the tailnet. The data plan
88
88
89
89
#### Routing
90
90
91
-
-[`ts_overlay_router`](ts_overlay_router/src/lib.rs): routing table implementation for overlay (tailnet) traffic; determines which peer to send outbound traffic to, and which overlay transport should receive inbound packets.
91
+
-[`ts_overlay_router`](ts_overlay_router/src/lib.rs): routing table implementation for overlay (tailnet) traffic; determines which peer to send outbound traffic to, and which overlay transport should receive inbound packets.
92
92
-[`ts_underlay_router`](ts_underlay_router/src/lib.rs): routing table implementation for underlay traffic; determines which underlay transport an outbound packet should be sent from, if any.
93
93
94
94
#### Transports
95
95
96
-
-[`ts_transport`](ts_transport/src/lib.rs): traits that define transports and how they move traffic in and out of the overlay/underlay network.
97
-
-[`ts_transport_derp`](ts_transport_derp/src/lib.rs): an underlay transport that exchanges packets between nodes via Designated Encrypted Relay for Packets (DERP) relay servers.
96
+
-[`ts_transport`](ts_transport/src/lib.rs): traits that define transports and how they move traffic in and out of the overlay/underlay network.
97
+
-[`ts_derp`](ts_derp/src/lib.rs): an underlay transport that exchanges packets between nodes via Designated Encrypted Relay for Packets (DERP) relay servers.
98
98
-[`ts_transport_tun`](ts_transport_tun/src/lib.rs): an overlay transport that exposes a TUN device on the local machine to send/receive packets on the overlay network (tailnet).
99
99
100
100
#### Tunneling
@@ -106,9 +106,9 @@ Crates that communicate with other Tailscale nodes on the tailnet. The data plan
106
106
Crates used throughout the codebase that provide generic algorithms, data structures, cross-cutting concerns, or development tooling.
107
107
108
108
#### Algorithms and Data Structures
109
-
-[`ts_array256`](ts_array256/src/lib.rs): sparse array of 256 elements with configurable backing store, used with `ts_bart`.
110
-
-[`ts_bart`](ts_bart/README.md): BAlanced Routing Table (BART) data structure for fast IP address/prefix search in routing tables and packet filtering.
111
-
-[`ts_bitset`](ts_bitset/src/lib.rs): fixed-width bitset used to track presence of elements in `ts_array256`.
109
+
-[`ts_array256`](ts_array256/src/lib.rs): sparse array of 256 elements with configurable backing store, used with `ts_bart`.
110
+
-[`ts_bart`](ts_bart/README.md): BAlanced Routing Table (BART) data structure for fast IP address/prefix search in routing tables and packet filtering.
111
+
-[`ts_bitset`](ts_bitset/src/lib.rs): fixed-width bitset used to track presence of elements in `ts_array256`.
112
112
-[`ts_dynbitset`](ts_dynbitset/src/lib.rs): growable bitset built on top of `ts_bitset`, used with `ts_bart_packetfilter`.
113
113
-[`ts_keys`](ts_keys/src/lib.rs): data structures representing all of Tailscale's x25519 keys (disco, node, machine, etc.).
114
114
-[`ts_packet`](ts_packet/src/lib.rs): base types representing network packets.
@@ -121,12 +121,12 @@ Crates used throughout the codebase that provide generic algorithms, data struct
121
121
122
122
#### Examples, Debugging, and Testing
123
123
-[`ts_cli_util`](ts_cli_util/src/lib.rs): helpers for writing command line tools and initializing logging, used in examples.
124
-
-[`ts_test_util`](ts_test_util/src/lib.rs): common code used by our unit and integration tests, such as determining if the network is available.
124
+
-[`ts_test_util`](ts_test_util/src/lib.rs): common code used by our unit and integration tests, such as determining if the network is available.
125
125
-[`ts_hexdump`](ts_hexdump/src/lib.rs): traits and functions to generate canonical hexdumps of buffers for debug logging.
126
126
127
127
#### Protocols
128
128
-[`ts_disco_protocol`](ts_disco_protocol/src/lib.rs): incomplete implementation of Tailscale's discovery protocol (disco).
129
-
-[`ts_http_util`](ts_http_util/src/lib.rs): HTTP/1 and HTTP/2 client utilities used in `ts_control` and `ts_transport_derp`.
129
+
-[`ts_http_util`](ts_http_util/src/lib.rs): HTTP/1 and HTTP/2 client utilities used in `ts_control` and `ts_derp`.
130
130
-[`ts_tls_util`](ts_tls_util/src/lib.rs): Transport Layer Sockets (TLS) utilities to manage certificates and establish secure connections over HTTP.
0 commit comments