90 likes | 99 Views
Explore an architecture for CS179i based on Gnutella and Python, focusing on maintaining active connections, searching, and file sharing components. Utilize data structures like Neighbor Table, Routing History, and File Sharing Table to facilitate efficient communication. Implement robust handling of Ping, Pong, Query, and QueryHit messages for smooth operation. Check neighbor status periodically, handle timeouts, and ensure seamless file retrieval processes. Stay updated on active connections and communication protocols for enhanced performance.
E N D
An Example Architecture for CS179ibased on Gnutella and Python Yihua He
Sources • Gnutella Protocol v0.4 • Norman Matloff’s “Introduction to Threads Programming with Python” • Gnutella Developer’s Forum (GDF) • Sources available online at www.cs.ucr.edu/~yhe/cs179i • Trying to keep updated
Basic Components • A Gnutella Server • Setup and maintain connection with neighbors • Routing Pings/Pongs and Querys/QueryHits • A local searching mechanism • A Gnutella Client • Customized FTP/HTTP server and client for retrieving target files.
Data Structures – Neighbor Table • NeighborTable • Fields: IP, TimeStamp • Keep track of current active neighbors. Neighbors are supposed to send pings periodically in order to keep themselves active. Timeout neighbors will be deleted from NeighborTable. • RoutingHistory • FileSharingTable
Data Structures – Neighbor Table • NeighborTable • Fields: IP, TimeStamp • Keep track of current active neighbors. Neighbors are supposed to send pings periodically in order to keep themselves active. Timeout neighbors will be deleted from NeighborTable. • RoutingHistory • FileSharingTable
Data Structures –RoutingHistory • NeighborTable • RoutingHistory • Fields: DescriptionID, MsgType, SourceIP, Timestamp • Pong/QueryHit descriptors may only be sent back along the same path that carried the orginal Ping/Query descriptors. • To limit the size of RoutingHistory Table, entries will be deleted after a certain period of time (timeout –Soft state) • FileSharingTable
Data Structures—FileSharing Table • NeighborTable • RoutingHistory • FileSharingTable • Fields: FileID, FileName, FilePath, MetaDescription, FileSize, Date and so on • Includes the files a node willing to share • In “QueryHit”, a node only sends out FileID to its peer. The peer opens a customized FTP/HTTP connection to the node and retrieve target files by FileID
Main Loop Listen for new connection request“GNUTELLA CONNECT/0.4\n\n” If neighbor table full N Spawn a new thread to handle connection Y Send “GNUTELLA NOT OK\n\n”Close connection
Maintain and Routing • Process descriptions accordingly: • Ping: Response with a Pong withnode’s information. Update routinghistory table, TTL-=1 and forwardPing to all neighbors if TTL>0 • Pong: Check with routing historytable and if it is in, then TTL-=1 and forward to its destination; else discard • Query: Search local file (File Sharing Table), if hit, send Query/Hit with FileID and otherinfo. Update routing history table,TTL-=1 and forward Queryto all neighbors if TTL>0 • QueryHit: Check with routinghistory table and if it is in, thenTTL-=1 and forward to itsdestination; else discard Re-check if neighbor table full Put a new entry in NeighborTable Send “GNUTELLA OK\n\n” N Y Send “GNUTELLA NOT OK\n\n”Close connectionThread ends Listen for Description Head (23 bytes) At any stage, if it timeouts or any unexpected strings are received, the entry in NeighborTable will be deleted, connection will be closed and the thread ends