计算机网络(2)——应用层

1.应用层概述

应用层(Application Layer)属于计算机网络体系结构中的最顶层,直接面向用户,提供各种网络服务和应用程序的接口

本文主要的学习内容如下:
(1)网络应用进程通信方式

  • 客户端-服务器方式
  • 点对点方式
  • 混合方式

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

  • 可靠性
  • 带宽
  • 延迟

(3)各种网络应用及协议

  • Web应用 -> HTTP
  • Email应用 -> SMTP、POP
  • P2P应用

(4)Socket编程

  • TCP
  • UDP

2.网络应用进程通信方式

进程:主机上运行的程序
在这里插入图片描述

Question1:同一主机上运行的进程之间如何通信?
Answer:同一主机上运行的程序通过操作系统提供的进程间通信机制进行通信,这里不展开介绍

Question2:不同主机上运行的进程之间如何通信?
Answer:消息(数据)交换。主要有电路交换报文交换分组交换

Question3:如何定位不同主机上运行的进程?
Answer:不同主机的不同进程都拥有唯一的标识符进程的标识符 = IP地址 + 端口号在这里插入图片描述

注意1:网络应用通信需要遵守应用层协议协议主要定义了以下规范

  • 消息的类型(type):请求消息、响应消息
  • 消息的语法格式(syntax):消息中有哪些字段,每个字段如何描述/采取什么结构
  • 字段的语义(semantics):字段中信息的含义
  • 规则(rules):应用何时发送/接收消息,应用如何发送/接收消息

下面是网络应用中的主要通信方式

2.1 客户端-服务器方式(Client-Sever,CS)

服务器:接受请求返回响应的终端

  • 7*24(007)小时提供服务
  • IP地址/域名长期固定
  • 利用大量服务器实现可扩展性

客户端:发起请求接收响应的终端

  • 与服务器通信,使用服务器提供的服务
  • 间歇性接入网络(不是一直在线)
  • IP地址不固定(IP地址动态分配,网络层在详细介绍)
  • 不会与其他客户端直接通信
    在这里插入图片描述

2.2 点对点方式(Peer-to-Peer,P2P)

  • P2P结构中的每个节点都可以充当客户端或服务器的角色
  • 任意节点之间可以直接通讯
  • 节点间歇性接入网络
  • 节点IP地址不固定
    在这里插入图片描述

2.3 混合方式

Question:能不能结合以上两种方式的优点,规避缺点,设计一种新的通信方式/模型?

以Napster为例:Napster 在文件传输文件搜索方面采用了混合架构,结合了P2P客户端-服务器两种结构。这种混合架构在当时是一个创新设计,既利用了P2P的优势,又通过中央服务器提高了效率和可控性

(1)客户端-服务器(CS)结构用于文件搜索:

  • 中央服务器:Napster 使用一个中央服务器来维护一个所有共享文件的索引目录。当用户想要查找某个文件时,他们会向中央服务器发送搜索请求

(2)对等网络(P2P)结构用于文件传输:

  • 直接连接:一旦用户选择了要下载的文件,Napster 会直接连接文件所有者的计算机,建立点对点连接
  • 文件传输:文件直接从文件所有者的计算机传输到请求者的计算机,而不经过中央服务器。这种方式大大提高了传输效率,并减轻了中央服务器的负担
    在这里插入图片描述

3.Web应用

3.1 Web应用结构与协议

Web应用使用客户端-服务器通信方式,客户端与服务器之间使用HTTP/HTTPS协议进行通信在这里插入图片描述
服务器:接受并处理HTTP请求,返回HTTP响应。主要包括:

  • Web页面(HTML文档):包含多种对象和链接‘
  • Web对象(静态/动态对象):可以是HTML文档、图像文件、视频文件、音频文件等
  • URL(统一资源定位符):对象之间的寻址依靠URL

客户端:发送请求,接受并解析响应在这里插入图片描述
在这里插入图片描述

3.2 HTTP协议

Java EE(17)——网络原理——应用层HTTP协议

3.3 HTTPS协议

Java EE(18)——网络原理——应用层HTTPS协议

3.4 Web缓存技术

目的:在不访问服务器的情况下满足客户端的HTTP/HTTPS请求
意义:

  • 缩短客户端的响应时间
  • 减少服务器的并发量

在客户端-服务器中间架设代理服务器用来保存缓存在这里插入图片描述

  • 当clientA发起HTTP请求某资源时,该HTTP会先到达代理服务器,代理服务器优先在自己的数据库中查找。如果有相应资源,直接返回给clientA;如果没有,则向原始服务器发送HTTP请求,原始服务器返回响应后,代理服务器先缓存该资源,再返回给clientA
  • 当clientB再次请求相同资源时,HTTP请求将不会到达原始服务器,而是由代理服务器返回资源,一定程度上减轻了服务器的压力
    Question1:如果当clientB发送请求时,该资源已经经历了一次版本更新,如何保证获取到最新版资源?
    Answer1:当代理服务器收到HTTP请求时,代理服务器会一个HTTP请求检测该资源的版本是否和原始服务器中的一致。如果版本一致,原始服务器会返回304 Not Modified,告诉代理服务器版本一致;如果版本不一致,原始服务器会返回最新版资源,代理服务器缓存后再返回给clientB
    Question2:既然每次代理服务器收到请求之后都会跟原始服务器检测版本,会不会加重服务器负担?
    Answer2:当版本一致时,原始服务器只会返回304 Not Modified,并不携带额外资源,相较于客户端直接访问服务器的负担会小很多

4.Email应用

4.1 Email应用的构成

Email应用的构成

  • 邮件客户端(user agent):撰写、发送、接收和管理电子邮件的应用程序
  • 邮件服务器:处理电子邮件的传输和存储的计算机,负责在用户之间传递邮件,并储存用户的邮件数据
  • SMTP协议(Simple Mail Transfer):定义了邮件在互联网上传输的标准

4.2 Email应用示例

在这里插入图片描述
A想发送一封邮件给B,该邮件会先传输到A对应的服务器③,再传输给B对应的服务器⑤,等到B上线的时候再接收邮件

Question:为什么邮件不能直接发送到B?
Answer:因为B不一定在线。想直接发送到B的前提是A和B要建立连接,但如果B不在线就无法建立连接,所以无法直接发送到B。但是B对应的服务器⑤一定在线,服务器⑤会保存该邮件等到B来接收

4.3 SMTP协议

概述:

  • SMTP协议:简单邮件传输协议
  • 使用C/S结构工作在TCP的25号端口
  • 持久连接

交互过程:

  • 三次握手建立连接(传输层再详细介绍)
  • 身份认证
  • 邮件传输
  • 断开连接

在这里插入图片描述
命令/响应交互模式

  • 命令(command):ASCII文本
  • 响应(response):状态代码和语句

协议格式:
在这里插入图片描述
头部(header):包含邮件的元信息,如发件人、收件人、主题等。常见头部字段如下:

  • From:发件人邮箱
  • To:收件人邮箱
  • Subject:邮件主题
  • Date:发送日期
  • Contect-Type:正文类型(body中的格式)

空行:用于分割头部和body
正文(body):邮件的实际内容

注意:根据RFC5321规定,传统的SMTP协议使用7为ASCII字符集进行通信,这意味着所有的SMTP命令、响应和header都必须是ASCII字符。因为SMTP协议必须使用ASCII字符集,直接传输非ASCII数据(如二进制文件)时会出问题,为了解决这个问题。引入了MIME(多用途互联网邮件扩展),允许在电子邮件中使用非ASCII数据在这里插入图片描述

4.4 POP3

客户端向服务器发送电子邮件的时候使用SMTP协议,但客户端读取服务器中的邮件时使用邮件访问协议(Post Office Protocol),本文介绍POP3协议在这里插入图片描述

概述:

  • POP3:邮局协议版本3(Post Office Protocol-Version 3)
  • 作用是将存储在邮件服务器上的电子邮件离线下载到本地
  • 使用C/S结构工作在TCP的110号端口

交互流程:
在这里插入图片描述
Question:为什么上面获取某一封邮件后,要删除该邮件呢?
Answer:这和POP3协议的访问模式有关

访问模式:
(1)下载并删除模式:客户端下载邮件后删除该邮件

  • 优点:节省空间
  • 缺点:如果用户换了客户端,就无法重读该邮件

(2)下载并保持模式:客户端下载邮件不删除该邮件

  • 优点:不同的客户端都可以保留邮件的拷贝
  • 缺点:占用大量空间

5.P2P应用

5.1 文件分发耗时分析

Question:从一个服务器向N个节点分发一个文件需要多长时间?
在这里插入图片描述

客户端-服务器结构

  • 服务器向网络核心中串行地发送N个文件,所需时间:N×F/us
  • 节点i下载,所需时间:F/min(di)
    该结构所需时间dcs =
    max{N×F/us,F/min(di)}

P2P结构

  • 服务器必须向网络核心中发送一个副本,所需时间:F/us
  • 节点i下载,所需时间:F/min(di)
  • 总下载量:NF,总上传速率: U s + ∑ u i Us+\sum_{}^{} u_i Us+ui
    该结构所需时间dP2P = max{F/us,F/min(di), N ∗ F / ( U s + ∑ u i ) N*F/(Us+\sum_{}^{} u_i) NF/(Us+ui)}

客户端-服务器结构 VS P2P结构
在这里插入图片描述
随着节点数量的不断增加,C/S结构完成文件转发所需的时间线性增长,P2P结构完成文件转发所需的时间趋于不变

5.2 P2P文件分发协议:BitTorrent

概述:
BitTorrent是最广泛使用的P2P文件分发协议之一。它通过将文件分割成小块(pieces),并允许多个用户同时下载和上传这些小块,从而实现高效的文件分发
工作原理:

  • 种子文件(.torrent): 包含有关要下载的文件的信息,如文件大小、名称、tracker服务器的地址等
  • Tracker服务器: 跟踪参与下载的peer,并帮助peer之间建立连接。
  • peer:BitTorrent网络中任何一个正在下载或上传文件的节点
  • chunk:在BitTorrent协议中,文件被分割成多个较小的部分,每个部分称为一个chunk
    在这里插入图片描述

场景假设:现在有一个peer(Alice)加入该torrent组,一开始Alice没有任何chunk,随着时间的推移会逐渐积累。Alice会向tracker注册并获取节点清单,与某些节点建立连接以获取目标chunk(稀缺优先),在获取chunk的同时Alice也会向其他peer发送chunk(tit-for-tat)在这里插入图片描述
Question:上述提到的稀缺优先tit-for-tat是什么?
在这里插入图片描述

5.3 索引

P2P结构中的索引:信息到节点位置(IP地址+端口号)的映射

应用场景:
(1)文件共享

  • 利用索引动态跟踪节点所共享的文件的位置
  • 节点告诉索引它拥有哪些文件
  • 节点搜索索引,从而获知能够得到哪些文件

(2)即时消息(QQ)

  • 索引负责将用户名映射到位置
  • 当用户开启即时通讯(Instant Message)应用时,需要通知索引它的位置
  • 节点检索索引,确定用户的位置

5.3.1 集中式索引

在这里插入图片描述

  • 节点加入时,向中央目录服务器登记本节点的IP地址和拥有的资源
  • 节点在中央目录服务器中搜索索引,从而获知目标资源在哪个节点中
  • 节点之间直接建立连接来请求资源

缺点:

  1. 单点失效问题:中央服务器崩溃会导致整个网络无法搜索资源
    
  2. 性能问题:中央服务器需要处理所有请求,导致负载过高
    

5.3.2 分布式索引

  • 每个节点对它共享的文件进行索引,且只对它共享的文件进行索引
  • 所有节点构成分布式网络:任意两个节点间有TCP连接,则构成分布式网络的一条边
  • 节点通过洪泛式查询搜索资源
    在这里插入图片描述

缺点:

  1. 网络拥塞:在大规模网络中,大量的查询请求会导致网络拥塞
    
  2. 资源消耗:每个节点都需要处理大量的查询请求
    
  3. 重复查询:同一个查询可不能会被多次处理,导致不必要资源浪费
    

5.3.2 混合式索引

介于集中式索引和分布式索引的方法

  • 整个网络中分为普通节点超级节点
  • 超级节点和其子节点(普通接待你)之间维持TCP连接,超级节点之间维持TCP连接
  • 超级节点负责跟踪子节点的内容
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/81846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 绘制折线图

用了一段时间的 Jetpack Compose ,感觉写 UI 的效率确实会提升不少 。 配合 AI 编程绘制了一个折线图。供大家学习参考! @Composable fun TemperatureChart() {val timeLabels = listOf("7:00", "8:00", "9:00", "10:00", "11:…

JavaScript- 1.3 DOM对页面内容进行操作

本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML和CSS系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看&#xff…

CSS-5.1 Transition 过渡

本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看! 点…

使用Google 最新发布的veo-3 视频生成和数字人技术制作介绍核聚变技术的短视频:《逐梦星海:中国聚变照亮未来》

文章大纲 结合谷歌最新模型说明示例分镜提示词(基于 Gemini 2.5)最终视频生成(基于 Veo3)解说词文稿应用场景参考文献先来看看效果: 视频中混入了一些字幕,看来Google的技术还有待提高哈,里面有的托卡马克好像挺像那么回事!厉害 逐梦星海:中国聚变照亮未来 #mermaid-sv…

服务器数据恢复—Linux系统服务器崩溃且重装系统的数据恢复案例

服务器数据恢复环境: linux操作系统服务器中有一组由4块SAS接口硬盘组建的raid5阵列。 服务器故障: 服务器工作过程中突然崩溃。管理员将服务器操作系统进行了重装。 用户方需要恢复服务器中的数据库、办公文档、代码文件等。 服务器数据恢复过程&#…

结构型:门面模式(外观模式)

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 1、核心思想 目的:通过高层接口(门面类)封装多个子系统的复杂交互,客户端只需与门面交互,简化入口;同时隔离客…

MidJourney生成王昭君全身像提示词

汉服王昭君全身像,中国水墨融合工笔画风格,低饱和度暖色调,绢本设质感: 服饰细节:身着朱红色曲裾深衣,衣摆拖地三层,金线刺绣凤凰祥云暗纹,宽袖缀珍珠滚边,腰间白玉组佩…

GitHub 趋势日报 (2025年05月21日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1microsoft/WSLLinux的Windows子系统⭐ 1731⭐ 25184C2virattt/ai-hedge-fundA…

电子电气架构 --- 细化造车阶段流程

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

谈谈Oracle BUFFER CACHE的命中率

BUFFER CACHE的命中率已成为一个老生常谈的话题,在数据库等待事件出现之前,DBA进行数据库系统级优化时,往往会首先观察BUFFER CACHE的命中率。命中率高就意味着数据库运行正常,很多Oracle官方提供的巡检脚本都将BUFFER CACHE的命中…

云渲染技术解析与渲酷平台深度测评:如何实现高效3D创作?

一、云渲染技术核心原理 1.1 分布式计算架构 云渲染的本质是通过多节点并行计算实现效率突破。以动画渲染为例,一个30秒的动画通常包含720帧(按24帧/秒计算),传统单机需要连续处理所有帧,而云渲染可将任务拆解为720个…

JavaScript-DOM-02

自定义属性&#xff1a; ​ <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

Kind方式部署k8s单节点集群并创建nginx服务对外访问

资源要求 请准备好doker环境&#xff0c;尽量用比较新的版本。我的docker环境如下 docker 环境&#xff1a; Docker version 20.10.21, build 20.10.21-0ubuntu1~18.04.3 安装kind kind表现上就是一个二进制程序&#xff0c;下载对应版本并增加执行权限即可&#xff1a; cu…

MySQL备份恢复:数据安全的终极指南

引言 各位数据库爱好者们好&#xff01;今天我们要深入探讨MySQL数据库的"生命保险"——备份与恢复策略 &#x1f6e1;️。在数据即资产的时代&#xff0c;任何数据丢失都可能造成灾难性后果。本教程将带你全面掌握从逻辑备份到物理备份&#xff0c;从二进制日志恢复…

id分页遍历数据漏行问题

令入参id为0 while(true){ select * from table where id>#{id} order by id asc limit 100; 取结果集中最大id作为下次查询的入参 其他操作 } 这个算法一般没问题&#xff0c;但在主从数据系统中&#xff0c;主库写&#xff0c;查询从库遍历数据时&#xff0c;出现了…

OpenCV级联分类器

概念 OpenCV 级联分类器是一种基于 Haar 特征、AdaBoost 算法和级联结构的目标检测方法&#xff0c;通过多阶段筛选快速排除非目标区域&#xff0c;实现高效实时检测&#xff08;如人脸、行人等&#xff09;。 加载级联分类器 // 加载级联分类器CascadeClassifier cascade;// …

C++ inline 内联函数

一、定义与设计初衷 inline 函数是 C 中通过 减少函数调用开销 优化程序效率的机制。其核心设计初衷是 取代 C 语言中宏定义&#xff08;#define&#xff09;&#xff0c;同时解决宏的以下缺陷&#xff1a; 类型安全问题&#xff1a;宏仅进行文本替换&#xff0c;无法进行参数…

uniapp-商城-64-后台 商品列表(商品修改---页面跳转,深浅copy应用,递归调用等)

完成了商品的添加和展示&#xff0c;下面的文字将继续进行商品页面的处理&#xff0c;主要为商品信息的修改的页面以及后天逻辑的处理。 本文主要介绍了商品信息修改页面的实现过程。首先&#xff0c;页面布局包括编辑和删除功能&#xff0c;未来还可添加上架和下架按钮。通过c…

digitalworld.local: VENGEANCE靶场

1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.3 3&#xff0c;对靶机进行端口服务探测 nmap -sV -T4 -p- -A 192.168.23.3 端口号 协…

微店平台店铺商品接口开发指南

微店API获取店铺所有商品实现方案 以下是使用微店开放平台API获取店铺所有商品的完整实现代码&#xff0c;包含请求封装、分页处理和错误处理机制。 点击获取key和secret from weidian_api import WeidianAPI # 配置你的微店应用凭证 APP_KEY "your_app_key" APP_…