169 lines
5.8 KiB
Markdown
169 lines
5.8 KiB
Markdown
DragonTCP Proxy v6 - Server Debug Build
|
|
=================================
|
|
|
|
This build adds server-side diagnostic logging for the adaptive/chunk transport.
|
|
The wire protocol and v6 client remain compatible.
|
|
|
|
New server flags
|
|
----------------
|
|
|
|
--debug
|
|
Session/connect/error logging plus periodic aggregate statistics.
|
|
|
|
--debug-chunks
|
|
Logs every COPEN, CPUSH, ACK, CPULL, DATA, WAIT, EOF, and CCLOSE event.
|
|
This is extremely verbose with 32-byte chunks and can reduce throughput.
|
|
Enabling --debug-chunks also enables normal debug logging.
|
|
|
|
--debug-stats-interval DURATION
|
|
Aggregate statistics frequency. Default: 5s.
|
|
Set to 0 to disable periodic statistics.
|
|
|
|
Recommended diagnostic command for fixed 32-byte chunks
|
|
--------------------------------------------------------
|
|
|
|
sudo ./dragontcp-server-linux-amd64 --token 'YOUR_SECRET' --chunk-max 32 --chunk-buffered 2048 --chunk-poll-wait 50ms --chunk-session-timeout 5m --max-connections 20000 --tcp-buffer 0 --debug --debug-chunks --debug-stats-interval 5s
|
|
|
|
Normal production command with useful low-overhead debug
|
|
---------------------------------------------------------
|
|
|
|
sudo ./dragontcp-server-linux-amd64 --token 'YOUR_SECRET' --chunk-max 32 --chunk-buffered 2048 --chunk-poll-wait 50ms --chunk-session-timeout 5m --max-connections 20000 --tcp-buffer 0 --debug --debug-stats-interval 10s
|
|
|
|
Disable all debug logging
|
|
-------------------------
|
|
|
|
Simply omit --debug and --debug-chunks.
|
|
|
|
Example debug output
|
|
--------------------
|
|
|
|
[DEBUG] SESSION OPEN id=... target=example.com:443 max_chunk=32 active_sessions=1
|
|
[CHUNK] CPUSH id=... seq=0 bytes=32 -> ACK accepted=32
|
|
[CHUNK] CPULL id=... ack=-1 want=0 offset=0 limit=32
|
|
[CHUNK] DATA id=... seq=0 offset=0 bytes=32 total=32
|
|
[CHUNK] CPULL id=... want=8 -> WAIT
|
|
[DEBUG] SESSION CLOSE id=... active_sessions=0
|
|
[DEBUG] STATS uptime=10s active_connections=8 active_sessions=2 sessions_opened=5 sessions_closed=3 bytes_up=... bytes_down=... push_records=... pull_requests=... data_records=... waits=... errors=0
|
|
|
|
Counters
|
|
--------
|
|
|
|
active_connections - currently open DragonTCP TCP connections
|
|
active_sessions - currently open chunk proxy sessions
|
|
sessions_opened - total chunk sessions opened
|
|
sessions_closed - total chunk sessions closed
|
|
bytes_up - bytes accepted from client and written toward target
|
|
bytes_down - bytes read from target into chunk buffering
|
|
push_records - accepted upload CPUSH records
|
|
pull_requests - CPULL requests received
|
|
data_records - DATA responses generated
|
|
waits - WAIT responses because downstream data was not ready yet
|
|
errors - debug-counted server/protocol errors
|
|
|
|
Important performance note
|
|
--------------------------
|
|
|
|
At 32 bytes, --debug-chunks can generate thousands or millions of log lines for
|
|
large transfers. Use it while diagnosing a failure, then switch to --debug only
|
|
for normal use.
|
|
|
|
Large-chunk update
|
|
==================
|
|
|
|
This is the v6 debug/adaptive-chunk branch with FIXED poller concurrency.
|
|
It intentionally does NOT include the later adaptive-poller controller.
|
|
|
|
Chunk limits
|
|
------------
|
|
|
|
Previous hard limit:
|
|
|
|
8192 bytes
|
|
|
|
New hard limit:
|
|
|
|
1048576 bytes (1 MiB)
|
|
|
|
The framed protocol ceiling was increased to 2 MiB so a 1 MiB CPUSH/DATA
|
|
record plus protocol metadata fits safely.
|
|
|
|
New defaults:
|
|
|
|
client --chunk-max 65536
|
|
server --chunk-max 65536
|
|
|
|
The adaptive client still begins at:
|
|
|
|
--chunk-start 256
|
|
|
|
and can grow toward the configured maximum after successful records.
|
|
|
|
Use up to 1 MiB adaptive chunks
|
|
--------------------------------
|
|
|
|
Server:
|
|
|
|
sudo ./dragontcp-server-linux-amd64 --token 'YOUR_SECRET' --chunk-max 1048576 --debug --debug-stats-interval 10s
|
|
|
|
Android ARM64 client with fixed poller count of 8:
|
|
|
|
./dragontcp-client-android-arm64 --server-host YOUR_SERVER_IP --token 'YOUR_SECRET' --chunk-start 256 --chunk-min 32 --chunk-max 1048576 --chunk-pollers 8 --chunk-timeout 2s --chunk-adapt-log
|
|
|
|
The number of pollers stays exactly at the value passed with --chunk-pollers.
|
|
Only the chunk size adapts.
|
|
|
|
Examples of useful ceilings
|
|
---------------------------
|
|
|
|
--chunk-max 16384 # 16 KiB
|
|
--chunk-max 32768 # 32 KiB
|
|
--chunk-max 65536 # 64 KiB (new default maximum)
|
|
--chunk-max 131072 # 128 KiB
|
|
--chunk-max 262144 # 256 KiB
|
|
--chunk-max 524288 # 512 KiB
|
|
--chunk-max 1048576 # 1 MiB hard maximum
|
|
|
|
Fixed-size mode also supports the same range:
|
|
|
|
--chunk-size 262144
|
|
|
|
Memory note
|
|
-----------
|
|
|
|
Larger server chunk maxima require larger per-session target-read buffers and
|
|
can increase buffered memory substantially when many sessions are active.
|
|
For thousands of simultaneous users, do not automatically use 1 MiB unless
|
|
measurements show that it is useful. Values such as 16-64 KiB are a more
|
|
reasonable starting point, while the adaptive client can still be configured
|
|
to probe higher when your network supports it.
|
|
|
|
Validation
|
|
----------
|
|
|
|
The updated source and binaries were rebuilt from this v6 debug branch.
|
|
Validation included:
|
|
|
|
* Go builds for Linux amd64, Linux ARM64, Linux ARMv7 client, and Android ARM64.
|
|
* A protocol round-trip test with a full 1 MiB request and response frame.
|
|
* An 8 MiB HTTP download through the proxy using fixed 262144-byte (256 KiB)
|
|
chunk configuration; the downloaded SHA-256 matched the source exactly.
|
|
|
|
DragonTCP branding update
|
|
=========================
|
|
|
|
This package was renamed from HOX to DragonTCP.
|
|
|
|
Binary names are now:
|
|
|
|
dragontcp-server-linux-amd64
|
|
dragontcp-server-arm64
|
|
dragontcp-client-linux-amd64
|
|
dragontcp-client-android-arm64
|
|
dragontcp-client-arm64
|
|
dragontcp-client-armv7
|
|
|
|
The Go module and command directories were also renamed to DragonTCP.
|
|
The existing UP/OK wire framing and chunk protocol were intentionally kept
|
|
unchanged, so this branding change does not break compatibility with the
|
|
previous protocol implementation.
|