计算机网络-2-应用层

本周进入到第二章应用层的学习,不得不说自顶向下学习果然能激发兴趣,因为平时开发工作经常也就是和应用层打交道,但是对具体原理总是一知半解,随着这章的阅读,能让自己对我们开发的应用程序,是怎样利用网络实现其功能的,有了更深入的了解。

我们日常中所用到的,开发的软件基本都是基于应用层的软件。不需要关心数据包到底是如何传输的,只需要按照应用层对接下一层的协议接口进行开发就可以了。

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

在操作系统中,程序之间的通信是通过进行来进行的,而不是程序。一个进程可以被认为是一个端系统中的一个程序,当进程运行在同一个端系统上时,它们使用进程间通信机制进行通信。进程间的通信规则有端系统山的操作系统决定。

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

进程寻址

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

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

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

因特网提供的运输层的协议不止一种,我们最常见的当属 TCP、UDP 了,具体使用需要从以下几个方面进行衡量:

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

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

应用层协议

说到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服务器。

学习了上面几种应用层协议,接下来我们了解下P2P协议。

P2P

说到P2P我们常见的就是文件分发了,它和客户端-服务器模式不同,采用了一种对等方的概念。

举例来说,平时我们用的种子下载,传统下载我们是从本地客户端和资源服务器建立连接,从服务器下载,下载速度受限于服务器的上载速率以及本地客户端网络的下载速率。 而P2P下载则是所有下载方都是可以一边下载,一边将自己已经下载的资源利用上载带宽上传供其他下载者下载,从而提高效率。

常见的应用有如:BitTorrent等。


   转载规则


《计算机网络-2-应用层》 coderluo 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
计算机网络-3-传输层 计算机网络-3-传输层
这周来到,《自算计网络自顶向下》 这本书的第三章,传输层的学习。 运输层和网络层的关系 在协议栈中,我们都知道运输层位于网络层之上。网络层提供了主机之间的通信,而运输层为位于主机上的不同进程之间提供了逻辑通信。 多路复用与多路分解首先
下一篇 
计算机网络-1-计算机网络和因特网 计算机网络-1-计算机网络和因特网
最近参加了码农翻身的读书活动,目标是读完《计算机网络 自顶向下方法》 这本书,这篇文章将记录第一周所看到的本地第一章的相关内容。 学习计算机网络首先学习下什么是因特网?描述这个问题需要从两个方面论述。 具体构成描述 因特网是一个世界范
  目录