计算机网络基础 - 应用层(3)

计算机网络基础

  • 应用层
    • P2P 应用
      • P2P 体系结构的扩展性
      • BitTorrent 协议
        • torrenl 洪流
        • BitTorrent 运行的过程
      • P2P文件共享应用
        • 非结构化 P2P
        • DHT 结构化 P2P(了解)
    • 视频流和内容分发网
      • 视频流化服务
      • HTTP 流和 DASH
      • 内容分发网 CDN
        • 面临挑战
        • CDN 概述
        • CDN 操作过程
        • 集群选择策略
    • 套接字编程
      • Socket 编程
      • UDP 套接字编程
      • TCP 套接字编程


大家好呀!我是小笙,本章我主要分享计算机网络基础 - 应用层(3)学习总结,希望内容对你有所帮助!!

应用层

P2P 应用

  • 没有(或极少)一直运行的服务器
  • 任意端系统都可以直接通信
  • Peer 节点间歇上网,每次 ip 地址都有可能变化

例子

  • 文件分发 (BitTorrent)
  • 流媒体 (KanKan)
  • VoIP (Skype)

P2P 体系结构的扩展性

分发时间是所有对等方得到该文件的副本所需要的时间

如图所示,对于客户一服务器体系结构,随着对等方数量的增加,分发时间呈线性增长并且没有界。然而,对于P2P体系结构,最小分发时间不仅总是小于客户 - 服务器体系结构的分发时间,并且对于任意的对等方数量N,总是小于1小时(计算)

因此,具有P2P体系结构的应用程序能够是自扩展的。这种扩展性的直接成因是:对等方除了是比特的消费者外还是它们的重新分发者

BitTorrent 协议

BitTorrent是一种用于文件分发的流行P2P协议【Chao 2011】

torrenl 洪流

参与一个特定文件分发的所有对等方的集合

  • 在一个洪流中的对等方彼此下载等长度的文件块 (chunk) ,典型的块长度为 256KB
  • 当一个对等方首次加入一个洪流时,它没有块随着时间的流逝,它累积了越来越多的块 当它下载块时,也为其他对等方上载了多个块。一旦某对等方获得了整个文件,它也许(自私地)离开洪流,或(大公无私地)留在该洪流中并继续向其他对等方上载块
  • 任何对等方可能在任何时候仅具有块的子集就离开该洪流,并在以后重新加入该洪流中
BitTorrent 运行的过程

概述

每个洪流具有一个基础设施节点,称为追踪器( tracker)

当一个对等方加入某洪流时,它向追踪器注册自己,并周期性地通知追踪器它仍在该洪流中,假设当一个新的对等方 Alice 加入该洪流时,追踪器随机地从参与对等方的集合中选择对等方的一个子集 ,并将这些对等方的 ip 地址发送给 Alice

image-20240830191634898

具体过程

  • 在任何给定的时间,每个对等方将具有来自该文件的块的子集,并且不同的对等方具有不同的子集(文件被分成 256KB 的块,每个对等放会用 bitmap 来记录每个块的状态,并相互询问每个邻近对等方它们所具有的块列表)
  • 将使用最稀缺优先技术(最稀缺的块就是那些在她的邻居中副本数量中最少的块)来优先请求哪些块,这样,最稀缺块得到更为迅速的重新分发,其目标是(大致地)均衡每个块在洪流中的副本数量
  • 为了决定她响应哪个请求, BitTorrent 使用了一种机灵的对换算法。根据当前能够以最高速率向她提供数据的邻居,确定以最高速率流人的 4 个邻居并给出其主优先权
  • 每过 10秒将重新确认该 4 个邻居(这 4 个对等方被称为疏通),重要的是,每过 30 秒,她也要随机地选择另外一个邻居并向其发送块,如果发现该块最高速率优于之前选择的 4 个邻居,将会在下个周期替代 4 个邻居中速率最低得那一个(除这 5 个之外,其他块都必须进入到阻塞的状态)

P2P文件共享应用

存在的问题

  • 如何定位所需资源
  • 如何处理对等方的加入与离开
非结构化 P2P
  • 集中化目录
  • 完全分布式
  • 混合体

集中化目录

最初的 Napster 设计,当对等方连接时,它告知中心服务器: ip 地址、 内容

存在的问题:文件传输是分散的,而定位内容则是高度集中的

  • 单点故障
  • 性能瓶颈
  • 侵犯版权

查询洪泛:Gnutella

  • 全分布式,没有中心服务器
  • 限制范围的洪泛查询(通常所连接的节点少于10个)
  • 开放文件共享协议
  • 许多 Gnutella 客户端实现了Gnutella协议(类似HTTP有许多的浏览器)

利用不匀称性:KaZaA

  • 每个对等方要么是一个组长,要么隶属于一个组长
  • 组长跟踪其所有的孩子的内容
  • 组长与其他组长联系(转发查询到其他组长、获得其他组长的数据拷贝)

image-20240902215526896

查询过程

  • 客户端向其组长发送关键字匹配描述的方式查询(每个文件有一个散列标识码和一个描述符)
  • 组长用匹配进行响应,对每个匹配:元数据、散列标识码和 ip 地址
  • 如果组长将查询转发给其他组长,其他组长也以匹配进行响应
  • 客户端选择要下载的文件,向拥有文件的对等方发送一个带散列标识码的 HTTP 请求
DHT 结构化 P2P(了解)

树形、环形等


视频流和内容分发网

视频流化服务

视频是一系列的图像,通常以 种恒定的速率(如每秒 24、30 张图像)来展现;一幅未压缩、数字编码的图像由像素阵列组成(其中每个像素是由一些 比特编码来表示亮度和颜色)

  • 视频流量:占据着互联网大部分的带宽(例如:Netflix, YouTube: 占据37%, 16% 的ISP下行流量)

  • 到目前为止,对流式视频的最为重要的性能度量是平均端到端吞吐量

  • 不同用户拥有不同的能力(例如:有线接入和移动用户;带宽丰富和受限用户)

解决方案:分布式的,应用层面的基础设施

HTTP 流和 DASH

  • 在HTTP 流中 ,视频只是存储在 HTTP 服务器中作为一个普通的文件、每个文件有一个特定的 URL (尽管 HTTP 流在实践中已经得到广泛部署,,但它具有严重缺陷,即所有客户接收到相同编码的视频)
  • 出现了一种新型基于 HTTP 的流的研发,它常常被称为经 HTTP 的动态适应性流 DASH
  • 在 DASH 中,视频编码为几个不同的版本,其中每个版本具有不同的比特率,对应于不同的质量水平

服务器

  • 将视频文件分割成多个块
  • 每个块独立存储,编码于不同码率(8-10种)
  • 告示文件: 提供不同块的URL

客户端

  • 先获取告示文件
  • 周期性地测量服务器到客户端的带宽
  • 查询告示文件,在一个时刻请求一个块,HTTP头部指定字节范围
    • 如果带宽足够,选择最大码率的视频块
    • 会话中的不同时刻,可以切换请求不同的编码块 (取决于当时的可用带宽)

内容分发网 CDN

面临挑战

服务器如何通过网络向上百万用户同时流化视频内容?

  • 建立单一的大规模数据中心,在数据中心中存储其所有视频,并直接从该数据中心向世界范围的客户传输流式视频

    • 服务器到客户端路径上跳数较多,瓶颈链路的带宽小导致停顿
    • “二八规律”决定了网络同时充斥着同一个视频的多个拷贝,效率低(付费高、带宽浪费、效果差)
    • 单点故障点,性能瓶颈

    评述:相当简单,但是这个方法不可扩展

  • 通过CDN,全网部署缓存节点,存储服务内容,就近为用户提供服务,提高用户体验

    • 将CDN服务器深入到许多接入网(更接近用户,数量多,离用户近,管理困难)
    • 部署在少数(10个左右)关键位置,如将服务器簇安装于 POP 附近
CDN 概述

CDN 管理分布在多个地理位置上的服务器,在它的服务器中存储视频(和其他类型的 Web 内容,包括文档、图片和音频)的副本,并且所有试图将每个用户请求定向到一个将提供最好的用户体验的 CDN 位置

  • CDN 可以是专用 CDN,即它由内容提供商自己所拥有
  • CDN 可以是第三方 CDN,它代表多个内容提供商分发内容

CDN 通常采用两种不同的服务器安置原则

  • 深入,该原则是通过在遍及全球的接入ISP中部署服务器集群来深入到ISP的接入网中。其目标是靠近端用户,通过减少端用户和 CDN 集群之间链路和路由器的数量,从而改善了用户感受的时延和吞吐量
  • 邀请做客,该原则是通过在少量(例如10个)关键位置建造大集群来邀请到 ISP 做客。不是将集群放在接入ISP 中,这些 CDN 通常将它们的集群放置在因特网交换点(XP)
  • 与深入设计原则相比,邀请做客设计通常产生较低的维护和管理开销,可能以对端用户的较高时延和较低吞吐量为代价
CDN 操作过程
image-20240913132044581
  1. 用户访问位于 NetCinema 的 Web 网页
  2. 当用户点击链接 http://video.netcinema.com/6Y7B23V 时,该用户主机发送了一个对于 video.netcinema.com 的 DNS 请求
  3. 用户的本地 DNS 服务器(LDNS)将该 DNS 请求中继到一台用于 NetCinema 的权威 DNS 服务器,该服务器观察到主机名 video.netcinema.com 中的字符串“video”。为了将该 DNS 请求移交给 KingCDN,NetCinema 权威 DNS 服务器并不返回一个 IP 地址,而是向 LDNS 返回一个 KingCDN 域的主机名,如 a11O5.kingedn.com
  4. DNS 请求进入了 KingCDN 专用 DNS 基础设施。用户的 LDNS 则发送第二个请求,此时是对 a11O5.kingedn.com 的 DNS 请求,KingCDN 的DNS系统最终向LDNS 返回 KingCDN 内容服务器的 IP 地址。所以正是在这里,在 KingCDN 的 DNS 系统中,指定了 CDN 服务器,客户将能够从这台服务器接收到它的内容
  5. LDNS 向用户主机转发内容服务 CDN 节点的 IP 地址
  6. 一旦客户收到 KingCDN 内容服务器的 IP 地址,它与具有该 IP 地址的服务器创建了一条直接的TCP连接,并且发出对该视频的 HTTP 请求。如果使用了DASH 服务器将首先向客户发送具有 URL 列表的告示文件,每个URL对应视频的每个版本,并且客户将动态地选择来自不同版本的块
集群选择策略

任何CDN部署,其核心是集群选择策略,即动态地将客户定向到 CDN 中的某个服务器集群或数据中心的机制

  • 一种简单的策略是指派客户到地理上最为邻近的集群。使用商用地理位置数据库,每个 LDNS IP地址都映射到一个地理位置。此外,这种简单的策略忽略了时延和可用带宽随因特网路径时间而变化,总是为特定的客户指派相同的集群
  • 为了基于当前流量条件为客户决定最好的集群,CDN能够对其集群和客户之间的时延和丢包性能执行周期性的实时测量。例如,CDN能够让它的每个集群周期性地向位于全世界的所有 LDNS 发送探测分组(例如,ping报文或DNS请求)

套接字编程

Socket 编程

应用进程使用传输层提供的服务才能够交换报文,实现应用协议,实现应用

  • 地点:界面上的 SAP (Socket)
  • 方式:Socket API

套接字:分布式应用进程之间的门,传输层协议提供的端到端

传输层服务的 socket 类型

  • TCP:可靠的、字节流的服务
  • UDP:不可靠(数据UDP数据报)服务

UDP 套接字编程

为客户端和服务器提供不可靠的字节组的传送服务,在客户端和服务器之间没有连接,没有握手(传送的数据可能乱序,也可能丢失)

  • 发送端在每一个报文中明确地指定目标的 IP 地址和端口号
  • 服务器必须从收到的分组中提取出发送端的 IP 地址和端口号

演示 UDP 套接字编程

  1. 客户从其键盘读取一行字符(数据)并将该数据向服务器发送
  2. 服务器接收该数据并将这些字符转换为大写
  3. 服务器将修改的数据发送给客户
  4. 客户接收修改的数据并在其监视器上将该行显示出来
image-20240918132225931

TCP 套接字编程

在客户端和服务器进程之间提供了可靠的、字节流(管道)

服务器首先运行,等待连接建立

  • 创建 Welcome socket
  • 和本地端口捆绑
  • 在 Welcome socket 上阻塞式等待接收用户的连接

客户端主动和服务器建立连接

  • 创建客户端本地套接字(隐式捆绑到本地port)指定服务器进程的 IP 地址和端口号,与服务器进程连接
  • 连接API调用有效时,客户端 IP 与服务器建立了TCP连接

当与客户端连接请求到来时,服务器接受来自用户端的请求,解除阻塞式等待,返回一个新的socket(与 Welcome socket 不一样)

  • 与客户端通信,允许服务器与多个客户端通信
  • 使用源 IP 和源端口来区分不同的客户端

注意:区别下欢迎套接字和连接套接字

image-20240918194934333

演示 UDP 套接字编程

  1. 客户从其键盘读取一行字符(数据)并将该数据向服务器发送
  2. 服务器接收该数据并将这些字符转换为大写
  3. 服务器将修改的数据发送给客户
  4. 客户接收修改的数据并在其监视器上将该行显示出来
image-20240918195128412

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

nonlocal本质讲解(前篇)——从滤波到Nonlocal均值滤波

线性滤波 → \rightarrow →高斯滤波 → \rightarrow →高斯滤波 → \rightarrow →双边滤波 → \rightarrow →Nonlocal均值滤波 平均 高斯 双边 Nonlocal 目录 线性滤波高斯滤波双边滤波Nonlocal均值滤波 滤波最初是频域的概念,由于频域乘积对应空域卷积&am…

Maven和Springboot初识

(一)Maven Maven是一个项目管理工具,通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具 (可以通过pom.xml文件的配置来获取jar包,而不用手动添加) Maven可以提高我们的开发效率减少…

深度学习自编码器 - 使用自编码器学习流形篇

序言 在数据科学的浩瀚宇宙中,深度学习如同一颗璀璨的星辰,引领着我们对复杂数据内在规律的探索。其中,自编码器作为深度学习家族中的一位独特成员,以其非凡的能力——通过无监督学习捕捉数据的有效表示,而备受瞩目。…

从数据仓库到数据飞轮:数据技术演进的探索与思考

引言 在当今的数字化浪潮中,数据被视为一种极具价值的资源,类似于传统工业时代的石油,它为企业挖掘出深邃的洞察力,并成为决策过程中不可或缺的基石。随着技术的不断演进,数据管理的策略与架构也经历了显著的变革&…

Linux C高级 day1

1、 2、ubuntu中桥网络桥接模式配置流程: 首相需保证虚拟机提供了《桥接模式》 从菜单栏打开“虚拟机”选项卡下的“设置” ,如图设置虚拟机网络连接模式 此处无需勾选“复制物理网络连接状态” 而后 从菜单栏选择“编辑”下的“虚拟网络编辑器” &a…

leetcode75-9 压缩字符串 双指针原地算

题目太复杂了 没做出来 计算过程大概是双指针处理数组, 其中两个知识点一个是length 字符数组直接加 不用加括号 还有就是数字转字符需要转换 数字转换成字符 不能直接转换! 需借助数字转字符串, 首先将数字转为字符串,…

徒增成本,还是有备无患?说说4G模组SIM双卡切换

初学开发的小伙伴提出疑问: 手机双卡可以理解,人情世故各种缘由…… 物联网设备有必要双卡吗,会不会太浪费? 实际应用中,双卡可不是徒增成本的摆设,而是有备无患的必需。 在使用4G模组双卡功能的场景下&a…

掌握MySQL性能监控 · performance_schema 使用快速入门

performance_schema 使用快速入门 在数据库性能调优的过程中,performance_schema 是一个非常有用的工具,它可以帮助我们深入分析 MySQL 内部的性能表现。通过合理使用 performance_schema,我们可以发现数据库中的性能瓶颈并做出优化。本文将…

STM32快速复习(十二)FLASH闪存的读写

文章目录 一、FLASH是什么?FLASH的结构?二、使用步骤1.标准库函数2.示例函数 总结 一、FLASH是什么?FLASH的结构? 1、FLASH简介 (1)STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&…

XML映射器-动态sql

01-动态sql 1.实现动态条件SQL 第一种方法在sql语句中加入where 11其他条件都加and就行,这样就可以根据if条件来判断要传递的参数可以有几个 第二种方法用where标签给if语句包起来 where标签的作用如下图 第三种方法用trim标签解释如下图 用choose也可以实现条件查询如下图,…

pycharm连接远程linux服务器上的docker进行深度学习训练

实习过程中由于GPU都在服务器上,编辑代码很麻烦。并且服务器上配置了docker的环境,所以用pycharm连接远程服务器的docker进行深度学习,这样在本地调用远程服务器的GPU和环境,更方便一点,将这个过程记录下来&#xff0c…

高效开发,从暗藏玄机的文件系统开始—合宙Air201资产定位模组LuatOS

超低功耗、精准定位、快速量产——迷你小巧的合宙Air201,正给越来越多的行业客户带来高效开发体验。 4G-Cat.1模组的文件系统关乎数据传输速度、存储效率,以及数据安全性等等诸多因素,在应用开发中极为重要。 本期,我们来学习合…

QT 带箭头的控件QPolygon

由于对当前项目需要绘制一个箭头控件&#xff0c;所以使用了QPainter和QPolygon来进行绘制&#xff0c;原理就是计算填充&#xff0c;下面贴出代码和效果图 这里简单介绍下QPolygon QPolygon是继承自 QVector<QPoint>那么可以很简单的理解为&#xff0c;他就是一个点的…

比特币10年价格数据(2014-2024)分析(进阶2_时间序列分析)

数据入口&#xff1a;【每周挑战】比特币10年价格数据可视化和量化分析 - Heywhale.com 本数据集包含 2014 - 2024 的比特币美元价格数据&#xff0c;具体包含比特币每日的开盘价、最高价、最低价、收盘价以及成交量等关键信息。数据说明如下&#xff1a; 字段说明Date日期&a…

MES管理系统在智能制造中的重要应用

在智能制造的浪潮席卷之下&#xff0c;MES管理系统犹如一位精通生产艺术的智者&#xff0c;以其独到的洞察力和卓越的能力&#xff0c;引领着制造业向更加智能化、高效化的未来迈进。它不仅仅是一个数据汇聚的容器&#xff0c;更是信息处理的引擎、决策制定的伙伴&#xff0c;以…

游戏开发引擎__游戏场景(灯光,摄像机)

1.灯光 重要参数介绍 类型: 控制灯光的类型&#xff0c;有“定向”“点”“区域”和“聚光”4种模式。颜色: 控制灯光的颜色。模式: 控制灯光的光照模式&#xff0c;有“实时”“混合”和“烘焙”3种模式。强度: 控制灯光的明亮程度。间接乘数: 改变间接光的强度。阴影类型: …

亚信电子于IAS 2024展出最新IO-Link主站设备软件协议栈解决方案

亚信电子即将于IAS 2024展示最新的亚信IO-Link主站/设备软件协议栈、集成亚信IO-Link主站软件协议栈的AX58400 EtherCAT转IO-Link网关&#xff0c;以及AXM57104A TSN PCIe千兆以太网卡解决方案。 [台湾新竹讯, 2024年9月18日] 亚信电子&#xff08;ASIX Electronics Corporat…

Golang | Leetcode Golang题解之第415题字符串相加

题目&#xff1a; 题解&#xff1a; func addStrings(num1 string, num2 string) string {add : 0ans : ""for i, j : len(num1) - 1, len(num2) - 1; i > 0 || j > 0 || add ! 0; i, j i - 1, j - 1 {var x, y intif i > 0 {x int(num1[i] - 0)}if j &g…

二叉树的层序遍历(含十道leetcode相关题目)

文章目录 二叉树层序遍历模板102. 二叉树的层序遍历 二叉树层序遍历模板 我们之前讲过了关于二叉树的深度优先遍历的文章&#xff1a;前中后序遍历的递归法和迭代法。 接下来我们再来介绍二叉树的另一种遍历方式&#xff1a;层序遍历。 层序遍历一个二叉树。就是从左到右一层…

1.1 软件测试 + AI

欢迎大家订阅【软件测试】学习专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言一、软件测试二、人工智能的引入 前言 人工智能的引入为软件测试带来了巨大的变革&#xff0c;不仅提升了测试效率和准确性&#xff0c;也为软件质量的保障提供了新的手段。通…