90 likes | 196 Vues
Explore an innovative architecture for CS179i utilizing Gnutella and Python. Discover advanced components like Gnutella Server, customized FTP/HTTP tools, and efficient data structures like Neighbor Table and Routing History for seamless connectivity and file-sharing. Keep pace with the latest advancements in the field on www.cs.ucr.edu/~yhe/cs179i.
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