@ -113,10 +113,41 @@ func (t *Tree) Nodes() []*enode.Node {
return nodes
}
/ *
We want to keep the UDP size below 512 bytes . The UDP size is roughly :
UDP length = 8 + UDP payload length ( 229 )
UPD Payload length :
- dns . id 2
- dns . flags 2
- dns . count . queries 2
- dns . count . answers 2
- dns . count . auth_rr 2
- dns . count . add_rr 2
- queries ( query - size + 6 )
- answers :
- dns . resp . name 2
- dns . resp . type 2
- dns . resp . class 2
- dns . resp . ttl 4
- dns . resp . len 2
- dns . txt . length 1
- dns . txt resp_data_size
So the total size is roughly a fixed overhead of ` 39 ` , and the size of the
query ( domain name ) and response .
The query size is , for example , FVY6INQ6LZ33WLCHO3BPR3FH6Y . snap . mainnet . ethdisco . net ( 52 )
We also have some static data in the response , such as ` enrtree-branch: ` , and potentially
splitting the response up with ` " " ` , leaving us with a size of roughly ` 400 ` that we need
to stay below .
The number ` 370 ` is used to have some margin for extra overhead ( for example , the dns query
may be larger - more subdomains ) .
* /
const (
hashAbbrev = 16
maxChildren = 300 / hashAbbrev * ( 13 / 8 )
minHashLength = 12
hashAbbrevSize = 1 + 16 * 13 / 8 // Size of an encoded hash (plus comma)
maxChildren = 370 / hashAbbrevSize // 13 children
minHashLength = 12
)
// MakeTree creates a tree containing the given nodes and links.