计算机网络基础系列(三)网络应用(上)

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 计算机网络基础系列(三)网络应用(上)

Internet的整个体系结构,符合TCP/IP协议栈,应用层在协议栈的最上层。

  本节主要知识点为:

  1. 网络应用的体系结构:网络应用有哪几种体系结构?(客户机/服务器、P2P、混合结构)和单机应用有哪些不一样的地方?
  2. 网络应用对底层,传输层、网络层、链路层以及物理层构成的网络基础设施有哪些服务方面的需求?(可靠性、带宽、时延等方面)。
  3. Internet传输层服务模型提供了什么样的传输服务模型?(TCP/UDP)。
  4. 具体地介绍几个网络应用及协议(HTTPSMTPPOPIMAPDNSP2P)。
  5. 如何来开发网络应用?(Socket编程、TCPUDP)。

网络应用的基本原理

网络应用体系结构

  • 网络应用和单机应用相比有哪些本质性区别?

  网络应用需要有网络的基础环境,有一部分软件跑在我们自己的计算机上,还有一部分软件和数据信息运行在互联网的某一个地方,这两部分软件又互相交互,才共同构成了一个网络应用。

  • 既然网络应用由不同的部分构成的,那它应该采取什么样的体系结构呢?

  网络应用经过这么多年的发展,基本形成以下三种体系结构:1. 客户机/服务器结构;2. 点对点结构;3. 混合结构

  • 客户机服务器结构:称之为客户机服务器的原因在于功能决策上的划分,服务器对外提供服务,客户机使用服务器所提供的服务。

  服务器:7*24小时提供服务;永久性访问地址/域名;利用大量服务器实现可扩展性。服务器往往要为成百上千万的客户机提供服务,并发用户数同时请求服务的可以达到几万,几十万,这往往需要大量的服务器,分布式的技术来实现。客户机:与服务器通信,使用服务器提供的服务;间歇性接入网络;可能使用动态ip地址;不会与其它客户机直接通信。

最直观的就是Web应用,服务器端使用Web软件,客户机使用浏览器。客户端向Web服务器发出请求,服务器将页面和对象封装成http响应发回客户端。

  • P2PP2P的特点是:没有永远在线的服务器;任意端系统/节点之间可以直接通讯;节点间歇性接入网络;节点可能改变IP地址。P2P这种结构平时接触最多的就是文件共享BT

   P2PWeb相比有哪些优点和缺点?P2P的最大的优点是高度可伸缩可扩展;缺点是难于实现和管理。

  • 混合结构:能否将P2PCS混合起来使用,使其能够结合两者的优点的同时规避两者的缺点?

  在Napster中文件的传输使用P2P结构,而文件的搜索采用C/S结构,集中式。每个节点向中央服务器登记自己的内容,每个节点向中央服务器提交查询请求,查找感兴趣的内容。

网络应用进程通信

  上一小节从宏观,体系结构上认识了网络应用。这一小节深入了解网络应用的构成。网络应用由不同的部分构成,有些运行在PC机上,有的运行在远端的服务器上。而两者显然需要正确的协作,才能够完成其功能,保证网络性能。这就需要本机的网络进程和服务器端的网络进程之间需要通信。这就是网络应用的核心,本质上是网络进程之间正确的通信,然后完成功能。

  进程为主机上运行的程序。同一主机上运行的进程之间如何进行通信?这一块由操作系统进程间的通信机制提供。不同主机上运行的进程如何通信?这个依靠的是消息交换,或者称之为报文交换。在消息交换或报文交换中我们有客户机进程(发起通信的进程)、服务器进程(等待通信请求的进程)。那么在P2P架构的应用中是否存在客户机进程和服务器进程之分?也是有的,P2P中也会有消息交换,所以也会有发起通信的进程和等待通信请求的进程。不同的进程之间的通信实际上是依靠的一个叫套接字的机制(Socket)。这是操作系统提供的一种抽象,他把网络的硬件基础设施和网络协议栈(链路层、网络层、传输层)抽象为Socket

  进程通过套接字来使用下层协议栈所提供的服务,比如TCP。这样进程间的通信就通过Socket发送/接收消息。将其类比于寄信Socket就像是门一样,发送方将消息送到门外的某个信箱里面去,然后依赖于(门外的)传输基础设施,将消息传到接收方所在主机,并送到接收方门外,接收方从门外获取消息。

  所以说传输基础设施是进程间通信所依赖的东西。它由网络协议栈构成,由操作系统提供,相当于是操作系统提供的网络编程API。如果我们要开发网络应用,我们就需要调用这些API,网络应用的开发也被称作Socket编程。Socket处理传输一些消息,还可以对底层网络协议进行一些选择和设置。

  网络应用之间依靠的是消息传输。那消息发出去之后,底层的传输基础设施如何正确无误的送到目标进程?这里就会有一个进程的标识问题,可以称为寻址

  寻址问题:不同主机上的进程通信,那么每个进程必须拥有标识符。因为其是不同主机上的,所以第一步是标识主机,标识主机就是依靠一个叫IP地址的东西。因为主机上会跑很多网络应用,所以只依靠IP地址是不够的,我们还需要端口号,我们为主机上每一个需要通信的进程分配一个端口号。有一些端口号是被约定的,不能够随便用,比如说80端口被HTTP Server占用,Mail Server占用25号端口。所以IP地址+端口号唯一标识网络上的进程

  • 应用层协议

  具体的消息交换的格式,什么样的顺序等等依靠的是应用层协议。网络应用都应该遵循应用层协议,但是并不是说网络应用只有应用层协议。比如说Web应用包括浏览器软件,包括服务器软件,还包括html文件等等,不止是一个http协议。但是这些软件是要符合http协议的。所以说网络应用需要符合应用层协议。

  应用层协议有公开的协议RFC(Request For Comments)定义,用公开的协议目的是为了互操作。如果需要知道某个协议的所有信息就需要去都RFC文档。

  除了公开的协议外还有些私有的协议,多数P2P文件共享应用考虑商业上的竞争就会采用私有协议。

  • 内容

  一个应用层协议会规定有几种消息,所以会规定消息的类型,比如有请求消息,有响应消息。他也会规定消息的语法(syntax)格式,比如消息当中有哪些字段(field),每个字段是如何描述的。下图是HTTP请求消息的格式:

  我们也可以规定字段的语意(semantics,字段中信息的含义),也会做出关于规则的描述,比如进程应该何时发送/响应消息?又比如进程应该如何发送/响应消息?等等这些规定。

网络应用的需求与传输层服务

  计算机网络应用依靠的是不同进程之间的消息交换,依靠的是遵循相同的应用层协议,然后正确进行消息交换,消息交换并不是应用层自己做的,按照TCP/IP的分层,它是由传输层、网络层、链路层等等共同来提供的传输的基础服务。

  所以这里就会引出两个问题:1. 网络应用有这么多种,不同的应用显然对于消息传输的需求不一样,这种不一样如何衡量?2. 底层传输层到底为应用层提供了什么样的服务

  • 网络应用对传输服务的需求
  1. 第一个方面是关于数据丢失(data loss)和可靠性(reliability)方面的需求。

  有一些网络应用是能够容忍一定的数据丢失,比如网络电话,又比如说在线看视频等等。但是有些网络应用要求100%可靠的数据传输,包括文件传输。

  1. 另外一个是关于时间方面的要求,有些应用只有在时延足够低的时候才有效,典型的就是网络电话/网络游戏。
  2. 第三个方面是关于带宽的要求,某些应用只有在带宽达到最低要求时才有效,比如网络视频,如果带宽比较低的话,就是卡的没法看。而某些应用能够适应任何带宽-弹性应用,像email
  • Internet提供的传输服务

  当我们知道了如何刻画网络应用的需求的时候,我们就可以来看internet提供了什么样的传输服务?Internet提供两类传输服务,TCP服务/UDP服务。

  • TCP服务

  TCP是一种面向连接的服务,也就是说客户机和服务器两者在进行消息交换之前要建立一个连接,这个连接一旦建立起来就是一个全双工的。TCP是提供可靠的数据传输,它可以把底层的不可靠转变为可靠,能够把数据不丢包、不乱序地传输。TCP还提供了流量控制功能,能够控制发送方不会发送速度过快,超过接收方的处理能力。TCP还提供了拥塞控制,当网络负载过重时,能够限制发送方的发送速度。但是TCP并不提供誓言方面的保障/不提供最小带宽保障

  • UDP服务

  UDP服务是无连接的,也不提供可靠的数据传输,也不提供可靠性保障、流量控制、拥塞控制、延迟保障、带宽保障统统都不保证。这种方式给了应用层极大的发挥空间,给力我们掌控数据传输的一种能力。

Web应用

  Web最基础的构成是网页,但是只有Web并不会有今天的互联网,另外一个重要的要素是网页之间的互相链接。网页(Web Page)包含多个对象(objects),对象HTML文件、JPEG图片、视频文件、动态脚本等。每个网页会有一个基本的HTML文件,在这个文件当中,会包含对其他对象引用的链接。有了这样一个机制,才有了今天的万维网。

  在计算机里面,每一个文件都会有一个唯一的路径来区分,互联网上的文件我们也需要对其进行区分,这里就会涉及到对象的寻址(addressing),也就是Web对象如何来寻址?如何来标识?依靠的是URL(Uniform Resoure Locator,统一资源定位器)。它有一个基本的格式:Scheme://host:port/path。协议+主机+端口号+路径。这样就能够使得所有的资源都有了唯一的标识符。

HTTP协议

  Web应用所遵循的协议就是http协议,也叫超文本传输协议(hypertext transfer protocol)。这个协议采用的是客户机服务器架构。客户是浏览器,主要是请求Web对象接收Web对象解析Web对象展示Web对象。另外一端就是服务器,也叫Web Server,能够响应客户的请求,生成响应消息,然后把对象发给客户。

  最典型的Web服务器软件就是Apache软件。Http协议也有不同的版本。Http协议所使用的传输层协议是TCP传输协议。

  使用TCP传输服务的流程如下

  1. 服务器在80端口等待客户的请求;
  2. 浏览器发起到服务器的TCP连接(创建套接字Socket);
  3. 服务器接受来自浏览器的TCP连接;
  4. 浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP消息;
  5. 关闭TCP连接;

这里要注意:HTTP协议是一个无状态协议,服务器不维护任何有关客户端过去所发请求的消息。大体上都是使用无状态的协议,有状态的协议往往更复杂,需要维护状态(历史信息);如果客户或服务器失效,会产生状态的不一致,解决这种不一致代价高。

HTTP连接

  Web应用依靠Http协议,Http协议又依赖传输层的TCP协议。在TCP的使用上是有两种不同的使用方法的,我们将其称为不同的HTTP连接类型。1. 非持久性连接(Nonpersistent HTTP):每个TCP连接最多允许传输一个对象。HTTP早起版本使用的方法。2. 持久性连接(Persistent HTTP):每个TCP连接允许传输多个对象。

  他们之间的区别是什么?二者的工作方式如下图所示:

  如果网速比较慢的时候,就会出现先有了网页,然后再加载图片的过程。如果想要对其时间性能进行分析,建立一个简单的时间响应模型来衡量其性能,我们可以对其进行响应时间分析与建模

  开始分析之前先定义一个词,RTT(Round Trip Time):从客户端发送一个很小的数据包到服务器并返回所经历的时间。那从浏览器开始,一直到最后得到文件,响应时间可以分解为:1. 发起、建立TCP连接:1RTT;2. 发送HTTP请求消息到HTTP响应消息的前几个字节到达:1RTT;3. 响应消息中所含的文件/对象传输时间;所以获得一个对象的时间是两倍的RTT+文件发送时间

  上述这种非持久性连接的问题:1. 每个对象需要两个RTT;2. 操作系统需要为每个TCP连接开销资源(overhead),这对服务器来说是一个很大的负担;3.浏览器会打开多个并行的TCP连接以获取网页所需对象,这个时候给服务器端会造成很大的负担。

  改进的办法就是将其改为持久性连接,思路就是发送响应后,服务器保持TCP连接的打开。细分的话又可以分为:1. 无流水(pipelining)的持久性连接:客户端只有收到前一个响应后才发送新的请求。每个被引用的对象耗时1RTT。2. 有流水机制的持久性连接HTTP1.1的默认选择,客户端只要遇到一个引用对象就尽快发出请求;理想情况下,收到所有的引用对象只需耗时约一个RTT

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
7天前
|
Kubernetes 安全 Devops
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
29 10
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
|
22天前
|
存储 监控 物联网
计算机网络的应用
计算机网络已深入现代生活的多个方面,包括通信与交流(电子邮件、即时通讯、社交媒体)、媒体与娱乐(在线媒体、在线游戏)、商务与经济(电子商务、远程办公)、教育与学习(在线教育平台)、物联网与智能家居、远程服务(远程医疗、智能交通系统)及数据存储与处理(云计算、数据共享与分析)。这些应用极大地方便了人们的生活,促进了社会的发展。
44 2
计算机网络的应用
|
14天前
|
存储 安全 网络安全
网络安全的盾与剑:漏洞防御与加密技术的实战应用
在数字化浪潮中,网络安全成为保护信息资产的重中之重。本文将深入探讨网络安全的两个关键领域——安全漏洞的防御策略和加密技术的应用,通过具体案例分析常见的安全威胁,并提供实用的防护措施。同时,我们将展示如何利用Python编程语言实现简单的加密算法,增强读者的安全意识和技术能力。文章旨在为非专业读者提供一扇了解网络安全复杂世界的窗口,以及为专业人士提供可立即投入使用的技术参考。
|
21天前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
45 8
|
19天前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
32 2
|
23天前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
42 5
|
22天前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习中的卷积神经网络(CNN)及其在现代应用中的革新
探索深度学习中的卷积神经网络(CNN)及其在现代应用中的革新
|
23天前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
79 1
|
25天前
|
监控 负载均衡 网络协议
OSPF在小型网络中的应用:简化配置与高效管理
OSPF在小型网络中的应用:简化配置与高效管理
84 1
|
21天前
|
机器学习/深度学习 人工智能 安全
探索人工智能在网络安全中的创新应用
探索人工智能在网络安全中的创新应用