diff --git a/tools/analyze_rpc_calls b/tools/analyze_rpc_calls
index a6008bf90..9a98c76ca 100755
--- a/tools/analyze_rpc_calls
+++ b/tools/analyze_rpc_calls
@@ -8,6 +8,7 @@ import os
 import socket
 import subprocess
 import struct
+import sys
 import tabulate
 
 SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
@@ -56,6 +57,7 @@ class Connection:
     SIZE_LEN = struct.calcsize(SIZE_FORMAT)
 
     def __init__(self):
+        self._previous = bytes()
         self._data = bytes()
         self._message = bytes()
         self._ts = []
@@ -72,17 +74,39 @@ class Connection:
         if len(self._data) < self.SIZE_LEN + msg_len:
             return False
         self._message = self._data[self.SIZE_LEN:]
+        self._previous = self._data
         self._data = bytes()
         return True
 
     def add_data(self, data, direction, ts):
+        if self._previous[-len(data):] == data \
+                or self._data[-len(data):] == data:
+            print("Retransmission detected!", file=sys.stderr)
+            return
+
         self._data += data
         self._ts.append(ts)
 
         if not self._extract_message():
             return
 
-        message_id = struct.unpack("<Q", self._message[16:24])[0]
+        found = False
+        for i in range(2, 6):
+            if len(self._message) < (i + 1) * 8:
+                continue
+            message_id = struct.unpack("<Q",
+                                       self._message[i * 8:(i + 1) * 8])[0]
+            if message_id in MESSAGES:
+                found = True
+                break
+
+        if not found:
+            print("Got a message that I can't identify as any known "
+                  "RPC request/response!", file=sys.stderr)
+            self._last = None
+            self._ts = []
+            return
+
         message_type = MESSAGES[message_id]
 
         if direction == "to":
@@ -93,13 +117,13 @@ class Connection:
                                    len(self._message)))
 
         if self._last is None:
-            self._last = (message_type, self._ts[0])
+            self._last = (message_type, self._ts[0], len(self._message))
         else:
-            req_type, req_ts = self._last
+            req_type, req_ts, req_size = self._last
             duration = self._ts[-1] - req_ts
             self._stats[(req_type, message_type)]["duration"].append(duration)
             self._stats[(req_type, message_type)]["size"].append(
-                    len(self._message))
+                    req_size + len(self._message))
             self._last = None
 
         self._ts = []