Position: home/contact >
connection oriented routing project
cor - connection oriented routing
Cor is a linux kernel patch (in development) which implements a layer 3+4 protocol for free community mesh networks. Free as "nobody should be able to prevent anybody else using the network the way they want to":
- Denial of service should be as hard as possible. Filtering and throttling should be treated as denial of service attempt.
- Content and time/source/destination and of communication should be protected against evesdropping.
Cor is built operate in a 100% autoconf environment without any central administration. This is neccesary, because central administrations could easily compromise freedom. Cor tries to be resilient to failures, (D)DoS attacks and graceful under high load. It also tries to protect the privacy of its users, even tough this is rather weak.
How cor operates
Connection oriented
Cor keeps a soft state of connections on every router. The reasons are basically:
- Packet headers are much smaller. Source routing and onion routing would otherwise cause huge header. Increasing the packet size to compensate would not be possible for many realtime applications.
- The source address can be rewritten on every router, like IP NAT.
- Flow-control can be done using windowing instead of congestion avoidance algorithms. This decreases reaction time on changing network conditions. There are no retransmits which can waste bandwidth on earlier routers. Latency does not suffer from congestion induced losses and becomes more deterministic. Connections which need a lot of bandwidth, but do not have latency requirements can be buffered a lot more. Also, these buffers are distributed through all routers up to the bottleneck, instead of being concontrated on the bottleneck.
- There is no need for packets to be small enough to fit through all routers/links. The packets can be split and reassembled on every router. Doing the same on layer 2 would cause more overhead. This is especially interesting for media like wlan which depending on signal quality need different packet sizes for good performance.
The drawback of keeping this state is besically memory usage. On the other hand, people sometimes to the same with IP (NAT, stateful packet inspection, transparent proxying, ...).
Source routed
Usually routes are calculated in the network. In a cor network, they are calculates by the clients. This is called source routing. There reasons are:
- Good resilience requires either source routing or other (more invasive) ways to get feedback to the routing daemon.
- If you do the routing in the network, every router has to use the same routing protocol and the same metric. Otherwise you can get routing loops and netsplits. In cor there is a simple "list neighbor" command in the kernel, which will allows you to find routes. Nobody else in the network needs to use the same routing daemon as you.
- Onion routing can only be done source routed.
- Each client knows how much of the network it needs to know. If a client only wants to connect to next internet exit, there is no need to discover a potentially big network.
- The traffic for route discovery can be accounted to the clients.
- If you want to do routing in the network you can still do it. Just send the route back to the client and let the client establish the connection.
Current state
- Neighbor detection: DONE
- Connection establishing: DONE
- Route discovery: DONE
- Neighbor disconnect handling: DONE
- Improve memory handling and some other stuff: DONE
- Improve retransit/ACKs: DONE
- Limit control message queue size/soft queue full behaviour: DONE
- Buffer limits + QoS/Credit system: TESTING
- Project/Protocol docs: WIP
- Kernel <-> routing daemon interface: WIP
- More intelligent "connection data" commands: TODO
- Command timing based on type of service: TODO
- Runtime address changing: TODO
- End-to-end error correction: TODO
- Encryption: TODO (This could be implemented later in a backward compatible way. The problem here is that there is no rsa library in the kernel, yet)
More info
Downloads
Community