计算机网络第7章--应用层
人类今天也在绝赞衰退中!
DNS(Domain Name System)
A client-server application that identifies each host on the internet with a unique user-friendly name(domain name).
功能:Translating domain name to IP address.
Features:
- UDP datagram
- Hierarchical(层次化) namespace
Resource Records(RR)
Each doamin in the DNS has one or more Resource Records.
DNS中的每个域都含有一个或多个资源记录 (RRs)。
DNS A记录
“A”代表”地址”,这是最基础的DNS记录类型:它表示给定域的ip地址。比如,拉取 cloudflare.com 的 DNS 记录,A 记录当前返回的 IP 地址为:104.16.132.229。
A记录只保存IPv4地址。如果一个网站拥有IPv6地址,它将改用”AAAA”记录
下面是一个A记录的示例:
- @表示这是当前域名本身,即根域名或主域名
- 14400 的值是TTL生存时间,以秒为单位。A记录的TTL默认是14400秒。这意味着,如果A记录更新,需要240分钟(14400秒)后才会生效
如果有子域名时,在DNS表中通常如下表示:
主机名 (Host) | 记录类型 (Record Type) | 值 (Value) | TTL |
---|---|---|---|
@ |
A | 192.0.2.1 | 14400 |
www |
A | 192.0.2.2 | 14400 |
mail |
A | 192.0.2.3 | 14400 |
blog |
A | 192.0.2.4 | 14400 |
DNS AAAA记录
DNS AAAA记录将域名与IPV6地址进行匹配。DNS AAAA记录与DNS A记录完全一样,只是它们存储域的IPV6地址,而非IPV4地址
下面是一个AAAA记录示例:
DNS CNAME记录
“规范名称”(CNAME)记录用于将别名域指向一个规范域名。当一个域或者子域是另一个域的别名时,CNAME记录被用来代替A记录。所有的CNAME记录都必须指向一个域名,而不是指向一个IP。
例如:假设 blog.example.com 的 CNAME 记录的值为“example.com”(没有“blog”)。这意味着当 DNS 服务器点击 blog.example.com 的 DNS 记录时,它实际上会触发另一个对 example.com 的 DNS 查找,并通过其 A 记录返回 example.com 的 IP 地址。在这种情况下,我们会说 example.com 是 blog.example.com 的规范名称(或真实名称)。
通常,当站点具有子域(例如 blog.example.com 或 shop.example.com)时,这些子域将具有指向根域 (example.com) 的 CNAME 记录。这样,如果主机的 IP 发生更改,则仅需要更新根域的 DNS A 记录,这样所有 CNAME 记录都会跟随对根所做的任何更改。
一个常见的误解是 CNAME 记录必须始终解析为其指向的域所在的网站,但事实并非如此。CNAME 记录仅将客户端指向与根域相同的 IP 地址。客户端访问该 IP 地址后,Web 服务器仍将相应地处理 URL。例如,blog.example.com 可能有一个 CNAME 指向 example.com,从而将客户端定向到 example.com 的 IP 地址。但是,当客户端实际连接到该 IP 地址时,Web 服务器将查看 URL,发现它是 blog.example.com,并且提供博客页面而不是主页。
CNAME记录示例:
Name servers &Name Resolution
DNS Client-Server Interaction(交互)
Client:
- resolver(解析器):客户端指运行在用户设备上的解析器软件(端口53)
- 该软件至少可以访问一个名称服务器进行域名解析
多个DNS服务器的使用:
- DNS服务器是按照严格的层次结构进行组织和部署的。
- 每个DNS服务器都对其所负责的域名空间(即其“区域”或“zone”)拥有权威性。
- 每个权威DNS服务器都存储着其负责区域内所有主机的资源记录。
- 服务器如何知道其他负责其他区域的服务器?
- 所有的DNS服务器都知道根服务器的地址。
- 根服务器存储着所有顶级域名服务器的信息。
- 通过这种分层结构,每个服务器可以根据查询的域名,知道去哪个更下级的服务器(或请求的下一步)来获取信息。
DNS lookup(此处学自CloudFlare)
网页加载涉及4个DNS服务器:
- DNS解析器:该解析器可被视为被要求去图书馆的某个地方查找特定图书的图书馆员。DNS解析器是用户设备与DNS系统进行交互的“第一站”,它负责发起和接收DNS查询,并将结果传递给应用程序。
- 根域名服务器:根域名服务器是将域名转化为IP地址的第一步,可将其视为指向不同书架的图书馆中的索引。根服务器不直接知道每个域名的IP地址,它们只知道负责各个顶级域的TLD名称服务器的地址。
- TLD名称服务器:顶级域名服务器(TLD)可看作图书馆中的一个特殊的书架。TLD服务器知道在其所管辖的顶级域名下,哪些权威性域名服务器负责具体的域名。例如,
.com
TLD服务器知道google.com
、microsoft.com
等域名的权威性域名服务器的地址。 - 权威性域名服务器:权威性域名服务器是DNS查询链中的“终点站”,它存储着某个特定域名(或其子域名)的最终、准确的IP地址信息。
DNS查找的8个步骤:(无缓)
- 用户在 Web 浏览器中键入 “example.com”,查询传输到互联网中,并被 DNS 递归解析器接收。
- 接着,解析器查询 DNS 根域名服务器(.)。
- 根域名服务器会根据查询的顶级域(TLD,如
.com
),响应该TLD对应的名称服务器的IP地址给递归解析器。 - 递归解析器接收到TLD服务器的地址后,会向该TLD名称服务器(例如
.com
TLD 服务器)发送查询请求。 - TLD名称服务器会根据查询的域名(例如
example.com
),响应该域名的权威性域名服务器的IP地址给递归解析器。 - 归解析器接收到权威性域名服务器的地址后,会向该权威性域名服务器(例如
example.com
的权威性域名服务器)发送查询请求。 - 权威性域名服务器会响应该域名(
example.com
)对应的IP地址给递归解析器。至此,DNS查找过程完成,域名成功解析为IP地址。 - 然后 DNS 解析器使用最初请求的域的 IP 地址响应 Web 浏览器。
DNS 的查询类型
递归查询:
- 发出方要求接收方提供一个完整的答案(即直接返回域名的IP地址),如果接收方不知道答案,则由接收方负责去查找并获取答案。
- 接收方责任:接收到递归查询的服务器(即DNS递归解析器)有责任完成整个查询过程,直到找到最终的IP地址,或者确定该域名无法解析。它会代表发起查询的客户端,依次向根、TLD和权威性服务器发送迭代查询。
迭代查询:
- 发出方请求接收方提供它所知道的最好的答案。如果接收方没有最终答案,他会返回一个指向下一个更权威的DNS服务器的引用或提示。
- 接收方责任:接收到迭代查询的服务器不负责去查找完整的答案。它只返回它所直到的直接信息。(要么是最终答案,要么是下一个应该去查询的服务器的地址)
非递归查询:
- 非递归查询是指 DNS 解析器客户端直接查询一个 DNS 服务器,而该 DNS 服务器已经拥有所查询记录的答案的情况 。
这种情况通常发生在以下两种情况:
- 服务器对该记录具有权威性: DNS 服务器本身就是所查询域名的 权威性域名服务器 。
- 记录存在于其缓存中: DNS 服务器(通常是DNS递归解析器或本地DNS服务器)已经缓存了之前查询过的该域名对应的IP地址。
DNS根服务器
DNS根服务器(Root Name Server)是域名系统(DNS)层次结构中的最顶层,是互联网基础设施中至关重要的一部分。
历史上,根服务器曾被限制为13个逻辑IP地址(A到M)。但这不代表只有13台物理服务器。
实际上,这13个逻辑IP通过任播(Anycast)技术在全球范围内部署了数百甚至上千台物理服务器。这意味着当你向一个根服务器的IP地址发送请求时,网络路由器会将你的请求路由到离你最近的那个物理服务器。
什么是Anycast DNS
在Anycast 中,一个IP地址可以应用于许多服务器。Anycast DNS 意味着一组DNS服务器中的任何一台都可以响应DNS查询,通常由地理位置最接近的一台提供响应。这可减少延迟,提高DNS解析服务器的正常运行时间。
Anycast
通常,任何直接连入Internet 的设备或服务器都具有唯一的IP地址。联网设备之间的通信是一对一的;每个通信都从一个特定设备传到通信另一端的目标设备。相比之下,Anycast网络允许网络上的多台服务器使用相同的IP地址或一组IP地址。与Anycast网络的通信是一对多的。
Email System and Protocols
Components Of Email System
UA(User Agent)
- 终端用户邮件程序,充当用户与邮件服务器之间的接口 。
- 例如:Outlook (邮件客户端), Foxmail (邮件客户端) 等。
Mail Server (邮件服务器)
- 主要职责是负责传输,接收电子邮件,并向邮件发送方报告邮件传输的信息状态。
- 邮件服务器 既是客户端也是服务器 (因为它既会向其他服务器发送邮件,也会从其他服务器接收邮件)。
电子邮件协议:
- SMTP (Simple Mail Transfer Protocol) : 用于发送电子邮件 。当你点击“发送”时,邮件就是通过SMTP协议从你的邮件客户端发送到邮件服务器,再由邮件服务器发送到接收方的邮件服务器。
- POP3 (Post Office Protocol version 3) / IMAP (Internet Message Access Protocol) : 用于接收电子邮件 。当你打开邮件客户端查收邮件时,就是通过POP3或IMAP协议从邮件服务器下载或访问邮件。
Message Format
消息(Message - ASCLL):
- 一个消息(例如一封电子邮件)由以下几个部分组成
- 一个原始的信封(a primitive envelope):
- 这个“信封”可以理解为邮件传输过程中需要的一些信息,比如发件人地址、收件人地址等,这些信息是邮件系统用来路由和投递邮件的。它类似于真实信封上的收寄地址。
- 若干个头部字段 (some number of header fields) :
- 这些是邮件内容的元数据,比如“主题 (Subject)”、“发件人 (From)”、“收件人 (To)”、“日期 (Date)”等等。它们提供了关于邮件的各种信息。
- 一个空白行 (a blank line) :
- 这个空白行非常重要,它用来 分隔头部字段和邮件正文 。在邮件传输协议中,遇到这个空白行就知道头部信息结束了,接下来就是邮件的正文内容。
- 然后是消息正文 (and then the message body) :
- 这才是邮件的实际内容,即你撰写和阅读的文本信息。
- 一个原始的信封(a primitive envelope):
- 每个头部字段都由一行ASCII文本组成 :
- 头部字段的格式是标准化的,每一行头部字段都包含:
- 字段名称 (field name) :
- 例如“Subject”、“From”、“To”等。
- 一个冒号 (a colon) :
- 用于分隔字段名称和字段值。
- 对于大多数字段,一个值 (a value) :
- 这是字段名称对应的内容,例如“Subject: Hello World!”中的“Hello World!”就是值。
- 字段名称 (field name) :
- 头部字段的格式是标准化的,每一行头部字段都包含:
MIME(Multipurpose Internet Mail Extension)
多用途互联网邮件扩展协议
MIME的主要目的就是让电子邮件能够承载不仅仅是纯文本的内容,还能包含图片、音频、视频、应用程序文件等多种类型的内容,并且可以支持一封邮件包含多个不同类型的部分(例如,一封邮件里既有文字,又有图片附件)。
- 额外的邮件头部定义内容(Additional mail headers define content)
- MIME通过在邮件中添加一些新的头部字段来定义内容的类型和编码方式。
- 类型 (Type) :
text
(文本):如text/html
(HTML格式的文本)、text/plain
(纯文本)/image
(图像):如/image/gif
(GIF格式的图片)、/image/jpeg
(JPEG格式的图片)audio
(音频)video
(视频)application
(应用程序文件):如application/pdf
(PDF文档)、application/msword
(Word文档)
- 编码:(Encoding)
- 定义了如何将非ASCII的二进制数据转换为电子邮件系统可以处理的ASCII字符格式。这是因为早期的电子邮件系统只能处理标准的ASCII字符。
ASCII
:针对纯ASCII文本。base64
:用于编码任意的二进制数据(如图片、音频等),将其转换为ASCII字符序列,以便通过只能处理文本的邮件系统传输。
SMTP(Simple Mail Transfer Protocol)
a simple ASCII protocol
SMTP是一个推送协议
POP(Post Office Protocol)
Transfer mail from mail server to UA
从服务器上下载邮件后通常从服务器中删除
IMAP(Internet Message Access Protocol)
互联网访问协议
与POP3(邮件下载后通常从服务器删除不同),IMAP将邮件保留在服务器上。
IMAP协议的特点使其非常适合那些需要从多个设备(例如,办公室电脑、家里电脑、手机、平板电脑)访问同一邮箱的用户。无论在哪个设备上,用户都能看到邮箱的最新状态。
Webmail
World Wide Web 万维网
Hypertext Transfer Protocol(HTTP)
Http事务:
- 建立连接(Establish connection)
- TCP连接建立,使用一个端口号作为应用程序参考,通常是端口80 (TCP connection set up, uses a port number as application reference, usually port 80) 。
- HTTP是建立在TCP(传输控制协议)之上的应用层协议。在发送HTTP请求之前,客户端和服务器之间必须先通过三次握手建立一个TCP连接。对于HTTP,默认的端口号是80。
- 客户端请求(Client request)
- 客户端发送请求消息:方法、URL、HTTP版本、头部字段 (Client sends request message: method URL HTTPversion headers) 。
- 方法 (method) :指定了客户端希望对资源执行的操作
- URL (Uniform Resource Locator) :统一资源定位符,指明了请求的资源在哪里。
- HTTP版本 (HTTPversion) :客户端使用的HTTP协议版本
- 头部字段 (headers) :提供了关于请求的额外信息,如
User-Agent
(客户端类型)、Accept
(可接受的响应内容类型)、Host
(请求的主机名)等。
- 服务器响应 (Server response)
- 服务器发送响应消息:HTTP版本、状态码、状态短语、头部字段、[可选内容] (server sends response message: HTTPversion status code status phrase headers [optional stuff]) 。
- HTTP版本 (HTTPversion) :服务器使用的HTTP协议版本。
- 状态码 (status code) :一个三位数字代码,表示请求的结果
- 状态短语 (status phrase) :状态码对应的简短文字描述,如
OK
、Not Found
。 - 头部字段 (headers) :提供了关于响应的额外信息,如
Content-Type
(响应内容的类型)、Content-Length
(响应内容的长度)、Server
(服务器软件信息)等。 - [可选内容] ([optional stuff]) :这是指 响应体 (response body) ,即请求的实际内容,比如HTML页面、图片文件、JSON数据等。
- 连接终止 (Connection terminated)
- 一旦数据传输完成,HTTP连接就可以被关闭。
HTTP/1.1
持久连接(Persistent Connection):
- 使用相同的TCP连接传输多个文件(Use the same TCP connection for transfer of multiple files)
- 显著减少数据包流量(Reduces packet traffic significantly)
管线化(Pipelining):
- 多个HTTP请求可以写入一个套接字,而无需等待相应的响应。(Multiple HTTP requests can be written out to a socket together without waiting for the corresponding responses.)
总结来说:
- 持久连接解决了每个请求都建立/关闭TCP连接的开销,使得TCP连接可以复用。
- 管线化则是在持久连接的基础上,允许客户端“批量”发送请求,进一步减少了等待时间,提高了并发性。