# Naming

IPs are not human readable.

Not always the appropriate granularity

- The address names an interface
- This however does not give information about the kind of service / hardware

A file maps names to addresses

- Unix & Linux
  - `/etc/hosts`
- Windows
  - `C:\Windows\System32\drivers\etc\hosts`

These are simple but neither automatic or scalable which led to **DNS**.

- Was initially `RFC882`
- Now is `RFC1035, 1987`

DNS is a consistent namespace

- No reference to addresses, routes etc
- Is hierarchical, distributed & cache
  - All of which to help with scalability
- **Federated** - sources control trade-off
  - This just means DNS are worldwide
- **Flexible** - many record
- Simple client-server name resolution protocol

#### Components

- *Domain name space* and *resource records*
  - Tree structured name space
  - Data associated with names
- *Name server*
  - Contains records for a sub tree
  - May cache information about any part of the tree
- Resolver
  - Extract information from tree upon client requests
  - `gethostbyname()`

![img](/lectures/acn/img/aa.png)

###### Root

- Ultimate authority with the US Dept. of commerce (NITA)
- Managed by IANA, operated by ICANN, maintained by Verisign
- Started with only thirteen root server clusters
  - Now much more
- Top level Domains, TLDs
  - Operated by registrars, delegated by ICANN
- Delegate zones to other registrars
  - and so on down the hierarchy
- Eventually customer rents a name - their **zone**
  - Registrar installs appropriate *resource records*
  - Associated with names within the zone

#### Query

- Query generated by resolver
  - e.g. call to `gethostbyname()`, `gethostbyaddr()`
- Carried in single UDP/53 packet
  - Or more rarely TCP/53 in case of truncation
  - UDP is not smart and therefore does not follow traffic routing (it is selfish)
    - It is beneficial for the internet as a whole to use UDP sometimes
- Header followed by question
  - ID, Q/R, opcode, AA/TC/RD/RA, response code, counts
  - Query type, query class, query name

Response consists of three RRsets following the header and question

- **Answers**: RRs that the server had for the QNAME
- **Authoritatives**: RRs pointing to an authority for the name
- **Additionals**: RRs related to the question but don’t answer it

###### Common Resource Records

- `A` / `CNAME` / `PTR`

```
www.cs.nott.ac.uk.			61272	IN	CNAME	pat.cs.nott.ac.uk.

pat.cs.nott.ac.uk.			68622	IN	A		128.243.20.9

pat.cs.nott.ac.uk.			68622	IN	A		128.243.21.19

9.20.243.128.in-addr.arpa.	39617	IN	PTR		pat.cs.nott.ac.uk.
```

`cname` refers to the mapping of the domain name to its IP (or another domain) & ports

Can have 2 authoritative records

- `NS`

```
cs.nott.ac.uk.	10585	IN	NS	ns1.nottingham.ac.uk.
cs.nott.ac.uk. 	10585	IN	NS	ns2.nottingham.ac.uk.
cs.nott.ac.uk. 	10585	IN	NS	marian.cs.nott.ac.uk.
cs.nott.ac.uk.	10585	IN	NS	extdns1.warwick.ac.uk.
cs.nott.ac.uk.	10585	IN	NS	extdns2.warwick.ac.uk.
```

It is good practice to have an external DNS, UoN uses Warwick as an external DNS.

- `MX`

```
nott.ac.uk.	3600	IN	MX	1 mx191.emailfiltering.com.
nott.ac.uk.	3600	IN	MX	2 mx192.emailfiltering.com.
nott.ac.uk	3600	IN	MX	3 mx193.emailfiltering.com.
```

What happens when the resolver queries a server that doesn't know the answer? two solutions:

1. **Iterative** (required)
   - Server responds indicating who to ask next
   - This method is slower and more difficult to retrieve an answer
1. **Recursive** (optional)
   - Server generates a new query to the next server

![img](/lectures/acn/img/ab.png)

#### Load Balancing

DNS may have multiple servers, when a query comes various algorithms can be used to choose the best one, this can be geographical location.

#### Operational & Security Issues

- Usually need primary and secondary servers
  - Separate IP netblocks, physical networks - more robust
  - DNS is a *very* common single point of failure
- Cache poisoning
  - Caching and soft-state means bad data propagates and can persist for some time
  - Even if through simple mistakes (or of course malicious attacks)
- Man-in-the-middle attacks
  - Can happen with both iterative & recursive queries
