Open dvn0 opened 5 months ago
@dvn0 When CoAP is used over TCP, it relies on the congestion control mechanisms provided by the underlying TCP transport layer. TCP itself has well-established congestion control algorithms, and CoAP benefits from these without introducing specific congestion control parameters like "Nstart."
If you employ BlockWise transfer via TCP, it becomes a bottleneck. However, for TCP, BlockWise transfer is unnecessary for large payloads.
Thank you for the response and info @jkralik. I followed your advice and disabled the blockwise transfer, but this actually incurred a significant throughput penalty.
I think I'm disabling it correctly: https://codeberg.org/eris/eris-go/commit/870f6471c0076dcf820a45bdd897a3cb97198b42
Any ideas?
Latency between client and server appears to negatively impact throughput when using the TCP transport. After some discussion, and testing I think allowing for adjusting the
NSTART
parameter could improve the situation.It's implemented in the UDP client, but not TCP. https://github.com/plgd-dev/go-coap/blob/51f2671073d2e2aa918716911961459cb23dbf46/udp/client/conn.go#L168