计算机网络6-应用层
域名系统DNS
DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。
域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。
域名服务器
一个服务器所负责管辖的(或有权限的)范围叫做区 (zone)。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射。
每个域名服务器都只对域名体系中的一部分进行管辖
分类:
根域名服务器:
最高层次,最为重要。
所有根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。
根域名服务器总共只有 13 个不同 IP 地址的域名,但并非仅由13台机器所组成。
顶级域名服务器
顶级域名服务器(即 TLD 服务器)负责管理在该顶级域名服务器注册的所有二级域名。
权限域名服务器
负责一个区(zone)的域名服务器。
当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户,下一步应当找哪一个权限域名服务器。
本地域名服务器
非常重要。
当一个主机发出 DNS 查询请求时,该查询请求报文就发送给本地域名服务器。
每一个互联网服务提供者 ISP 或一个大学,都可以拥有一个本地域名服务器。
当所要查询的主机也属于同一个本地 ISP 时,该本地域名服务器立即就能将所查询的主机名转换为它的 IP 地址,而不需要再去询问其他的域名服务器。
本地域名服务器有时也称为默认域名服务器。
为了提高域名服务器的可靠性,主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行,保证了数据的一致性。
域名的解析过程
递归查询
通常,主机向本地域名服务器查询时使用。若不知道,就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。
迭代查询
本地域名服务器向根域名服务器查询时使用。要么给出所要查询的 IP 地址,要么告诉下一个要查询的域名服务器的 IP 地址。本地域名服务器继续后续查询
高速缓存:存放最近用过的名字以及从何处获得名字映射信息的记录。作用:大大减轻根域名服务器的负荷,使 DNS 查询请求和回答报文的数量大为减少。
DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用 TCP 进行传输:
如果返回的响应超过的 512 字节(UDP 最大只支持 512 字节的数据)。
区域传送(区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据)。
万维网
万维网是一个大规模的、联机式的信息储藏所。万维网用链接的方法能非常方便地从互联网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。这种访问方式称为“链接”。
万维网时分布式超媒体系统,是超文本系统的扩充。
万维网工作方式
万维网以客户服务器方式工作,客户程序(浏览器)向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。在一个客户程序主窗口上显示出的万维网文档称为页面 (page)。
用统一资源定位符 URL使每一个文档在整个互联网的范围内具有唯一的标识符 URL。
使用超文本传送协议 HTTP (HyperText Transfer Protocol)实现万维网上的各种链接,HTTP 是一个应用层协议,使用 TCP 连接进行可靠的传送。
使用超文本标记语言 HTML 使不同作者创作的不同风格的万维网文档都能在互联网上的各种主机上显示出来,同时使用户清楚地知道在什么地方存在着链接。
使用各种的搜索工具(即搜索引擎)方便地找到所需的信息
统一资源定位符 URL
实际上就是在互联网上的资源的地址。
URL格式

超文本传送协议 HTTP
HTTP 是面向事务的 (transaction-oriented) 应用层协议。使用 TCP 连接进行可靠的传送。定义了浏览器与万维网服务器通信的格式和规则。是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
HTTP协议工作过程

请求一个万维网文档所需的时间
所需的时间 >= RTT(三报文握手建立 TCP 连接) + RTT(请求和接收文档)+ 文档的传输时间= 2 RTT +文档的传输时间
协议 HTTP/1.0 的主要缺点:非持续连接使服务器的负担很重。
协议 HTTP/1.1 使用持续连接:持续连接(persistent connection):服务器在发送响应后仍然在一段时间内保持这条连接(不释放),使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。
持续连接:非流水线方式 :客户在收到前一个响应之后才能发出下一个请求。
持续连接:流水线方式:客户在收到响应报文之前就能够接着发送新的请求报文。
协议 HTTP/2
服务器可以并行发回响应(使用同一个 TCP 连接)。
允许客户复用 TCP 连接进行多个请求。
把所有的报文都划分为许多较小的二进制编码的帧,并采用了新的压缩算法,不发送重复的首部字段,大大减小了首部的开销,提高了传输效率。
向后兼容。
代理服务器
代理服务器 (proxy server) 又称为万维网高速缓存 (Web cache),它代表浏览器发出 HTTP 请求。使用高速缓存可减少访问互联网服务器的时延。
HTTP报文的结构
两类报文:
请求报文:从客户向服务器的请求。
响应报文:从服务器到客户的回答。
由于 HTTP 是面向正文的 (text-oriented),因此报文中每一个字段的值都是一些 ASCII 码串,每个字段的长度都是不确定的。
三个组成部分:
开始行:用于区分是请求报文还是响应报文。
首部行:说明浏览器、服务器或报文主体的一些信息。可以有多行,也可以不使用。
实体主体:请求报文中一般不用,响应报文中也可能没有该字段。
请求报文


响应报文

状态码:
1xx 表示通知信息,如请求收到了或正在进行处理。
2xx 表示成功,如接受或知道了。
3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
4xx 表示客户的差错,如请求中有错误的语法或不能完成。
5xx 表示服务器的差错,如服务器失效无法完成请求。
在服务器上存放用户的信息:维网使用 Cookie 跟踪在 HTTP 服务器和客户之间传递的状态信息。
万维网的文档
超文本标记语言 HTML
<a>:链接标签。
XML:可扩展标记语言 XML (Extensible Markup Language) 和 HTML 很相似。设计宗旨是:传输数据,而不是显示数据。
特点和优点:可用来标记数据、定义数据类型;
允许用户对自己的标记语言进行自定义,并且是无限制的;
简单,与平台无关;
将用户界面与结构化数据分隔开来;
XHTML:可扩展超文本标记语言 XHTML
CSS:(Cascading Style Sheets) 是一种样式表语言,用于为 HTML 文档定义布局。
CGI:通用网关接口 CGI (Common Gateway Interface) :定义动态文档应如何创建,输入数据应如何提供给应用程序,以及输出结果应如何使用的一种标准。
活动万维网文档:活动文档 (active document) 技术:把屏幕连续更新的工作转移给浏览器端。
信息检索系统
垂直搜索引擎:针对某一特定领域、特定人群或某一特定需求提供搜索服务。也是提供关键字来进行搜索,但被放到一个行业知识的上下文中,返回的结果更倾向于信息、消息、条目等。
元搜索引擎 :把用户提交的检索请求发送到多个独立的搜索引擎上去搜索,并把检索结果集中统一处理,以统一的格式提供给用户,因此是搜索引擎之上的搜索引擎。
核心技术:网页排名:对搜索结果按重要性排序。
博客与微博
博客:万维网日志 (weblog) 的简称。使网民不仅是互联网上内容的消费者,而且还是互联网上内容的生产者。
微博:微型博客 (microblog),又称为微博客。只记录片段、碎语,三言两语,现场记录,发发感慨,晒晒心情,永远只针对一个问题进行回答。开通的多种 API 使用户可通过手机、网络等方式即时更新自己的信息。是一种互动及传播性极快的工具。
社交网站 SNS (Social Networking Site) :为一群拥有相同兴趣与活动的人创建在线社区。
文件传送协议FTP
FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件:
控制连接:服务器打开端口号 21 等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传送给服务器,并传回服务器的应答。
数据连接:用来传送一个文件数据。
根据数据连接是否是服务器端主动建立,FTP 有主动和被动两种模式:
主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0~1023 是熟知端口号。
被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。
主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。
动态主机配置协议DHCP
DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息。
DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。
DHCP 工作过程如下:
客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。
DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。
如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。
DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。
电子邮件协议
一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件协议。
邮件协议包含发送协议和读取协议,发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。
1. SMTP
SMTP 只能发送 ASCII 码,而互联网邮件扩充 MIME 可以发送二进制文件。MIME 并没有改动或者取代 SMTP,而是增加邮件主体的结构,定义了非 ASCII 码的编码规则。
2. POP3
POP3 的特点是只要用户从服务器上读取了邮件,就把该邮件删除。但最新版本的 POP3 可以不删除邮件。
3. IMAP
IMAP 协议中客户端和服务器上的邮件保持同步,如果不手动删除邮件,那么服务器上的邮件也不会被删除。IMAP 这种做法可以让用户随时随地去访问服务器上的邮件。
常用端口
应用 | 应用层协议 | 端口号 | 传输层协议 | 备注 |
域名解析 | DNS | 53 | UDP/TCP | 长度超过 512 字节时使用 TCP |
动态主机配置协议 | DHCP | 67/68 | UDP | |
简单网络管理协议 | SNMP | 161/162 | UDP | |
文件传送协议 | FTP | 20/21 | TCP | 控制连接 21,数据连接 20 |
远程终端协议 | TELNET | 23 | TCP | |
超文本传送协议 | HTTP | 80 | TCP | |
简单邮件传送协议 | SMTP | 25 | TCP | |
邮件读取协议 | POP3 | 110 | TCP | |
网际报文存取协议 | IMAP | 143 | TCP |
Web 页面请求过程
1. DHCP 配置主机信息
假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。
主机生成一个 DHCP 请求报文,并将这个报文放入具有目的端口 67 和源端口 68 的 UDP 报文段中。
该报文段则被放入在一个具有广播 IP 目的地址(255.255.255.255) 和源 IP 地址(0.0.0.0)的 IP 数据报中。
该数据报则被放置在 MAC 帧中,该帧具有目的地址 FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:FF,将广播到与交换机连接的所有设备。
连接在交换机的 DHCP 服务器收到广播帧之后,不断地向上分解得到 IP 数据报、UDP 报文段、DHCP 请求报文,之后生成 DHCP ACK 报文,该报文包含以下信息:IP 地址、DNS 服务器的 IP 地址、默认网关路由器的 IP 地址和子网掩码。该报文被放入 UDP 报文段中,UDP 报文段有被放入 IP 数据报中,最后放入 MAC 帧中。
该帧的目的地址是请求主机的 MAC 地址,因为交换机具有自学习能力,之前主机发送了广播帧之后就记录了 MAC 地址到其转发接口的交换表项,因此现在交换机就可以直接知道应该向哪个接口发送该帧。
主机收到该帧后,不断分解得到 DHCP 报文。之后就配置它的 IP 地址、子网掩码和 DNS 服务器的 IP 地址,并在其 IP 转发表中安装默认网关。
2. ARP 解析 MAC 地址
主机通过浏览器生成一个 TCP 套接字,套接字向 HTTP 服务器发送 HTTP 请求。为了生成该套接字,主机需要知道网站的域名对应的 IP 地址。
主机生成一个 DNS 查询报文,该报文具有 53 号端口,因为 DNS 服务器的端口号是 53。
该 DNS 查询报文被放入目的地址为 DNS 服务器 IP 地址的 IP 数据报中。
该 IP 数据报被放入一个以太网帧中,该帧将发送到网关路由器。
DHCP 过程只知道网关路由器的 IP 地址,为了获取网关路由器的 MAC 地址,需要使用 ARP 协议。
主机生成一个包含目的地址为网关路由器 IP 地址的 ARP 查询报文,将该 ARP 查询报文放入一个具有广播目的地址(FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:<zero-width space>FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧转发给所有的连接设备,包括网关路由器。
网关路由器接收到该帧后,不断向上分解得到 ARP 报文,发现其中的 IP 地址与其接口的 IP 地址匹配,因此就发送一个 ARP 回答报文,包含了它的 MAC 地址,发回给主机。
3. DNS 解析域名
知道了网关路由器的 MAC 地址之后,就可以继续 DNS 的解析过程了。
网关路由器接收到包含 DNS 查询报文的以太网帧后,抽取出 IP 数据报,并根据转发表决定该 IP 数据报应该转发的路由器。
因为路由器具有内部网关协议(RIP、OSPF)和外部网关协议(BGP)这两种路由选择协议,因此路由表中已经配置了网关路由器到达 DNS 服务器的路由表项。
到达 DNS 服务器之后,DNS 服务器抽取出 DNS 查询报文,并在 DNS 数据库中查找待解析的域名。
找到 DNS 记录之后,发送 DNS 回答报文,将该回答报文放入 UDP 报文段中,然后放入 IP 数据报中,通过路由器反向转发回网关路由器,并经过以太网交换机到达主机。
4. HTTP 请求页面
有了 HTTP 服务器的 IP 地址之后,主机就能够生成 TCP 套接字,该套接字将用于向 Web 服务器发送 HTTP GET 报文。
在生成 TCP 套接字之前,必须先与 HTTP 服务器进行三次握手来建立连接。生成一个具有目的端口 80 的 TCP SYN 报文段,并向 HTTP 服务器发送该报文段。
HTTP 服务器收到该报文段之后,生成 TCP SYN ACK 报文段,发回给主机。
连接建立之后,浏览器生成 HTTP GET 报文,并交付给 HTTP 服务器。
HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个 HTTP 响应报文,将 Web 页面内容放入报文主体中,发回给主机。
浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。