前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应用层体系结构与协议

应用层体系结构与协议

作者头像
搬砖俱乐部
发布2019-06-15 18:06:11
9040
发布2019-06-15 18:06:11
举报
文章被收录于专栏:BanzClubBanzClubBanzClub

应用层是开放系统的最高层,是直接为应用进程提供服务的,作用是在实现多个系统应用进程互相通信的同时,完成一系列业务处理所需的服务。我们平时使用的应用程序就在这一层,比如,浏览器、微信、爱奇艺、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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BanzClub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档