THE PLAN...
Part A - Data from Signpost Application
- Connect the android phone (the client) and laptop (the server) to Internet in such a way that they are behind the same NAT box, so the client can initiate a connection with the server from a private IP address
- Set up the OCaml Server running on my laptop
- Change in client IP address in the client code and load onto android phone
- Running client with server, collecting data whilst viewing output from log files
- Workout how to send pings bothways
- Workout how to use ping to get RRT bothways
- Collect some data on latency
- Extract sufficient data from both methods
- Get data from both method into a suitable format
- If required, convert units for latency so all data in same units
- Compare data
- Answer the Question: Is there a significant difference between the data collected by Ping (assumed to be accurate) and the Signpost Application
AND THE REALITY...
Part A
I've just been send the most recent version of the Signpost Diagnostics Application as a .apk file. I uninstall the old version of the application using the Android GUI and install the new version using:
cd /android-sdk-linux/platform-tools
./adb install ~/Downloads/SigcommDemoAndroid.apk
I quick come to realize that the above is stage is useless. It will correctly install an application from the .apk file but I need to be able to edit the code of the application so that I can set the client IP address at a later stage
I connect both the client and server to the same Wi-FI network so that the client will be able in initiate an connection with the server
As per usual, to start up the OCaml Server, I will do
cd Downloads/sebastian-SignpostDemo-53ebd3e/SignpostServerOCaml/
./server.native
./server.native
I uninstalled the last Signpost Application, change the IP address in the code and load onto phone, via Eclipse using the run as dialogue.
Pressing start on the Android application triggers a connection to be initiated with the server, this is successful as the sever outputs a link detailing the android phones name, IP address and port number used.
I can view the logs for this application live, using:
cd Downloads/android-sdk-linux/platform-tools
./adb logcat-s SIGPSTTo filter the output of logcat, I use the arguments -s SIGPST, this gives me a log output such as:
I/SIGPST ( 1520): Received Latency Upstream: 25500
I/SIGPST ( 1520): Received Goodput Downstream: 4026
I/SIGPST ( 1520): Received Latency Downstream: 6008
I/SIGPST ( 1520): Received Goodput Downstream: 1262925
I/SIGPST ( 1520): Received Latency Upstream: 49000
I/SIGPST ( 1520): Received Goodput Downstream: 4787
I/SIGPST ( 1520): Received Latency Downstream: 10376
I/SIGPST ( 1520): Received Latency Upstream: 50000
I/SIGPST ( 1520): Received Goodput Downstream: 2735
I/SIGPST ( 1520): Received Latency Downstream: 17004
I/SIGPST ( 1520): Received Latency Upstream: 46500
I/SIGPST ( 1520): Received Goodput Downstream: 4461
I/SIGPST ( 1520): Received Latency Downstream: 4463
I/SIGPST ( 1520): Received Goodput Downstream: 799720
I/SIGPST ( 1520): Received Latency Upstream: 51000
I/SIGPST ( 1520): Received Goodput Downstream: 3684
I/SIGPST ( 1520): Received Latency Downstream: 6875
I/SIGPST ( 1520): Received Latency Upstream: 307000
I/SIGPST ( 1520): Received Goodput Downstream: 4670
I/SIGPST ( 1520): Received Latency Downstream: 8749
I/SIGPST ( 1520): Received Latency Upstream: 16500
I/SIGPST ( 1520): Received Goodput Downstream: 2652
I/SIGPST ( 1520): Received Latency Downstream: 6795
I/SIGPST ( 1520): Received Goodput Downstream: 24060150
I/SIGPST ( 1520): Received Latency Upstream: 72500
I/SIGPST ( 1520): Received Goodput Downstream: 4190
I/SIGPST ( 1520): Received Latency Downstream: 6809
A quick code inspection, highlights that the latency values are divided by 1000 to be converted into secs, which means that the latency values here are in ms
I will look at how to convert this to a more convenient form in part 3
I can append the output to the file Signoutput.txt using ">> Signoutput.txt"
I have added a sample of Signoutput.txt here
Part B
I open a remote shell on the android phone using ./adb shell, I then use the ping unix commend from the client to the server, and i get an output such as24 packets transmitted, 24 received, 0% packet loss, time 23070ms
rtt min/avg/max/mdev = 35.614/90.183/297.302/51.944 ms
The latency will be half the RRT so here it is 45.0915 ms
Then repeating the test from the server to the client and i get an output such as
43 packets transmitted, 40 received, 6% packet loss, time 42070ms
rtt min/avg/max/mdev = 33.371/93.812/241.825/45.579 ms
So the latency is similar to before at 46.906 ms
Now I want to collect the data from the ping output, so I wrote the following bash script to do this:
#!/bin/bash
for i in {1..10}
do
ping 192.168.14.47 -c 10 -n -q >> Pingoutput.txt;
done
This sents 100 pings, in 10 sets of 10 and sent the results of the 10 test to a file called Pingoutput.txt
The first line "#!/bin/bash" mean that this is a bash script, the ping argument "-c 10" means said 10 pings and "-q" means quiet output. >> means append to file.
I've added a sample of Pingoutput.txt here
Part C
To analysis the output files, I have written the Java code here. Currently this code is untested