Funktionsweise der Knoten
                    - Boss-Worker Modell
 
                        - Boss: Auf Paket warten
 
                        - Boss: Paket an Worker weitergeben
 
                        - Worker: Paket verarbeiten
 
                    
Funktionsweise der Knoten
                    Verteilung der Pakete
                    Funktionsweise der Knoten
                    Boss-Worker: Implementierung mit Pthreads
					
while (1) {
    // wait for next package
    newsockfd = wait_for_connection(sockfd);
    // let worker handle package
    pthread_create(&workers[thread_counter], NULL, worker_init, (void *)newsockfd);
    // alternate workers
    thread_counter += 1;
    if (thread_counter >= NUM_WORKERS) {
        thread_counter = 0;
    }
}
                    
                    Details: Siehe Github
                Verbindungen zu Nachbaren
                    - Nachbar: Knoten, dessen IP-Adresse und Port bekannt ist
 
                        - Nachbaren-Liste
 
                        - Bidirektionale Verbindungen -> Handshake
 
                    
Verbindungen zu Nachbaren
                    Handshake
                    Routing
                    - Z.B. “In welcher Richtung liegt das Ziel?”
 
                        - Tabelle mit zwei Einträgen
 
                        - Pro Eintrag: Nachbar (IP-Adresse und Port)
 
                    
Routing
                    - Eigenheit von Aufgabenstellung ausgenutzt:
                            “Pakete werden immer von der Quelle zum Ziel oder vom Ziel zur Quelle gesendet”
 
                        - Routingtabelle möglichst früh anpassen
 
                        - Einträge werden nie überschrieben
 
                    
Paket-Forwarding
                    - Knoten: Paket weiterleiten, falls nicht für mich
 
                        - Routingtabelle verwenden
 
                        - Fallback: Flooding
 
                    
Paket-Forwarding
                    Flooding
                    Paket-Forwarding
                    Problem mit ringförmig verbundenen Knoten
                    Erreichen des Ziels
                    - Nur bei Quell- und Zielknoten möglich
 
                        - Ausgabe der Nachricht
 
                        - Umwandlung des Nachrichtenpakets in OK-Paket
 
                        - Routing sehr einfach
 
                        - Schwarze Liste wird ignoriert
 
                        - OK-Paket: Zurück bis zu ursprünglichem Sender
 
                    
Demo
                    - Python-Testprogramm
 
                        - 1 Startknoten
 
                        - 1 Zielknoten
 
                        - 10 Verbindungsknoten
 
                        - 3 Pakete
 
                    
Lessons learned
                    - Geteilte Ressourcen immer locken
 
                        - Debugging: Gnu Debugger (GDB)