week02-应用层

本周进入到第二章应用层的学习,不得不说自顶向下学习果真能激发兴趣,由于平时开发工做常常也就是和应用层打交道,可是对具体原理老是只知其一;不知其二,随着这章的阅读,能让本身对咱们开发的应用程序,是怎样利用网络实现其功能的,有了更深刻的了解。html

咱们平常中所用到的,开发的软件基本都是基于应用层的软件。不须要关心数据包究竟是如何传输的,只须要按照应用层对接下一层的协议接口进行开发就能够了。数据库

应用程序体系结构,咱们最经常使用的是客户-服务器体系结构,好比生活中最经常使用的浏览器就是这种模式的。有一个老是打开的服务器用来接收各个客户端的请求,返回对应的数据。 另外一个就是P2P 体系结构,和客户-服务器相反,这些应用程序在间断链接的主机之间使用直接通讯,这些主机也被称为对等方。api

在操做系统中,程序之间的通讯是经过进行来进行的,而不是程序。一个进程能够被认为是一个端系统中的一个程序,当进程运行在同一个端系统上时,它们使用进程间通讯机制进行通讯。进程间的通讯规则有端系统山的操做系统决定。浏览器

咱们如今知道了多数应用程序是经过通讯进程对组成,每对中的两个进行 互相发动报文。从一个进程向另外一个进行发送报文必须经过下层的计算机网络。这里进程是经过一个被称之为套接字的软件接口向网络发送报文和从网络接收报文的。缓存

进程寻址安全

为了向特定的目的地的主机上的进程发送分组,接收进程须要一个地址,而为了标识接收进程是须要经过:服务器

  1. 主机的地址;
  2. 定义在目标主机的进程的端口号;

咱们在开发应用层程序时,是不须要考虑具体是怎样将发送的数据分组发送到目的主机的,对于应用层程序来讲,只须要将数据分组推送进套接字。而在套接字的另外一侧, 运输层协议负责使该数据分组进入接收进程的套接字。网络

因特网提供的运输层的协议不止一种,咱们最多见的当属 TCP、UDP 了,具体使用须要从如下几个方面进行衡量:分布式

  1. 可靠数据传输;
  2. 吞吐量;
  3. 定时
  4. 安全性;

总结来讲,TCP 提供了可靠地数据传输,由于其创建在三次握手的基础上,可以保证数据到达目的进程。UDP 是一种轻量级运输协议,没有拥塞控制,提供一种不可靠数据传输服务,也就是说,UDP客户端能够用任何它选定的速率向其下层注入数据,通常网络电话能够容忍范围内的数据丢失,更愿意应用运行在UDP上。ide

应用层协议

说到Web其应用层协议就是HTTP。
HTTP 请求报文:

GET /api/monitoring/converged-status HTTP/1.1\r\n
Host: 192.168.8.1\r\n
Connection: keep-alive\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36\r\n
Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8\r\n

第一行为请求航,其后的都叫作首部行。

请求行的三个字段表明的是 方法字段、URL字段、HTTP版本字段
当请求为POST方式时,在首部行下方还有一个实体体,用来存放表单提交的数据。

HTTP响应报文:

HTTP/1.1 200 OK\r\n
Cache-Control: no-cache, no-store, max-age=0, must-revalidate\r\n
Content-Type: text/html\r\n
Connection: Keep-Alive\r\n
Content-Length: 1073\r\n

File Data: 1073 bytes

响应报文,也有三个部分,状态行、首部行、而后是实体体。实体体是报文的主要部分,即它包含了所请求对象的自己。

FTP文件传输协议

应用层协议FTP,做为一个文件传输协议,其和HTTP有类似的地方,底层都采用TCP传输协议,然而这两个应用也有也有一些重要的区别,其中最显著的就是 FTP 使用了两个并行的 TCP 链接来传输文件,一个是控制链接,一个是数据链接。 控制连接 用来在两主机之间传入控制信息,如用户表示、口令、改变远程目录的命令以及存放和获取文件的命令。数据链接用来实际发送一个文件。

SMTP

SMTP 是因特网电子邮件应用的核心,这个协议是用来从发送方的邮件服务器发送报文到接收方的邮件服务器的。

 

如上图所示,SMTP 的做用就是将邮件报文从发送邮件服务器送到接收邮件服务器。 下面大概解释下具体流程。
首先,客户SMTP(运行在发送邮件服务器上)在25 端口创建一个到服务器SMTP(运行在接收邮件服务器上)的TCP链接。 若是服务器没有开机,客户会在稍后进行重试,一旦链接创建,服务器和客户执行某些应用层的握手后,就向人们在互相交流前先进行自我介绍同样。在SMTP握手阶段,SMTP 客户指示发送方邮件地址(产生报文的那我的)和接收方邮件地址,一旦该SMTP客户和服务器彼此介绍以后 ,客户发送该报文。

这里在记录一个比较明显的问题,那就是在Bob的邮件服务器接收到邮件后,他的本地PC上的代理是如何得到位于他的某ISP 邮件服务器上的邮件呢? 这里不能再使用SMTP了,由于这里须要的是一个拉协议, 而SMTP 是一个推协议,目前流行的一些邮件访问协议能够解决这个问题,包括第三版的邮局协议(POP3) 、因特网邮件访问协议(Internet Access Protocol,IMAP) 以及HTTP。

总结: SMTP 用来将邮件从发送方的邮件服务器传输到接收方的邮件服务器;SMTP 也用来将邮件从发送方的用户代理传送到发送方的邮件服务器。如POP3这样的邮件访问协议能够用来将邮件从接收方的邮件服务器传送到接收方的用户代理。

DNS (Domain Name System)

DNS 是: 1. 一个由分层的 DNS服务器(DNS server) 实现的分布式数据库;2. 一个使得主机可以查询分布式数据库的应用层协议。 DNS服务器一般是运行BIND (Berkeley Internet Name Domain) 软件的UNIX机器。 DNS 协议运行在 UDP之上,使用53号端口。与 HTTP、FTP 和 SMTP 协议同样,DNS 协议是应用层协议。

DNS服务器不多是单一部署的,它是一个巨大的具备表明性的分布式数据库;

 

DNS 是由不少DNS服务器组成,映射关系分布在全世界范围内的全部DNS服务器上。

DNS服务器分为三种: 根DNS服务器、顶级域(TOP-Level Domain,TLD) DNS服务器和 权威DNS服务器。

接下来记录一下,这三种DNS服务器之间的交互方式, 假设我如今要访问 www.baidu.com , 首先我本机的DNS客户端与根服务器之一联系,它将返回顶级域名 com 的TLD服务器 IP地址。而后 我在与这些TLD服务器之一联系,它将返回 baidu.com 的权威服务器的 IP地址。最后我将与 baidu.com 权威服务器之一联系,它将为 www.baidu.com 返回其 IP 地址。

上面说的三类DNS服务器都是处在 DNS服务器的层次结构中, 在这里咱们学习到还有一类很是重要的DNS服务器,称为 本地DNS服务器。 一个 本地DNS服务器,严格来讲不属于DNS服务器的层次结构,但它是很是重要的。 每一个 ISP(Internet Service Provider) 都有一台本地DNS 服务器。 经过访问Windows 或者UNIX 的网络状态窗口,可以很容易的肯定你本地DNS服务器的IP地址。 通常 本地DNS服务器“临近” 本主机。 基本上 ISP 的本地DNS服务器与主机相隔不超过几个路由器。

下面这幅图用来理解本地DNS服务器在交互中起的做用:

 

 

接下来,要说一个DNS系统中很是重要的一个特点,DNS 是有缓存的。为了减小时延而且有效减小因特网上处处传输的DNS报文数量, DNS 会将每个DNS 回答缓存在本地存储中。 例如本地DNS服务器在接收到一个回答时,它可以将回答中的任何信息都缓存起来,在下一个相同主机名查询时能够直接返回。因为主机和主机名以及IP地址之间的映射不是永久的,所以会有一个过时时间,通常缓存2天。

本地 DNS服务器 也能缓存 TLD服务器的IP 地址,于是容许本地DNS绕过查询链路中的根DNS服务器。