计算机网络自顶向下方法——第二章应用层

一、应用层协议原理

        1.一些网络应用的例子       

  1. 电子邮件:电子邮件是目前网络中最常见的应用之一。用户可以使用SMTP(简单邮件传输协议)将电子邮件发送到一个或多个目标地址。服务器使用POP3(邮局协议版本3)或IMAP(互联网邮件访问协议)来接收和存储电子邮件消息。

  2. 文件传输协议(FTP):FTP协议被用于在两个计算机之间传输文件。FTP是一个标准的协议,允许用户上传或下载文件,并在互联网上浏览文件。

  3. 网络聊天和即时通讯:各种网络聊天和即时通讯应用已经成为网络中常见的交流工具,例如微信、QQ等互联网聊天应用等。

  4. 电话和视频聊天:通过网络进行电话和视频聊天是现代网络通讯的一种流行方式。Skype和Zoom是最著名的网络电话和视频通话软件之一。

  5. 网络游戏:网络游戏是一种允许玩家在虚拟环境中游戏的互联网应用程序,它们可以使用不同的协议设计来支持玩家之间的交互。

  6. 电子商务:电子商务是使用计算机网络进行购物、销售、支付和其他商业交易活动的过程。在互联网上,一些广泛使用的电子商务平台包括淘宝、亚马逊、京东等。

  7. RSS阅读器:RSS阅读器是一种利用XML协议更新网络新闻和博客文章的应用程序。通过这种方式,用户可以轻松地订阅所感兴趣的内容,并在网络上获得新闻和信息。

    2.网络应用的体系结构


可能有的应用架构:

  • 客户-服务器模式(C/S)
  • 对等模式(P2P)
  • 混合体:C/S和P2P体系架构

     2.1  C/S体系结构

客户端:

  • 主动与服务器通信
  • 与互联网有间歇性的连接
  • 可能是动态的IP地址
  • 不直接与其他客户端通信

服务器:

  • 一直运行
  • 固定的IP地址和周知的端口号
  • 扩展性差,在数据中心进行扩展

客户端-服务器(C/S)体系结构是一种计算机网络模型,具有分布式异步处理集中控制的特点。该模式由客户端、服务器和网络构成。

        客户端是位于用户端的计算机,主要用于向服务器发送请求和接收服务器返回的响应数据。客户端的功能通常是生成用户界面、处理用户输入、向服务器发送请求和接收响应,该过程一般由浏览器、终端和桌面应用等实现。

        服务器是位于服务端的计算机,用于处理客户端发送的请求,并向客户端提供响应数据。服务器的功能通常是接受客户端发送的请求、处理请求并提供响应、共享资源和提供数据存储等。

        在C/S模式中,客户端和服务器之间通过网络传输数据,而网络构成了客户端和服务器之间的关键部分,不同类型的客户端和服务器可以使用不同类型的网络协议进行通信。例如,Web浏览器和Web服务器通常使用HTTP协议通信,数据库服务器和客户端应用程序通常使用TCP/IP协议通信等。

        C/S模式的优点是:它可以通过将计算任务分解到客户端和服务器之间,同时使用高性能服务器和分布式计算来提高计算速度和响应时间。它还提供了更好的可扩展性和管理允许多个客户端同时连接到同一个服务器进行处理

        然而,C/S模式也存在一些缺点服务器必须始终处于开启状态,以便为客户端服务;服务器中的编程难度高,因为它需要考虑到多个客户端同时连接和交互的情况;而客户端的修改或者维护,需要在所有客户端上都进行更改,并且需要保证所有客户端的更改都相互兼容

总的来说,C/S模式已经成为了非常常用的计算机网络模式,应用广泛领域如web应用程序、电子邮件、文件传输、数据库系统等,它已成为体系结构模式的标准之一。

2.2 P2P体系结构


  •  几乎没有一直运行的服务器
  • 任意系统之间可以进行通信
  • 每一个节点既是客户端也是服务器(自拓展性)
  • 参与的主机间歇性连接且可以改变IP地址(难以管理)
  • 例如:迅雷

        对等网络(P2P)是一种分散且自治的网络体系结构,通常用于共享资源(如文件、存储空间、处理能力等)和计算任务。它通过在多个节点之间共享和分发工作负载来提高效率。在P2P网络中,每个节点都可以作为客户端和服务器扮演双重身份,这使得节点之间可以直接通信,而不必依赖中心化的网络服务器。

        P2P网络包含多个节点,每个节点都具有相同的能力和权利。每个节点都可以向其他节点发送请求并接收响应数据,它们还可以通过分布式算法协作解决问题。P2P中的节点可以是物理机器,也可以是虚拟机器。

        P2P体系结构与C/S体系结构最大的不同在于其分散性和自治性。P2P网络没有中央服务器来管理和控制,它由节点们共同管理和控制。节点之间通过直接通信来共享和分发资源,数据和任务,而不需要中心服务器的干预。

        P2P的优点是可以分摊掉集中计算或存储系统的负担,从而提高效率和抗故障能力;同时,P2P还具有良好的可扩展性,能够方便地扩展到更大的规模。同时,去中心化架构也可以提高安全性,不容易被黑客和恶意攻击进行攻击。P2P概念广泛应用于加密货币、文件共享等领域。

        然而,P2P也存在一些缺点,例如管理复杂性、节点发现和非法共享的问题。在节点选择的合理性不好的情况下,网络的稳定性和数据的正确性也有可能受到影响。

总之,P2P体系结构是一种具有分散性和自治性的计算网络模式,它能够实现更高效、更具可扩性的分布式计算和存储,并在某些情况下提高安全性,但也需要考虑节点管理,安全性问题等。

 2.3C/S和P2P体系结构的混合体

        混合式体系结构是C/S体系结构和P2P体系结构的结合,它具有集中式计算和分布式计算的特点。该结构结合了C/S体系结构的优势,同时又具备P2P体系结构的优势,以实现更好的性能和可靠性。

        混合式体系结构的基本思路是:将各个节点划分为两类,一个类型是服务器,另一个类型是客户端。通常,服务器节点通过集中管理和协调来处理重要的数据和任务,而客户端节点则通过P2P方式连接到服务器,以共享资源和协作处理任务。

        在这种体系结构中,服务器通常具有更高的运算能力和存储能力,它们处理重要的数据和任务,并具有更好的可靠性和安全性。而客户端则通过P2P网络连接到服务器,以共享内存和计算能力,并协作处理任务。这种方式可以显著提高系统的可扩展性和容错性,并减少对中心服务器的依赖。

        混合式体系结构通常用于大规模的分布式系统,例如对等存储网络。在这种网络中,服务器节点分布在多个不同的位置,例如数据中心、云服务器,客户端则连接到它们的附近节点,以快速访问数据和任务。

总的来说,混合式体系结构将C/S体系结构和P2P体系结构的各自优点集合起来,以增强系统的性能和可靠性。该结构在许多现代分布式应用程序中得到广泛应用,例如流媒体、云计算和对等存储网络。

混合式体系结构在即时通信NASPTER等领域得到了广泛应用。

        对于即时通信,混合式体系结构可以将传统的C/S模式和基于P2P的模式结合起来,提供更好的可扩展性和可用性。传统的即时通信应用利用中央服务器来处理消息传输和协调用户之间的通信,这些服务器将承载大量的用户和数据。然而,这种模型可能会导致网络拥塞和宕机的问题。而混合式模型使用P2P技术,将服务器负载限制为处理重要的控制消息,并利用客户端节点之间的点对点技术来直接传输数据和消息。这样可以降低对服务器的负荷,提高整个系统的可用性。

        对于NASPTER(P2P文件共享平台),混合式体系结构可以结合C/S体系结构和P2P体系结构的优势,提高文件传输速度、可靠性和安全性。通过使用传统的C/S模式和P2P技术结合,NASPTER将文件传输负载分布到多个节点上,并随时进行可靠和持续可用的文件分享。通过建立“到潮峰”的混合模型,NASPTER对不同类型的节点进行优化:高速度直连节点采用P2P技术进行深度扩展,而中间节点使用传统的客户端和服务器网络模式和管理网关,以保持高度的可用性和资源效率。

         3.进程通信


 进程是指正在运行的程序的实例,在同一个主机内,使用进程间的通信机制通信(由操作系统定义);不同主机,通过交换报文(message)来通信。

客户端服务器:发起通信的进程

服务器进程:等待连接的进程

注意:P2P架构的应用也有客户端进程和服务器进程之分


进程通信是指在不同进程之间传递数据或信息的机制。进程可以是操作系统中正在运行的任何程序,它们通常都有自己的地址空间和运行环境,因此需要进程间通信来实现数据共享、协作计算等功能。

常见的进程通信方式

        1.管道:管道是一种通过文件描述符在相关联进程间进行双向通信的方式。通常,一对管道分别连接着两个相关联进程,管道支持顺序读写,适用于单向的字节流通信。

        2.消息队列:消息队列是一种通过消息缓冲区进行异步通信的方式,支持使用标识符向指定的消息队列发送信息,接收者通过这个标识符获取相应的信息。

        3.共享内存:共享内存是一种高效的数据共享方式,进程可以将共享内存映射到自己的地址空间中,以实现直接的内存访问和数据传输。

        4.信号量:信号量是一种同步机制,多个进程可以通过信号量进行同步和互斥,防止竞争条件产生。

        5.套接字:套接字是一种网络通信的方式,在同一台计算机上的两个进程也可以使用套接字进行通信。套接字通信方式快速、方便,因此在进程间通信中被广泛使用。

进程间通信在操作系统、网络通信、数据库管理等方面扮演着重要角色。必须使用一些通用机制,例如管道、消息队列、共享内存、套接字、信号量等来实现不同的进程间通信模型。

   4.分布式进程通信需要解决的问题

4.1进程标识和寻址问题(服务用户)  

1.IP地址和端口号

在互联网中,每个计算机都有唯一的IP地址。在此基础上,每个进程都可以使用不同的端口号与其他进程通信。因此,可以将IP地址和端口号组合作为进程的唯一标识符,以使得不同计算机上的进程可以互相识别和寻址。

2.统一资源名称(URN)

URN是一种独特的、可持久的名称,用于标识某个资源。它可以用来标识分布式系统中的进程和资源。通过使用URN,可以将不同计算机上的进程进行唯一标识和寻址。

3.命名服务

使用命名服务可以将进程的标识符和寻址信息与一个包含其他信息的名称相绑定,使得用户可以使用人类可读的名称来标志这些进程。命名服务可以根据名称来查找进程所在的计算机和网络地址,并将请求转发到相应的进程。

 进程为了接收报文,必须有一个标识,即SAP(发送也需要)

  •  每个主句都有唯一得32位的IP地址,除开IP地址以外在一个端系统上还有很多应用进程,所以还需要端口号来进行标识。而传输的协议又有TCP与UDP两种。
  • 一个进程用IP+port(端口号)标示——端节点
  • 所以一对主机之间的通信由2个端节点构成

4.2传输层—应用层服务的提供(服务)

传输层和应用层通常使用一些协议提供服务。这些协议分为两种类型:传输层协议和应用层协议。

        1.传输层协议提供的服务

        传输层协议主要提供端到端的可靠或不可靠数据传输服务。常见的传输层协议包括TCP(传输控制协议)和UDP(用户数据报协议)。

        TCP提供面向连接的传输服务,保证传输数据的可靠性和有序性,以及在数据传输过程中进行错误检测和纠正。它使用了“三次握手”来建立连接,提供字节流传输,并基于序号和确认号实现可靠的传输。

        UDP是一种无连接的传输协议,不保证数据传输的可靠性和有序性。它只提供最基本的数据传输服务,不进行连接的建立和关闭

        传输层协议的服务是透明的,应用层并不需要知道传输层协议的工作细节。应用程序只需要调用传输层提供的接口,传输层就会负责将数据发送到目标地址,并提供错误检测和纠正等服务。

        2.应用层协议提供的服务

        应用层协议是在传输层之上提供服务的。应用层协议通常使用TCP或UDP协议来传输数据,并提供更高层次的服务。常见的应用层协议包括HTTP、FTP、SMTP、POP3、DNS等。

        HTTP(超文本传输协议)是Web文档传输协议,用于在Web浏览器和Web服务器之间传输HTML文档,支持Web页面的显示和互动。HTTP基于TCP协议,提供可靠的数据传输和错误检测服务。

        FTP(文件传输协议)是一种用于在互联网上传输文件的协议,支持在客户端和服务器之间进行文件的上传和下载。FTP可以使用TCP或UDP协议来传输数据。

        SMTP(简单邮件传输协议)是一种用于邮件传输的协议。它使用TCP协议将邮件从发送方传输到接收方,并提供一些功能,例如处理附件、管理邮件队列等。

总之,传输层和应用层通过不同的协议提供不同级别的服务。传输层协议提供基础的可靠或不可靠数据传输服务,应用层协议则提供更高层次的服务,例如Web服务、远程过程调用、电子邮件、文件传输等。这些协议提供了编程接口和API等服务,使开发人员可以轻松地构建分布式应用程序。

 传输层提供的服务——需要穿过层间的信息

        层间接口必须要携带的信息:

  • 要传输的报文(对本层来说:SDU)       
  •  谁传的:对方应用进程的标示:IP+port(TCP/UDP端口)
  • 传给谁: 对方应用进程的标示:对方的IP+port(TCP/UDP端口)

        传输层实体(TCP或者UDP实体)根据这些信息进行TCP报文段(UDP数据报)的封装

  • 源端口号,目标端口号,数据等
  • 将IP地址下交给IP实体,用于封装IP数据包:源IP,目标IP

传输层提供的服务——层间信息代表(socket)

  • 如果Socket API 每次传输报文都携带如此多的信息,太繁琐易错,不便于管理,所以用个代号表示通信的双方或单方——socket

TCP之上的socket:

  •  对于使用面向连接服务(TCP)的应用而言,套接字(socket)是4元组的一个具有本地意义的标识(本地意义即只对该进程本身来说)。
  • 4元组:源IP,源port,目标IP,目标Port
  • socket ——可以使用一个整数表示两个应用实体之间的通信关系的本地标识。所以说每一个socket标识都是标识的唯一的指定了一个对话(也就是两个应用进程的会话关系)
  • 应用进程使用socket的标示与远程的应用进行通信,这样就不必在每一个报文的发送都要指定这个4元组。

    

 

UDP之上的socket:

  • 对于使用无连接(UDP)的应用而言,套接字socket是2元组的具有本地意义的标示
  • 2元组:IP,port(源端指定——这个2元组是对方应用进程的)

UDP 套接字指定了应用所在的一个端节点,也就是目标端节点——end Point

在发送数据报时,采用创建好的本地套接字(标识ID)就不必在发送每一个报文中指明自己采用的IP和port,但是在发送报文时,必须要指定对方的IP和UDP Port(另外一个端节点)

 套接字(socket):

  • 进程向套接字发送报文

4.3如何使用传输层提供的服务实现报文交换,实现应用(用户使用服务)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写的什么石山代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值