应用层体系结构与协议

应用层是开放系统的最高层,是直接为应用进程提供服务的,作用是在实现多个系统应用进程互相通信的同时,完成一系列业务处理所需的服务。我们平时使用的应用程序就在这一层,比如,浏览器、微信、爱奇艺、QQ等。从应用程序研发者的角度看,网络系统结构都是固定的,都是为应用程序服务的。

应用程序一般分为两种:客户端/服务器结构;P2P(peer-to-peer)结构,也叫对等体系结构。

客户端/服务器结构就是我们熟悉的客户端,服务器模型。常见的一些Web应用、电子邮件、FTP都是这种结构的,一般需要服务提供者进行构建服务端应用,以响应客户端向服务端发送的请求。服务提供者需要始终被打开的,客户端可以总是打开的,也可以不是总被打开的。一般一个大型的Web应用的服务器端都是由一些强大的服务器集群构建,以满足成千上万的客户端程序访问。这也是客户端/服务器结构的特点,为了提供服务处理能力,需要更加强大的硬件和软件支撑服务。

P2P结构与客户端/服务器不同的是,不需要强大的服务端集群,因为在P2P结构里,每一个客户端既可以是服务请求者,也可以是服务提供者(为其他客户端提供服务)。这些主机(对等方)间,可以直接相互通信。所以这种通信结构也叫对等体系结构。我们使用过的BT下载,PPLive播放就是使用的P2P技术。P2P结构具有自扩展性,而且比客户端/服务器结构更加节省成本。

在计算机系统里应用程序就一个计算机的进程,所以端系统之间的通信就是两个端系统的进程的通信。形象一点的比喻就是在计算机网络的管道中,成对的进程之间的通信,这时需要引入一个新的概念Socket,它提供一种供应用程序访问通信协议的操作系统调用,使网络读写数据(或服务调用)向读写本地文件一样容易。Socket翻译成中文是套接字,套接一般是用于管道连接的部分,字就是传输的数据,其实本质是对TCP/IP协议网络通信的封装,位于应用程序与运输层之间的编程接口(API)。Java、python、php等语言都有socket标准库。

# 服务端 import socket address = ('127.0.0.1', 31500) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(address) while True: data, addr = s.recvfrom(2048) if not data: print("client has exist") break print("received:", data.decode(encoding='utf-8'), "from", addr) s.close()

# 客户端 import socket address = ('127.0.0.1', 31500) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: msg = input() if not msg: break s.sendto(msg.encode(encoding='utf-8'), address) s.close()

执行步骤:

1、先启动服务端

2、再启动客户端

3、客户端控制台输入:你好,python

4、服务端显示:received: 你好,python from ('127.0.0.1', 62130)

应用层协议只是网络应用的一部分,Web应用包括文档格式标准(HTML)、浏览器、服务器、应用层协议等;电子邮件包括用户邮件服务器程序、邮件阅读器、电子邮件报文格式标准和一些如何在服务器之间,服务器和阅读器之间传送报文的应用层协议。下面我们讨论一下几种重要的应用层协议:

域名服务与DNS协议:当我们用浏览器访问网页的时候,通常都是用网站域名加访问路径访问,虽然域名便于人们记住,但计算机只能认识IP地址,在Internet上域名与IP地址是一一对应的,他们之间的转化工作就是域名解析,DNS(Domail Name System)域名系统就是进行域名解析的系统。由此可见,DNS是一个庞大的系统,而且如果发生故障,整个互联网都将瘫痪。那么真实的DNS服务是什么样的呢?

第一步,本机的应用会发出一个DNS请求,例:www.baidu.com,会先检查自己本地的hosts文件是否有这个域名的映射,如果有,将映射返回给应用完成域名解析;

第二步,如果本地没有这个域名的映射,将查找本地DNS缓存,如果找到,返回映射IP,完成解析;

第三步,如果缓存中没有此映射,将查找设置的首选DNS服务器(一般在本地ISP的机房),也就是本地DNS服务器,本地DNS服务器上如果找到该域名的映射,则返回映射地址,完成解析。

第四步,如果本地DNS服务器没有找到,将向根域名服务器发起请求,全球有13台根域名服务器,根域名服务器不会直接返回解析,会根据域名后缀,返回一个负责解析这个域名的顶级域名服务器,本地DNS服务器收到后,将向.com顶级域名服务器发起请求解析域名;

第五步,顶级域名服务器如果解析不了,将会查找专门负责解析当前域名的区域域名服务器,这样本地域名服务器将得到域名的映射IP。返回给本机的应用,完成域名解析。

这样,当下次再发起www.baidu.com的DNS请求后,将从本地DNS缓存中直接拿到。

通过抓包看一次DNS请求响应的报文内容:

文件传输协议FTP(File Transfer Protocol)是互联网上使用的最广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件的类型和格式,并允许文件具有存取权限,FTP屏蔽了各种计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。FTP是基于TCP协议实现的。

简单文件传输协议TFTP(Trivial File Transfer Protocol),是一个很小且易于实现的文件传输协议,TFTP只支持文件传输不支持交互,基于UDP实现,所以TFTP需要有措施保障数据的丢失情况。

WEB应用与HTTP协议:见下篇。

P2P技术原理与应用:我们知道在对等体系结构中,每个节点既可以从其他节点得到服务,也可以向其他节点提供服务。这样,庞大的终端资源被利用起来,从而,由庞大的终端系统和服务器形成了一个整体的P2P网络结构。一般有3种流行的组织结构:DHT结构、树形结构、网状结构。

网状结构,所有节点都是无规则的连在一起,没有稳定的关系,为P2P网络提供了最大的容忍性。常见的应用,如:BT(BitTorrent),就是依赖P2P方式将文件在互联网用户之间共享和传输,在BT节点共享一个文件时,将文件分片并将文件和分片信息保存在一个流(Torrent)类型文件中,这种文件就是“种子”。其他用户下载时,根据Torrent文件的信息,将文件的部分分片下载下来,然后在其他下载该文件的节点之间共享自己已经下载的分片,从而实现文件的快速分发。从整体上看,下载的用户数越多,文件下载的速度就越快。

P2P应用还包括流媒体直播点播应用,IP层语音通信应用(Skype),网络游戏对战平台等。


1、《计算机网络 自顶向下方法》

2、《计算机网络 第七版》

3、《P2P技术原理与应用》 金海

4、http://www.52im.net/thread-50-1-1.html

5、https://blog.csdn.net/qq_33850438/article/details/79700133

原文发布于微信公众号 - BanzClub(banz-club)

原文发表时间:2019-02-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券