应用层
约 2122 个字 4 张图片 预计阅读时间 7 分钟
DNS
简介
Domain Name System(域名系统)的作用是将复杂的IP地址映射为人类可记忆的域名。在最初的ARPANET中使用了一个简单的本地文本文件来存储IP地址到名称的映射,但随着网络的扩大,如果还这么做的话,首先文本文件会很大,其次难以避免冲突,因而需要引入一个专门的系统来管理域名。

在需要解析域名时,电脑上的stub resolver会向local DNS resolver发出请求(其中包含了要解析的域名),local DNS resolver会通过递归或迭代地查询找出映射的结果。

采用递归查询会对根域名服务器造成巨大的开销,因为所有查询都是由根域名服务器在进行,而采用迭代查询将大部分的工作移到了本地,可以减少根域名服务器的负载。
域名
域是名字空间中的一个可被管理的划分,域可以划分为子域,而子域还可以继续划分。每个域名都由标号序列组成,而各标号之间用.隔开。域名是从后往前解析的,比如www.baidu.com中com是顶级域名,baidu是二级域名,www是三级域名,根域名通常被省略,其实域名结尾应该还有一个.表示根域名。
查询流程
DNS 是一个分层的系统,从上到下依次有:
- 根域名服务器(root server)
- 顶级域名服务器(top-level-dns server)
- 权威服务器(authoritative server)
- ...
查询时从上到下依次查询

- 域名和IP都很短小(不超过255个字符),并且域名解析非常常见,故选择使用了UDP
- 一个16bit长的Transcation Indentifier会被包含到每个请求和被复制到响应中
- 超时将重发请求,在一定数量的重试后使用其它的域名服务器
- 使用QNAME Minimization而不是完整的域名(fully qualified domain name)来保护隐私
- 缓存查询的结果复用,缓存的每一项要包含TTL用于刷新记录
格式
域名解析记录是一个Tuple,由5项组成(domain_name, time_to_live, class, type, value)
常用的类型有:
- SOA(Start of Authority):提供参数
- A(Address):持有一个IPv4地址
- AAAA(Quad A):持有一个IPv6地址
- MX(Mail Exchange):声明用来为特定域名接收邮件的域名
- NS(Name of a server for this domain):声明用于域名和子域名的服务器
- CNAME(Canonical Name):为域名创建别名
工作流程
- User Agent(UA):是一个程序,提供与电子邮件系统交互的接口(图形化或命令行)
- Mail submission:发送新邮件到文件系统的行为
- Message Transfer Agent(MTA):运行在邮件服务器上的系统程序,能够使用SMTP协议自动将邮件从发送者转移至接收者
- Mailing lists:为表上的每个邮件地址都复制一份消息发送

连接UA和MTA的是:
- 邮箱:存储收到的邮件
- 邮件信息的标准格式:RFC822和RFC5322,可能会有multimedia content和international text(MIME)
邮件格式
类似于真实的信件,有:
- Envelope:封装消息,包含用于转发/路由的信息
- Content
- Header:为UA准备的控制信息
- Body:完全给人类接收者的信息
邮箱地址是收件人邮箱名@邮箱所在主机域名的格式,其中收件人邮箱名在单一邮件服务器上必须唯一,从而确保邮箱地址全局唯一。
MIME
因为SMTP只能传送7位ASCELL码文本邮件,许多其它非英语国家的文字就无法传送,且无法传递可执行文件和其他二进制对象,所以提出了MUME(Multipurpose Internet Mail Extentions)。其本质是一套编码规则,能够将ASCELL内容和非ASCELL内容相互转换。
SMTP 和 POP3
- SMTP(Simple Mail Transfer Protocol)是一种提供可靠且有效的电子邮件传输的协议,它控制两个相互通信的SMTP进程交换信息。
- POP(Post Office Protocol)是一个非常简单但功能有限的邮件读取协议,现在使用的版本是POP3,有两种工作方式:“下载并保留”和“下载并删除”
- IMAP(Internet Message Access Protocol):比POP复杂很多,提供创建文件、在不同文件夹间移动邮件及在远程文件夹中查询邮件等联机命令,因此需要维护会话状态,另一特性是允许只获取报文的某些部分。
- HTTP:有些电子邮件是基于Web的,浏览器和邮件服务器之间收发信息使用HTTP,比如gmail
WWW
简介
World Wide Web(WWW)是一个分布式、联机式的信息存储空间,在这个空间中,一切有用的事物都称作资源,并由全局统一资源定位符(URL)标识。这些资源通过HTTP传送给使用者,而使用者通过单击链接来获取资源。
万维网的内核部分是由三个标准组成:URL、HTTP和HTML。URL的一半形式是protocol://host:port/path,不区分大小写。
服务器程序向客户程序发送回客户需要的万维网文档,并返回信息给Web浏览器:
- Web用户使用浏览器(指定URL)与Web服务器建立连接,并发送浏览请求
- Web服务器把URL转化为文件路径,并返回信息给Web浏览器
- 通信完成,关闭连接
超文本传输协议
简介
超文本传输协议(HTTP)定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎么把文档传送给浏览器。从协议执行流程来说,浏览器要访问WWW服务时,首先要完成对WWW服务器域名的解析。一旦获取了服务器IP地址,浏览器就通过TCP向服务器发送连接请求。
流程
每个万维网站点都有一个服务器进程,它不断地监听TCP的端口80(默认),当监听到连接请求后便与浏览器建立TCP连接。然后,浏览器就向服务器发送请求获取某个Web页面的HTTP请求。服务器收到请求后,将构建所请求Web页面的必须信息,并通过HTTP响应返回给浏览器。浏览器再将信息进行解释,然后将Web页显示给用户。最后,TCP连接释放。
特点
HTTP 使用TCP作为传输层协议,保证数据的可靠传输,但HTTP本身是无连接的。HTTP是无状态的,也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的状态相同,因为服务器并不记得曾经服务过这个用户。在实际应用中,通常使用cookie加数据库的方式来跟踪用户活动。
HTTP 既可以使用非持续连接(HTTP/1.0),又可以使用持续连接(HTTP1.1支持)。对于非持续连接,每个网页元素对象的传输都需要单独建立一个TCP连接,请求一次的时间为2RTT。对于持续连接,又可以分为非流水线式和流水线方式:
- 非流水线方式:客户在收到前一个响应后才能发出下一个请求,服务器在发完一个对象后,其TCP连接就处于闲置状态,浪费了服务器资源,连接建立后一次请求的时间是1RTT
- 流水线方式:客户可以连续发出对各个对象的请求,服务器可以连续响应这些请求
报文结构
HTTP是面向文本的,因此报文中的每个字段都是一些ASCELL码,并且每个字段的长度都是不确定的。有两类HTTP报文:请求报文和响应报文,两种报文都由三个部分组成:
- 开始行:在请求报文的开始行称为请求行,而在响应报文中称作状态行。
- 首部行:用来说明浏览器、服务器或报文主体的一些信息
- 实体主体:在请求报文中一般不用这个字段,而在响应报文中也可能没有这个字段