Unit 5. Applications and NATs

网络地址转换

  1. DNS

  2. HTTP

  3. NATs

Main Point

互联网的一些应用。主要是上面三个 + BitTorrent

1. NATs - Introduction

1.1. Strong End-to-End

网络的工作就是连接两台 host,寻找之间最高效的路径,传播datagram...

1.2. Network Address Translator

当数据包从计算机发出时,NAT会将这个数据包进行改写(通常改写 IP = X,这样在 destination host 实际上会收到来自 X的data,source host 也会收到来自 Y的data),被发送到了更广泛的区域...

external interface...

这样子实际上允许多部主机共享 IP,所以现在的家庭网络实际上运用 NAT 让家里的设备具有同一 IP = X

实际上是对 IP 地址进行了扩展。

18.181.0.31 destination host S <- NAT 128.34.22.8 -> 10.0.0.101 source port host A

1.3. How a NAT Works?

实际上建立了一个类似路由的中转站。

internal interface && external interface

实际上建立了一个 mapping 映射

并且仅仅针对 TCP

本地私有地址 10.0.X.X开头

网络公共地址 192.0.X.X开头

2. Types of NATs

2.1. NAT Internal Mapping

具体可以查询 RFC 的具体介绍。

2.2. Full Cone NAT

全锥形NAT(Full Cone NAT)是一种网络地址转换(NAT)的工作模式,它是最宽松的NAT类型。简单来说,它就像是一个“开放的网络大门”,只要内部设备先主动发起一次通信,外部设备就可以通过这个大门直接与内部设备通信,而不需要额外的限制。

2.3. Restricted Cone NAT

Restricted Cone NAT(受限锥形NAT)是一种介于全锥形NAT和端口受限锥形NAT之间的网络地址转换(NAT)类型。它的主要特点是对外部主机的访问进行了限制,但不像端口受限锥形NAT那样严格。

只会允许曾经访问过的 IP 开放

2.4. Port Restricted NAT

端口受限锥形NAT(Port Restricted Cone NAT)是一种比受限锥形NAT更严格的NAT类型,它不仅限制了外部主机的IP地址,还限制了端口号。

内部设备发起连接:

  1. 内部设备(例如IP为192.168.1.10,端口为12345)发起一个连接请求到外部设备(例如IP为203.0.113.5,端口为50000)。

  2. NAT设备会将这个连接请求映射为一个公网IP地址和端口(例如203.0.113.10:60000),并记录这个映射关系。

  3. 后续 only this IP with only this port can 访问

2.5. Symmetric NAT

对称NAT(Symmetric NAT)是一种非常严格的网络地址转换(NAT)类型,它为每个连接请求都分配一个唯一的外部IP地址和端口映射。

different destination receive different mapping...

原理

  • 基于会话的映射

  • 双向通信限制

  • 动态映射

特点

  • 安全性高

  • 对P2P通信不友好

  • 管理复杂

2.6. NAT Behavioral Recommendations

  • More complications - RFC标准

  • TCP

  • UDP

  • Hairpinning

    • 两台电脑(A和B),它们都通过NAT设备连接到公网

    • A想和B通信,但它只知道B的公网地址(通过NAT映射的地址)

    • 这种情况下,数据包会先从A发到NAT设备,然后NAT设备再把数据包“折回来”(就像发夹一样)发给B。

  • 这些情况会在 RFC 详细说明

3. NAT Implications

3.1. Applications: Incoming Connections

应用:入站连接

3.2. Connection Reversal

反转服务

连接反转是一种在P2P通信中解决NAT穿透问题的方法。它通过一个中间服务器协调,让内网设备主动去连接公网设备,从而绕过NAT的限制。但它只适用于“一方在NAT后面,另一方有公网IP”的情况。

会和服务

3.3. Relays

中继 R

在网络中,中继的作用也是类似的。当两个设备之间因为距离太远、网络环境复杂(比如NAT限制)或者信号不好而无法直接通信时,中继可以帮助它们完成通信

这时候不是端到端原则,我们引入了一台中心主机

端到端原则的意思是:网络通信应该尽量让发送方和接收方直接通信,中间尽量少干预。这样可以提高效率,减少复杂性。

但有时候,直接通信很难实现(比如NAT限制、防火墙阻挡等)。这时候,中继就不得不介入了。虽然引入中继违背了端到端原则,但它是为了让通信能够顺利进行,是一种“无奈但有效”的解决方案。

3.4. Applications: NAT Hole-Punching

NAT Hole-Punching是一种“穿墙术”,它能让躲在NAT(网络地址转换)后面的设备直接通信,就好像在墙上凿了个洞,让两个设备可以直接“看到”对方,而不需要通过中间的服务器转发数据。

可以迫使 NAT 建立一个 mapping

3.5. NAT Debate

Tremendously useful

  • Reuse address 地址复用

  • security 安全性

Tremendously painful

  • large complication to application development 应用开发复杂

  • speak freely 限制自由通信

Debate interesting but pointless: NATs are here to stay

但是他们的优势大于劣势,人们还是愿意部署它

4. Nats - Operations

NAT操作是指NAT设备(通常是路由器)如何将内网设备的私有IP地址转换为公网IP地址,以便设备能够访问外部网络。

4.1. NAT Internal Mapping

NAT内部映射是指NAT设备如何将内网设备的私有地址映射到公网地址。这种映射关系可以是静态的,也可以是动态的。

4.2. UDP

RFC4787

4.3. TCP

RFC5382

5. HTTP

Hyper Text

超文本

超文本文档只是一个文本文档。

超文本链接是一个格式链接。

5.1. World Wide Web(HTTP)

请求 - 响应

GET - 200 OK

Example

GET / HTTP/1.1

HTTP 1.1 200 OK

5.2. HTTP Request Format

请求头 + 值

请求的消息体。

GET 的通常是空

POST 则具有消息体

5.3. HTTP/1.0 speed

HTTP 建立三次握手的时间

包括了:

  • Latency

  • segment packetization

6. HTTP 11 Keep-alive

  • Open connection

  • Issue GET

  • Server closed connection after response

大多数时间花在打开链接上(打开图片等等)。而不是发送请求。

6.1. SPDY

是谷歌提出的一种协议,为了加速网页的加载

  • Protocol proposed by Google to speed up the web

  • Request pipelining 请求流水线

  • Removes redundant headers 去掉多余的头部信息

  • Becoming basis 其他协议的好基础

7. BitTorrent

Swarms,Rarest-First and Tit-for-Tat

是一种应用。允许人们共享数据。

Client 成群,共享 Server

7.1. Torrent FIle

DHT 分布式哈希表

BitTorrent 把大文件分成很多小块,让多个用户同时上传和下载,提高下载速度。

Hash Check

通过计算文件的“指纹”来验证文件是否完整,防止恶意篡改。

7.2. What to Say?

用户会优先下载别人在上传的。

Rarest-First(最稀缺优先)最稀缺优先是一种聪明的下载策略。它会优先下载那些“最稀缺”的文件块(也就是很少人拥有的文件块)。

7.3. Whom To Talk To?

使用 TFT 策略。Tit-for-Tat(以牙还牙):公平交易,你对我好,我也对你好,防止有人只下载不上传。

作用: 这种策略可以防止“白嫖”行为(只下载不上传)。通过这种方式,BitTorrent鼓励每个用户都积极参与上传,从而让整个洪流的下载速度更快。

7.4. BitTyrant

BitTyrant 是一个基于 BitTorrent 协议的客户端软件,它通过优化算法和策略来提高下载速度和网络吞吐量。简单来说,它是一个“更聪明”的下载工具,可以让文件下载得更快。

可以提高 70% 的吞吐量

7.5. Summary

  • Torrent file (.torrent) describes file to download

    • Torrent 文件 (.torrent) 描述要下载的文件

  • File broken into pieces, each with a SHA 1 hash

    • 文件被分成很多小块,每个块都有一个 SHA-1 哈希值

  • Client finds peers through a tracker or DHT

    • 客户端通过 Tracker 或 DHT 找到其他下载者(Peers)

  • Clients connect over TCP/IP

    • 客户端通过 TCP/IP 连接

  • Clients exchange metadata on what pieces they have

    • 客户端互相交换“我有什么片段”的信息

  • Clients try to download rarest-piece-first

    • 客户端优先下载“最稀缺的片段”(Rarest-First)

  • Clients "choke" most peers, send data to P best peers: tit-for-tat

    • 客户端“限制”大多数用户,只给 P 个最好的用户发送数据(以牙还牙:Tit-for-Tat)

8. DNS - 1

Domain Name System

8.1. Parsing a URL

输入URL时,通常使用了人类易于理解的名称,当然也可以使用计算机主机IP地址

8.2. HOSTS.EXE

  • originally,所有的主机都在这个文件,由网络信息中心维护

  • 隔一段时间,主机会下载新的版本

  • 但很快引起一些未知问题

HOSTS 文件:是一个古老的“电话簿”,记录了域名和 IP 地址,但随着互联网的发展,它变得难以维护。

8.3. Domain Name System

域名解析系统

DNS(域名解析系统):是一个智能的导航系统,它通过分布式的服务器快速查找域名对应的 IP 地址,解决了 HOSTS 文件的局限性。

两条特性使得DNS设计上可行:

  • 只读/大部分读数据库

    • 只读/大部分读数据库:DNS 的数据大部分时间是固定的,不会频繁变化,所以可以缓存。

  • loose consistency

    • 松散一致性:DNS 的数据不需要实时同步,即使部分数据过时也不会影响功能。

两条特性允许 extensive caching

  • 寻找名字

  • 长时间保存结果

8.4. DNS Name Architecture

域名系统结构

由 root 出发,分配域名

DNS 的结构像一棵倒着的树,最顶端是一个点( . ),称为 根(Root)。

从根开始,域名被分成不同的层级。

  • 顶级域名(TLDs):比如 .com 、 .org 、 .net 、 .cn 等,它们是树的第一层分支。

  • 二级域名:比如 example.com ,是在 .com 下面的一个分支。

  • 三级域名:比如 www.example.com ,是在 example.com 下面的一个分支。

8.5. DNS Servers

  • Hierarchical zones

    • DNS 的整个域名系统是分层的,就像一个倒过来的树。每一层都叫一个“区域(Zone)”,每个区域负责管理一部分域名。

  • Each zone can be separately administered

    • 每个区域都可以由不同的组织或团队管理。

    • 根区域(Root Zone):由全球的互联网管理机构(ICANN)管理。

    • 顶级域名区域(TLD Zone,比如 .com ):由专门的公司(比如 Verisign)管理。

    • 二级域名区域(比如 example.com ):由域名所有者(比如公司或个人)管理。

  • Each zone served from several replicated servers

    • 每个区域由多个服务器提供服务

  • Root zone: 13 servers, highly replicated(a, b, c, ...m)

    • 全球有 13 组根服务器(A 到 M),比如 A.root-servers.net 到 M.root-servers.net 。这些服务器通过 anycast 技术 分布在全球,确保快速响应和冗余。

    • 小小日本,服务器数量和中国差不多...实在很难想象他们怎么打的......

8.6. DNS Query

Two type

  • Recursive

    • 递归查询(Recursive)

    • 当你向 DNS 服务器发起递归查询时,这个服务器会一直帮你查下去,直到找到最终的 IP 地址,然后把结果返回给你。它不会让你自己去问别的服务器。

  • Non-recursive

    • 非递归查询(Non-recursive)

    • 当你向 DNS 服务器发起非递归查询时,如果它不知道答案,它会告诉你:“去问下一个服务器。”然后你自己去问那个服务器,直到找到最终的 IP 地址。

  • Specified by bit in query

    • DNS 查询的类型是由查询请求中的一个标志位(bit)决定的。

    • 如果你设置为递归,DNS 服务器就会帮你查到底;

    • 如果是非递归,它就只告诉你下一步该问谁。

UDP port 532

  • 512byte meesage limit

  • DNS 查询通常使用 UDP 协议

  • 它是一种快速但不太可靠的传输方式(就像快递公司,速度快但偶尔会丢包裹)

  • DNS 使用的 UDP 端口号是 53

  • UDP 协议有一个限制,就是每个数据包的大小不能超过 512 字节(大约 512 个字符)。

9. DNS - 2

Queries and Resource Records

DNS 查询的实际样貌、格式及其结果.查询机器构成的资源记录

9.1. Resource Records

资源记录(Resource Records,RR)资源记录是 DNS 查询的结果,它包含了你想要的信息。资源记录有点像一个“小卡片”,上面写了很多关键信息。

一个资源记录的结构

  1. 域名(Name): 你查询的域名,比如 www.example.com 。

  2. 类型(Type): 这个记录的类型,比如 A(IPv4 地址)、AAAA(IPv6 地址)、MX(邮件服务器)等。

  3. 类别(Class): 通常是“IN”(Internet)。

  4. TTL(Time to Live): 这个记录的有效期,单位是秒。比如,TTL 是 3600 秒,表示这个记录在 1 小时内是有效的,之后需要重新查询。

  5. 数据(Data): 这个记录的实际内容,比如 IP 地址、邮件服务器地址等。

9.2. DNS Header Structure (RFC1035)

基本信息:

  1. ID:这是报文的“身份证号”,用来区分不同的查询和响应。

  2. Flags:这是报文的“标签”,用来说明这个报文是查询还是响应,是否需要递归查询等。

  3. QDCOUNT:表示“问题部分”中有多少个问题。

  4. ANCOUNT:表示“回答部分”中有多少个回答。

  5. NSCOUNT:表示“权威部分”中有多少个记录。

  6. ARCOUNT:表示“附加部分”中有多少个记录。

9.3. DNS Name Compression

DNS 名称压缩是一种技术,用来减少 DNS 报文的大小。DNS 报文中有很多重复的域名信息,比如 www.example.com 和 mail.example.com 都有重复的 example.com 部分。为了节省空间,DNS 协议允许用“指针”来代替这些重复的部分。

  • 将复杂字符使用更低比特的字符代替

  • 指针代替复用报文

9.4. DNS A Record...

A记录是一个资源记录(Resource Record),它的格式如下

  1. 域名(Name):你要查询的域名,比如 www.example.com 。

  2. 类型(Type): A,表示这是一个A记录。

  3. 类别(Class):通常是 IN(Internet)。

  4. TTL(Time to Live):这个记录的有效期,单位是秒。比如 3600 秒(1小时),表示这个记录在1小时内有效。

  5. 数据(Data):对应的IPv4地址,比如 192.0.2.1 。

Name: www.example.com
Type: A
Class: IN
TTL: 3600
Data: 192.0.2.1

10. DNS Details

10.1. Traversing Zones

DNS 穿越区域(Traversing Zones)

DNS 是一个分层的系统,域名被分成不同的区域(Zone)。每个区域有自己的管理权限和服务器。当你查询一个域名时,DNS 查询会从根服务器开始,逐层向下查找,直到找到目标域名的权威服务器。

10.2. Glue Record Example

胶水记录是一种特殊的 DNS 记录,用于解决域名解析中的“循环依赖”问题。当一个域名的权威服务器(NS 记录)属于它自己管理的域名时,就需要胶水记录来提供权威服务器的 IP 地址。

10.3. CNAME Record

(全称 Canonical Name Record,规范名称记录)是 DNS 中的一种记录类型,它的作用是把一个域名(别名)映射到另一个域名(规范名称)。创建别名.

  • 作用:简化管理、子域名转发、多域名共用一个 IP。

  • 格式: 域名 IN CNAME 目标域名 。

  • 区别:A 记录直接映射到 IP,CNAME 记录映射到另一个域名。

  • 注意事项:不能与其他记录共存,目标域名不能有其他记录,会增加额外查询。

10.4. MX Record

MX记录(Mail Exchange Record,邮件交换记录)

MX记录的作用是告诉邮件系统:“当有人给我这个域名发邮件时,应该把邮件送到哪个邮件服务器上。”简单来说,MX记录就是邮件的“收件地址”。

10.5. Many Other Kinds of Records

  • SOA: Start of Authority

  • TXT: arbitrary text(great for extensions)

  • PTR: map address to name

  • AAAA: IPv6 address records

11. DHCP

Dynamic Host Configuration Protocol 动态主机配置协议

这是一个非常重要的网络协议,用来自动分配IP地址和其他网络配置信息

11.1. Communicating with IP

需要:

  • IP 地址

  • 子网掩码

  • Gateway 路由

11.2. 旧的方法

手动配置

  • 你的系统管理员会给你上述的东西

其他问题

引发一些问题:

  • 如果机器移动,不再工作了

    • 移动性问题:设备在不同网络之间移动时,手动配置非常不方便。

  • 能够持续多久?

    • 维护问题:网络管理员需要手动管理 IP 地址分配和回收,工作量很大。

  • garbage collection?

    • 灵活性问题:网络配置变化时,所有设备都需要手动更新,效率很低。

这样的方式可行,但是效率极低,所以 DHCP 诞生

11.3. DHCP

HCP 的工作过程(四步交互)

  1. 客户端发送请求(DHCP Discover)

    1. 当设备连接到网络时

    2. 它会广播一个“DHCP Discover”请求

    3. 询问:“有没有DHCP服务器?请给我一个IP地址。”

  2. 服务器响应(DHCP Offer)

    1. 所有监听到请求的DHCP服务器都会从自己的IP地址池中选择一个可用的IP地址

    2. 并发送一个“DHCP Offer”响应,告诉客户端:“我给你这个IP地址,你可以用。”

  3. 客户端选择并请求(DHCP Request)

    1. 客户端收到多个“DHCP Offer”后

    2. 会选择一个服务器的IP地址

    3. 并发送一个“DHCP Request”

    4. 表示接受这个IP地址。

  4. 服务器确认(DHCP Acknowledge)

    1. 服务器收到“DHCP Request”后

    2. 会发送一个“DHCP Ack”确认消息

    3. 正式分配IP地址

    4. 并告诉客户端IP地址的有效期(租期)

用户发出请求,有不止一个 DHCP 会响应

11.4. Communicating Without IPv4

  • UDP ports 67 for server and 68 for client

  • 广播 IP 地址 (255.255.255.255)

    • 客户端在没有 IP 地址时

    • 通过广播地址发送请求

    • 确保能被服务器收到

  • 通信过程

    • 客户端广播请求 → 服务器响应 → 客户端确认 → 服务器完成分配

12. Applications

NATs, DNS, HTTP, BitTorrent

12.1. 网络地址转化器 NAT

原理

它通过管理一组地址,使得地址都得以扩展

私有地址 <-> 公有地址

可以将外部IP转换为内部IP

通过 External Interface && Internal Interface

12.2. 域名系统 DNS

使用 UDP

很重要的现代因特网基础设施,但只是一个应用程序...

根节点可以访问顶级域名询问下一级的地点

使用的是一个 Read-mostly 数据库

12.3. 超文本传输协议 HTTP

使用 TCP

请求 - 响应 协议

12.4. BitTorrent

使用 TCP

首先建立用户群

利用这个应用,可以分享应用。将文件分块

提升下载速度

Last updated