From eb7916990326202ac520cd4ee4db8a5acb2731c8 Mon Sep 17 00:00:00 2001 From: Luke Harding Date: Wed, 1 May 2024 01:31:33 -0400 Subject: [PATCH] Add diagram and MTIWP spec --- README.md | 40 ++++++++++++++++++++++++++++++++++++++-- static/diagram.png | Bin 0 -> 36821 bytes 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 static/diagram.png diff --git a/README.md b/README.md index 81f4f5a..3d183fa 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,39 @@ -# map-the-internet +# Map the Internet (MTI) -A project that is designed to scrape the internet to create a visualization of the internet. \ No newline at end of file +A project that is designed to scrape the internet to create a visualization of the internet. + +## How does it work? +![A diagram depicting how the workers communicate with the server](static/diagram.png?) + +The process of mapping the internet is fairly simple: +1. The server assigns a worker a domain/list of paths to index. +2. The worker goes through each page of respecting robots.txt. +3. The worker makes a list of all a tags which link to an external domain. +4. The list is sent to the server which compares each external domain to its database. + +The process operates in 3 stages: +1. Initial Stage/Exponential Growth - The number of new domains is much greater than the existing domains. +2. Saturation Stage - The number of new domains is lower than the amount of existing domains. +3. Rescanning Stage - Existing domains are periodically rescanned looking for new links. + +## MTI Worker Protocol (MTIWP) Specification +MTIWP is a TCP-based binary application layer protocol used to communicate between the workers and coordination server. + +The packet is made up of the following fields: +- Version (2 Bytes) +- Worker ID (6 Bytes) +- Timestamp (8 Bytes) +- Method (1 Byte) +- Payload Length (2 Bytes) +- Payload (0-65535 Bytes) + +Valid Methods: +- ACK (0x00) +- Ping (0x01) +- Pong (0x02) +- Hello (0x03) +- Index (0x04) +- Cancel (0x05) +- Summary (0x06) + +Further Detail Goes Here diff --git a/static/diagram.png b/static/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b04219d76d60951dc257ca74d07c9e2d542d5d GIT binary patch literal 36821 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 z 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 literal 0 HcmV?d00001