diff options
| author | Arthur Pavlov <arthur.pavlovs@mail.utoronto.ca> | 2018-11-26 00:56:12 +0000 |
|---|---|---|
| committer | Arthur Pavlov <arthur.pavlovs@mail.utoronto.ca> | 2018-11-26 00:56:12 +0000 |
| commit | 6517c5400d2ec8786f3a7a702c8b6f8e502cb0ab (patch) | |
| tree | 6831b681ede24a05800c4433cfc1fdb096fba792 /code | |
| parent | fe7a6e58b1ec124a26a415364f17a012e42334c5 (diff) | |
rtt part 2
Diffstat (limited to 'code')
| -rw-r--r-- | code/rtt/tcp_number_of_connections.py | 34 | ||||
| -rw-r--r-- | code/rtt/tcpparser.py | 162 |
2 files changed, 196 insertions, 0 deletions
diff --git a/code/rtt/tcp_number_of_connections.py b/code/rtt/tcp_number_of_connections.py new file mode 100644 index 0000000..fa8abb1 --- /dev/null +++ b/code/rtt/tcp_number_of_connections.py @@ -0,0 +1,34 @@ +import csv + +flowsTCP = [] +with open('packetdata.csv', mode='r') as csv_file: + csv_reader = csv.DictReader(csv_file) + for row in csv_reader: + if row["Protocol"] == 'TCP': + tcpFlowExists = False + src = row["Source"] + dest = row["Destination"] + for flow in flowsTCP: + if src in flow and dest in flow: + tcpFlowExists = True + if row["Stream index"] not in flow[2]: + flow[2].append(row["Stream index"]) + break + if not tcpFlowExists: + flowsTCP.append([src, dest, [row["Stream index"]]]) + +csv_file.close() + +flowsTCPOut = [] + +for row in flowsTCP: + flowsTCPOut.append([row[0], row[1], len(row[2])]) + +with open('tcp_number_of_connections.csv', mode='w', newline='') as tcpConnections: + fieldnames = ['src', 'dest', 'connectionCount'] + writer = csv.DictWriter(tcpConnections, fieldnames=fieldnames) + writer.writeheader() + for flow in flowsTCPOut: + writer.writerow({'src': flow[0], 'dest': flow[1], 'connectionCount': flow[2]}) + +tcpConnections.close() diff --git a/code/rtt/tcpparser.py b/code/rtt/tcpparser.py new file mode 100644 index 0000000..8e02396 --- /dev/null +++ b/code/rtt/tcpparser.py @@ -0,0 +1,162 @@ +import csv +import os + +def calcEST(samples): + ests = [] + K = 4 + G = 0.001 # =100 msec + alpha = 1/8.0 + beta = 1/4.0 + + # (2.1) of rtc6298 + RTO = 1.0 + counter = 1 + for sample in samples: + R = sample[1] + # (2.2) of rtc6298 + if counter == 1: + SRTT = R + RTTVAR = R / 2.0 + # (2.3) of rtc6298 + else: + RTTVAR = (1.0 - beta) * RTTVAR + beta * abs(SRTT - R) + SRTT = (1.0 - alpha) * SRTT + alpha * R + + RTO = SRTT + max(G, K * RTTVAR) + # (2.4) of rtc6298 + RTO = max(1.0, RTO) + ests.append(SRTT) + counter += 1 + return ests + +def getEstMedians(indices): + out = [] + indexCount = 1 + for streamIndex in indices: + if indexCount > 400: + break + os.system("tshark -Y \"tcp.stream == " + str(streamIndex) + "\" -T fields -e tcp.analysis.ack_rtt -e frame -E separator=, -E header=y -r univ1_pt13 > temp.csv") + sampleRTT = [] + with open('temp.csv', mode='r') as csv_file: + csv_reader = csv.DictReader(csv_file) + for row in csv_reader: + # apply a sane filter + if (row['tcp.analysis.ack_rtt'] != ""): + sampleRTT.append( (int(row['frame'].split(' ')[1][:-1]), float(row['tcp.analysis.ack_rtt'])) ) + csv_file.close() + + ests = calcEST(sampleRTT) + ests.sort() + length = len(ests) + if (length % 2 == 0): + median = (ests[(length)//2] + ests[(length)//2-1]) / 2 + else: + median = ests[(length-1)//2] + out.append([indexCount, median]) + print(indexCount) + indexCount += 1 + os.remove('temp.csv') + return out + +def getStartTimes(indices, file): + out = [] + indexCount = 1 + for streamIndex in indices: + if indexCount > 400: + break + startTime = 10000000 + with open(file, mode='r') as csv_file: + csv_reader = csv.DictReader(csv_file) + for row in csv_reader: + if int(row["Stream index"]) == streamIndex: + startTime = min(float(row["Time"]), startTime) + out.append([indexCount, startTime]) + csv_file.close() + indexCount += 1 + return out + +# get start time values for each host pair + +r1Indices = [] +with open('r1.csv', mode='r') as csv_file: + csv_reader = csv.DictReader(csv_file) + for row in csv_reader: + if int(row["Stream index"]) not in r1Indices: + r1Indices.append(int(row["Stream index"])) +csv_file.close() +r1Indices.sort() + +r1StartTimes = getStartTimes(r1Indices, 'r1.csv') +with open('r1_start_times.csv', mode='w', newline='') as r1_start_times_file: + fieldnames = ['indexCount', 'startTime'] + writer = csv.DictWriter(r1_start_times_file, fieldnames=fieldnames) + writer.writeheader() + for flow in r1StartTimes: + writer.writerow({'indexCount': flow[0], 'startTime': flow[1]}) +r1_start_times_file.close() + +r2Indices = [] +with open('r2.csv', mode='r') as csv_file: + csv_reader = csv.DictReader(csv_file) + for row in csv_reader: + if int(row["Stream index"]) not in r2Indices: + r2Indices.append(int(row["Stream index"])) +csv_file.close() +r2Indices.sort() + +r2StartTimes = getStartTimes(r2Indices, 'r2.csv') +with open('r2_start_times.csv', mode='w', newline='') as r2_start_times_file: + fieldnames = ['indexCount', 'startTime'] + writer = csv.DictWriter(r2_start_times_file, fieldnames=fieldnames) + writer.writeheader() + for flow in r2StartTimes: + writer.writerow({'indexCount': flow[0], 'startTime': flow[1]}) +r1_start_times_file.close() + +r3Indices = [] +with open('r3.csv', mode='r') as csv_file: + csv_reader = csv.DictReader(csv_file) + for row in csv_reader: + if int(row["Stream index"]) not in r3Indices: + r3Indices.append(int(row["Stream index"])) +csv_file.close() +r3Indices.sort() + +r3StartTimes = getStartTimes(r3Indices, 'r3.csv') +with open('r3_start_times.csv', mode='w', newline='') as r3_start_times_file: + fieldnames = ['indexCount', 'startTime'] + writer = csv.DictWriter(r3_start_times_file, fieldnames=fieldnames) + writer.writeheader() + for flow in r3StartTimes: + writer.writerow({'indexCount': flow[0], 'startTime': flow[1]}) +r1_start_times_file.close() + +# get median values for each host pair + +r1EstMedians = getEstMedians(r1Indices) +r2EstMedians = getEstMedians(r2Indices) +r3EstMedians = getEstMedians(r3Indices) + +with open('r1_est_medians.csv', mode='w', newline='') as estMedians: + fieldnames = ['sequenceNumber', 'medianEstRtt'] + writer = csv.DictWriter(estMedians, fieldnames=fieldnames) + writer.writeheader() + for flow in r1EstMedians: + writer.writerow({'sequenceNumber': flow[0], 'medianEstRtt': flow[1]}) +estMedians.close() + +with open('r2_est_medians.csv', mode='w', newline='') as estMedians: + fieldnames = ['sequenceNumber', 'medianEstRtt'] + writer = csv.DictWriter(estMedians, fieldnames=fieldnames) + writer.writeheader() + for flow in r2EstMedians: + writer.writerow({'sequenceNumber': flow[0], 'medianEstRtt': flow[1]}) +estMedians.close() + +with open('r3_est_medians.csv', mode='w', newline='') as estMedians: + fieldnames = ['sequenceNumber', 'medianEstRtt'] + writer = csv.DictWriter(estMedians, fieldnames=fieldnames) + writer.writeheader() + for flow in r3EstMedians: + writer.writerow({'sequenceNumber': flow[0], 'medianEstRtt': flow[1]}) +estMedians.close() |
