Hello i have made a program for my old windows mobile phone to send gps data ,temperature etc every 5 seconds just for experimental reasons to create a fleet management system.
I noticed that within one hour 350kb were consumed although i sent only 20kb of data…
As i dont have deep knowledge in networks ,how much does a tcp connection cost in bytes?
Maybe i should keep the socket alive because i close and open it every 5 seconds.Would that save bytes?
Also does MTU matter here?
Any other idea to reduce the overhead?
thank you
Let’s do some math here.
Every 5 seconds is 720 connections per hour plus data. 20K / 720 is about 28 bytes of payload (your GPS data) for each connection.
So I’m in the ballpark of your data usage estimates.
If you’re looking to reduce bandwidth usage, here’s three ideas:
Scale back on your update rate.
Don’t tear down the socket connection each time. Just keep it open.
Given your GPS coordinates are periodically updated, you could consider using UDP instead of TCP. There’s potential for packet loss, but given you’re retransmitting fresher data every 5 seconds anyway, an update getting lost isn’t worth the bandwidth to retransmit. IP and UDP headers combined are only 28 bytes with no “connection” overhead.
UPDATE
When I originally posted this, I erroneously misunderstood the connection close to be a single exchange of FIN packets between client and server. In practice, the client sends a FIN as part of it initiating the CLOSE. Then server ACKs the FIN. Then the server sends its own FIN that is ACK’d by the client. In other words, an additional 96 bytes per connection. Redoing our math:
So my revised estimate of 331KB in one hour is a bit closer to what the OP saw.