{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# EG vs. DigitalOcean\n",
    "\n",
    "In August 2016 we've seen claims that encrypted connection from Egypt to DigitalOcean hosts are heavily throttled.\n",
    "\n",
    "Based on our testing, the `digitalocean.pcap` file contains the record of several thousand attempts to establish HTTPS connection to [alexmerkel.com](https://alexmerkel.com) from an Egyptian ISP."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Massaging the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "!tshark -r digitalocean.pcap -n -T fields \\\n",
    "  -e frame.number \\\n",
    "  -e frame.time_epoch \\\n",
    "  -e tcp.flags.str \\\n",
    "  -e tcp.srcport -e tcp.dstport \\\n",
    "  -e tcp.seq -e tcp.ack \\\n",
    "  -e tcp.options.timestamp.tsval -e tcp.options.timestamp.tsecr >pcap.tsv"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`RST` packets from our host have no [TCP timestamp](https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_timestamps) options, so it's easier to filter them out when they don't provide any valuable information."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+ awk !($5 == 443 && $3 == \"*********R**\") pcap.tsv\r\n"
     ]
    }
   ],
   "source": [
    "!set -o xtrace; awk '!($$5 == 443 && $$3 == \"*********R**\")' pcap.tsv >good.tsv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  196941 pcap.tsv\r\n",
      "  196922 good.tsv\r\n",
      "  393863 total\r\n"
     ]
    }
   ],
   "source": [
    "!wc -l pcap.tsv good.tsv"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The dump has ~200k packets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import datetime\n",
    "import matplotlib\n",
    "import matplotlib.pylab as plt\n",
    "fromtimestamp = datetime.datetime.fromtimestamp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "head = 'no time_epoch flags srcport dstport seq ack tsval tsecr'.split()\n",
    "types =  [np.uint32, np.float64, str, np.uint16, np.uint16, np.uint32, np.uint32, np.uint32, np.uint32]\n",
    "d = pd.read_csv('good.tsv', delimiter='\\t',\n",
    "            names=head,\n",
    "            dtype=dict(zip(head, types)))\n",
    "d.time_epoch -= d.time_epoch.min() # to see milliseconds better"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are some TCP packets arriving from the server. It's possible to use TCP timestamps to understand RTT to the server better as server echoes last seen client's TCP timestamp back. PCAPs contain the exact wall clock timestamp corresponding to the client's TCP timestamp which makes it possible to estimate RTT."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "smpl = (54832, 15126214) # just a sample"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "no                   30313\n",
       "time_epoch         1723.59\n",
       "flags         *******A****\n",
       "srcport                443\n",
       "seq                      1\n",
       "ack                    297\n",
       "tsval            241524960\n",
       "Name: (54832, 15126214), dtype: object"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "resp = d[d.srcport == 443]\n",
    "resp = resp.drop_duplicates(['dstport', 'tsecr'], keep='first')\n",
    "resp = resp.set_index(['dstport', 'tsecr'], verify_integrity=True)\n",
    "resp.index.rename(['port', 'tcpts'], inplace=True)\n",
    "rs = resp.loc[smpl]\n",
    "rs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>no</th>\n",
       "      <th>time_epoch</th>\n",
       "      <th>flags</th>\n",
       "      <th>srcport</th>\n",
       "      <th>dstport</th>\n",
       "      <th>seq</th>\n",
       "      <th>ack</th>\n",
       "      <th>tsval</th>\n",
       "      <th>tsecr</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>30289</th>\n",
       "      <td>30294</td>\n",
       "      <td>1722.474151</td>\n",
       "      <td>*******A****</td>\n",
       "      <td>54832</td>\n",
       "      <td>443</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>15126214</td>\n",
       "      <td>241524681</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30290</th>\n",
       "      <td>30295</td>\n",
       "      <td>1722.475029</td>\n",
       "      <td>*******AP***</td>\n",
       "      <td>54832</td>\n",
       "      <td>443</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>15126214</td>\n",
       "      <td>241524681</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          no   time_epoch         flags  srcport  dstport  seq  ack     tsval  \\\n",
       "30289  30294  1722.474151  *******A****    54832      443    1    1  15126214   \n",
       "30290  30295  1722.475029  *******AP***    54832      443    1    1  15126214   \n",
       "\n",
       "           tsecr  \n",
       "30289  241524681  \n",
       "30290  241524681  "
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "req = d[d.dstport == 443]\n",
    "req[(req.srcport == smpl[0]) & (req.tsval == smpl[1])]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Several TCP packets *may* have the same timestamp as the TCP clock resolution is not very high. For example, Linux determines TCP timestamp resolution based on `HZ` variable, one of common `HZ` values is 250, which leads to `4ms` precision of TCP timestamp.\n",
    "\n",
    "The following code takes the very first packet in a packet series with the same TCP timestamp and creates a table to calculate RTT."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "no                   30294\n",
       "time_epoch         1722.47\n",
       "flags         *******A****\n",
       "dstport                443\n",
       "seq                      1\n",
       "ack                      1\n",
       "tsecr            241524681\n",
       "Name: (54832, 15126214), dtype: object"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "req = d[d.dstport == 443]\n",
    "req = req.drop_duplicates(['srcport', 'tsval'], keep='first')\n",
    "req = req.set_index(['srcport', 'tsval'], verify_integrity=True) # cross-verify with `first`\n",
    "req.index.rename(['port', 'tcpts'], inplace=True)\n",
    "req.loc[smpl]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "RTT for every reply is calculated [joining](https://en.wikipedia.org/wiki/Join_%28SQL%29) corresponding request to it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "prod = resp.join(req, lsuffix='_resp', rsuffix='_req')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((187997, 7), (5976, 7), (5976, 14))"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "req.shape, resp.shape, prod.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Every response gets a corresponding request which is not surprising as tcpdump running at client have not missed any requests. Only 3% of TCP requests got some TCP reply."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "time_epoch_req     1722.47\n",
       "time_epoch_resp    1723.59\n",
       "Name: (54832, 15126214), dtype: object"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prod.loc[smpl][['time_epoch_req', 'time_epoch_resp']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So pre-processing is done and actual RTT values can be studied now."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## TCP Timestamps give us some clue regarding RTT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "delay = (prod.time_epoch_resp - prod.time_epoch_req)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f6104907950>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "delay[delay < 10].hist(bins=50)\n",
    "plt.xlabel('Delay, s')\n",
    "plt.ylabel('`reply` packets') ;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It looks like usual RTT of TCP re-transmissions: the very first re-transmission happens after one second as soon as there is no data to calculate better RTO (re-transmission timeout) at this moment. Another possibility is that it's a real link latency, but this hypothesis is refuted by plain `ping`.\n",
    "\n",
    "Let's look at the histogram with a bit different resolution:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f61010ecb10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "fig.set_figwidth(15)\n",
    "fig.set_figheight(3)\n",
    "for i, ndx in enumerate([delay < 1.5, (delay >= 1.5) & (delay < 7.5), delay >= 7.5]):\n",
    "    ax = fig.add_subplot(1, 3, i+1)\n",
    "    delay[ndx].hist(bins=50, ax=ax)\n",
    "    ax.set_xlabel('Delay, s')\n",
    "    ax.set_ylabel('\"reply\" packets') ;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bufferbloat or dropped packet?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Another possible explanation of packet delay is the [Bufferbloat effect](https://en.wikipedia.org/wiki/Bufferbloat). In this case there will be a router between the client and the server causing significant latency. It's hard to estimate this latency precisely, but it's possible to estimate the *variance* of the latency assuming that the server TCP Timestamp clock is ticking in a linear fashion, and that's true at least for Linux servers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f610127f290>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "resp = d[d.srcport == 443]\n",
    "plt.scatter(map(fromtimestamp, resp.time_epoch), resp.tsval, marker='.')\n",
    "plt.xlim(fromtimestamp(resp.time_epoch.min() - 60), fromtimestamp(resp.time_epoch.max() + 60))\n",
    "plt.xlabel('Client unix clock')\n",
    "plt.ylabel('Server TCP timestamp')\n",
    "plt.axes().xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H:%M'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Well, it looks pretty linear. It's possible to estimate tick length & clock offset of TCP timestamps fitting simple linear model to the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "One TCP Timestamp tick is 0.004000 ms, HZ ~250\n"
     ]
    }
   ],
   "source": [
    "# Whoa! Machine learning!\n",
    "slope, inters = np.linalg.lstsq(np.vstack([resp.tsval, np.ones_like(resp.tsval)]).T, resp.time_epoch)[0]\n",
    "print 'One TCP Timestamp tick is %f ms, HZ ~%d' % (slope, 1 / slope)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n0QAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f61006f19d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fiterr = resp.time_epoch - (resp.tsval * slope + inters)\n",
    "\n",
    "plt.scatter(map(fromtimestamp, resp.time_epoch), fiterr, marker='.')\n",
    "plt.xlim(fromtimestamp(resp.time_epoch.min() - 60), fromtimestamp(resp.time_epoch.max() + 60))\n",
    "plt.xlabel('Client unix clock')\n",
    "plt.ylabel(u'Client − Server (prediction), seconds')\n",
    "plt.axes().xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H:%M'))\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    6864.0000\n",
       "mean       -0.0000\n",
       "std         0.0024\n",
       "min        -0.0036\n",
       "25%        -0.0013\n",
       "50%        -0.0003\n",
       "75%         0.0007\n",
       "max         0.0543\n",
       "dtype: object"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fiterr.describe().apply(lambda x: '%.4f' % x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f610069cd90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.Series(fiterr).hist(bins=100)\n",
    "plt.xlabel(u'Client − Server (prediction), seconds')\n",
    "plt.ylabel('`reply` packets') ;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As such, the difference between prediction and the actual wall clock is quite low. Given the assumption that the server TCP Timestamp ticks uniformly with 250 Hz frequency it means that RTT between the client and the server is quite stable, so RTT delay is *not* caused by bufferbloat due to RTT peaks at ~2s, ~3s, ~4s. Bufferbloat causing that large delay would produce much larger `fiterr` variance. This means that:\n",
    "\n",
    "* all the packets the client gets are usual TCP retransmissions bypassing the filter\n",
    "* no \"original transmissions\" bypass the filter\n",
    "\n",
    "The above analysis refutes the hypothesis of the throttling\n",
    "caused by Bufferbloat."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
