# 应用层

应用层是 OSI 参考模型、TCP/IP 模型的最高层。应用层确定进程之间通信的性质,以满足用户的需要以及提供网络和用户软件之间的接口服务。例如:电子邮件,网络管理程序。

相关协议:

  1. 虚拟终端协议 Telnet,用于实现互联网中远程登陆功能。
  2. 文件传输协议 FTP,用于实现互联网中交互式文件传输功能。
  3. 简单邮件协议 SMTP,用于实现互联网中电子邮件传送功能。
  4. 域名服务 DNS,用于实现网络设备名字到 IP 地址映射的网络服务。
  5. 路由信息协议 RIP,用于网络设备之间交换路由信息。
  6. 网络文件系统 NFS,用于网络中不同主机间的文件共享。
  7. 超文本传输协议 HTTP,用于 WWW 服务。

后续

因为应用层里有比较重点的协议,例如: HTTP、HTTPS、DNS,重要的协议都会单独写一篇文章,请期待。

# 理解

思考: 基于以下几层的功能,其实计算机与计算机之间已经可以发送文本了,还可以选择速度快或可靠性高的传输方式。计算机互相通信的目的已经达到,怎么还有应用层呢?这一层是干嘛用的?

问题 1: 假设有一台计算机 A,计算机 A 上面有两个学习资料,分别为 X 文件、Y 文件。你怎么告诉计算机 A 传输 X 文件还是 Y 文件?之前我们只讲了 MAC 地址与 IP 地址,IP 地址可以让使你的计算机与 A 计算机通信,可没说可以携带 X、Y 的地址。例如:192.168.1.2/24/X、192.168.1.2/24/Y,可没有这样的。

回答 1: 传输一个文本,里面的内容就是索取文件的要求。例如:

我要 X 文件
1

这样 A 就知道了。

问题 2: 如果是这样的话,那在计算机 A 前就必须要一个活人驻守了。计算机怎么懂人类语言呢,你咋不用俄语、英语、日语说要 X 文件。如果是这样的话,那这么活人必须懂地球上所有语言。

回答 2: 那就用一个标识,记录要什么文件。例如:

address: X
1

计算机 A 自动解析第一行address的字段,自动返回对应的文件。

问题 3: 这样的确可以让计算机 A 知道要返回哪个文件了。但如果你要的 X 文件被计算机 A 删除了,或者你访问了一个不存在的 Z 文件。那计算机 A 怎么通知你呢?

回答 3: 如果不存在可以发送空内容来表示文件不存在。例如下面:


1

问题 4: 那如果 X 文件是存在的,但内容也是空。那怎么区 文件内容为空文件不存在 呢?

回答 4: 那么返回内容时,在第一行加一个标识,然后换行,换行之后的内容就是这个文本内容。假设文件存在,则标识就是 1,不存在就是 0。例如:

文件内容不为空的情况,假如 Y 文件:

exist:1

除了细菌、病毒,还有一种可怕的“病毒”。它不携带 RNA、DNA,只是一蛋白质,它就是阮病毒。疯牛病、羊瘙痒症、库鲁病等的幕后黑手正是阮病毒。
1
2
3

文件内容为空的情况:

exist:1

1
2

文件不存在的情况:

exist:0

1
2

这样就能区分了。

疑问: 这样我们确实能选择想要的文件了,是空文本还是不存在的问题也解决了。但是你想想上面的行为不就是在制定一系列规则吗?你基于传输层的特性,有制定了新的规则,这套规则属于传输层之上。那又叫什么呢?

总结: 在传输层时,计算机虽然可以进行通信,但通信只是过程,我们是有目的。如果是普通的文本传输,似乎传输层就可以胜任了。但遇到 远程登陆文件传输电子邮件传送域名与 IP 地址映射路由信息交换 等等功能,我们就需要制定一些规则了。这就是应用层,有目的去应用下层协议带来的通信功能。