Coder Social home page Coder Social logo

silvercreekpk / tcpep Goto Github PK

View Code? Open in Web Editor NEW

This project forked from gregoiredelannoy/tcpep

0.0 1.0 0.0 1.3 MB

Performance-Enhancing proxy for TCP over lossy links

License: GNU General Public License v3.0

Makefile 0.59% C 97.31% C++ 2.10%

tcpep's Introduction

TCPeP

TCPeP is a Performance-Enhancing proxy for TCP over lossy links, using Network Coding principles. It is partly based on the paper "Network coded tcp - CTCP".
Standard TCP algorithm were designed with wired networks in mind, assuming that all losses resulted from congestion events.
Coded-TCP is based on the assumption that losses can be completely random, as it occurs in some wireless links.

When to use it ?

This system is supposed to improve throughput and latency of a communication, compared to standard TCP. The problem it addresses is the problem of random losses, hence you should be able to see an improvement if you experience this over your link.
However, most modern wireless networks effectively hides random packet losses to the upper layers, so there might not be any random loss over your particular network.

I'm highly interested in any test cases or success story, as I did not have access to a wide range of networks to test the system for now.

How does it work ?

The CTCP protocol works on two different levels :

  • The congestion control is based on RTT measurements, ร  la TCP-Vegas
  • The loss correction is based on Network Coding (see the included file for more details)

How can I use it ?

The system consists of a client software on the mobile host and a proxy side, on a ground server. The architecture is represented in the diagram below: This image represents the client/proxy architecture

Requirements

  1. Both hosts must run Linux (it also might work on other Unix system.)
  2. You must have root access to the client, for iptables
  3. The Proxy must be connected to the Internet through a reliable link
  4. You should be able to communicate via UDP between the Client and the Proxy

Installation and Usage

  1. Get the code:
    git clone "https://github.com/GregoireDelannoy/TCPeP.git"

  2. Compile:
    make all

  3. Run the Proxy, on the proxy host. The UDP port should be reachable from the client:
    ./tcpep -P -u <UDP PORT TO LISTEN ON> (-v)

  4. Run the Client:
    ./tcpep -C <PROXY IP ADDRESS> -u <PROXY UDP PORT> -t <TCP PORT TO LISTEN ON> (-v)

  5. Redirect the connections you want to re-route through the proxy. For example:

     # Redirect connections to HOST
     iptables -t nat -A OUTPUT -p tcp -d HOST -j REDIRECT --to-ports <CLIENT TCP PORT>
     
     # Redirect everything apart from localhost
     iptables -t nat -A OUTPUT -p tcp !-d 127.0.0.1 -j REDIRECT --to-ports <CLIENT TCP PORT>
    

Context and further information

This project started in 2012/2013 as an undergrad Final Year Project. I will try my best to debug and maintain it, but there's absolutely no guarantee as to the functionality !
For more information, you could read my final project report here.

tcpep's People

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.