Reverse-Engineering Congestion Control Algorithms

With proprietary Congestion Control Algorithms (CCAs) becoming increasingly prevalent, it is becoming harder to analyze them to gain insights into their interactions with other network elements. We thus explore the use of techniques from program synthesis to reverse-engineer CCAs from observed traces of their behavior, and develop a synthesis pipeline, Abagnale that helps users automate the reverse-engineering task. By limiting the output with a Domain-Specific Language (DSL), using partial searches of the output space to inform future search, and accepting approximate answers, we find success in reverse-engineering implementations of common CCAs as well as those from a dataset of student-written CCAs from a graduate networking class.