mirror of
https://github.com/renorris/openfsd
synced 2026-03-22 06:25:35 +08:00
49 lines
2.4 KiB
Markdown
49 lines
2.4 KiB
Markdown
# About
|
|
|
|
The FSD protocol functions primarily as a message forwarder.
|
|
Aside from a few direct client-server interactions, its main purpose is to relay messages between flight simulator clients via a centralized server.
|
|
This architecture is not peer-to-peer; all communication is routed through the central server.
|
|
|
|
FSD is a plaintext protocol that can be easily intercepted and analyzed with tools such as Wireshark.
|
|
By default, it operates on TCP port 6809, and its functionality can be tested using [telnet](https://linux.die.net/man/1/telnet):
|
|
|
|
```
|
|
telnet <FSD server address> 6809
|
|
```
|
|
|
|
Various implementations of FSD exist, each with unique protocol nuances.
|
|
This project specifically replicates VATSIM behavior, which differs from other networks such as [IVAO](https://www.ivao.aero/).
|
|
|
|
- FSD messages consist of plaintext MS-DOS-style lines ending with CR/LF characters.
|
|
- The protocol is strictly limited to the [ISO/IEC 8859-1](https://en.wikipedia.org/wiki/ISO/IEC_8859-1) aka. 'Latin alphabet no. 1' character set.
|
|
- Each message, or 'line', begins with a 1- or 3-character packet identifier, followed by colon (`:`) delimited fields.
|
|
- All numerical values are encoded as base-10 (or occasionally base-16) ASCII strings, with no raw binary data used.
|
|
- Clients are identified by plaintext aviation callsigns (e.g., `N7938C`).
|
|
- Most packets include "From" and "To" fields, which serve as source and recipient identifiers, respectively.
|
|
- Depending on the packet type, the "To" field may specify a single recipient or a group of clients.
|
|
|
|
#### Example [Server Identification](/packets/#server-identification-di) Packet
|
|
|
|
```text
|
|
$DISERVER:CLIENT:VATSIM FSD V3.43:d95f57db664f\r\n
|
|
```
|
|
|
|
##### Hexadecimal Representation
|
|
|
|
```text
|
|
00000000 24 44 49 53 45 52 56 45 52 3a 43 4c 49 45 4e 54 $DISERVE R:CLIENT
|
|
00000010 3a 56 41 54 53 49 4d 20 46 53 44 20 56 33 2e 34 :VATSIM FSD V3.4
|
|
00000020 33 3a 64 39 35 66 35 37 64 62 36 36 34 66 0d 0a 3:d95f57 db664f..
|
|
```
|
|
|
|
##### Explanation
|
|
- Packet Type Identifier: `$DI`
|
|
- Fields are delimited by colon (`:`) characters.
|
|
- Sender: `SERVER` (reserved callsign for the server)<br>
|
|
- Recipient: `CLIENT` (placeholder used for an unknown client)<br>
|
|
- Server version identifier: `VATSIM FSD V3.43`<br>
|
|
- Random data (see [documentation](/packets/#server-identification-di)): `d95f57db664f`
|
|
- Packet is terminated with the delimiter sequence: `\r\n` (`0x0d0a`)
|
|
|
|
For technical documentation on packet types, see [Protocol](/protocol/).
|