《计算机网络——自顶向下方法》精炼

news2024/11/27 10:35:24

“An investment in knowledge pays the best interest.” - Benjamin

文章目录

  • 分布式散列表
    • (键-值)对
    • 散列函数
      • 逻辑上的实现
        • 环形DHT
        • 对等方扰动
          • 对等方离开
          • 对等方加入
  • UDP套接字编程
      • 客户端代码
      • 服务器端代码

分布式散列表

分布式散列表是一种数据库。集中式数据库采用客户-服务器模式,分布式数据库则有很多个对等方,每个对等方存储一部分(键-值)对。

(键-值)对

数据在数据库中以(键-值)对的方式进行存储。

  1. 键:相当于索引,某个对等方在查询数据时需要使用键来查询相对应的数据。
  2. 值:实际存储的数据。

在P2P结构中,每个对等方存储一部分(键-值)对,通过互相查询来获取数据。

散列函数

为了确定哪个对等方存储哪些数据以便查询,为每个对等方都分配了一个标识符,每个标识符都是[0,2n-1]中的一个数,这样可以很方便的用n位二进制数来表示。
接下来,我们用散列算法的方式计算出一个键所对应的标识符,并把这个键值对加入这个标识符所代表对等方的数据中。
我们使用的散列算法是:

将键对2n取模,得到一个在[0,2n-1]的值,寻找大于这个值的最小标识符,这就是这个键所对应的标识符。

举个例子:

若标识符范围在[0,15]范围内,有标识符为1,5,12,14四个对等方。要加入的键值对的键值为36,则:

  1. 36对16取模,结果为4.
  2. 大于4的最小标识符为5,则5是负责这个键值对的对等方.
  3. 将这个键值对传入

逻辑上的实现

在实际操作中,我们要做到让一个对等方想新增数据时确定谁是负责这个键值对的对等方,但要让每一个对等方都能与所有对等方直接联系从成本上就是不现实的,因此我们需要取巧。

环形DHT

我们在逻辑上将所有对等方连接成一个环:
在这里插入图片描述
在这个环中,对等方之间的链路称为覆盖链路,这是一种逻辑上的概念,在物理上它由许多不同链路和路由器组成。
一个环中的对等方只与它的后继结点和前任结点联系。我们用上图的例子来说明这个DHT是怎么工作的:

  1. 3想知道谁负责11,它向4发送询问报文。
  2. 4知道5更接近键值,于是向5发送询问报文
  3. 一直重复这个过程,直到12收到查询报文,发现它就是大于键值的最小对等方,于是它向3发送一个报文,说明自己负责11

这个结构的弊端就是发送报文的数量太多,可能给网络带来压力,为了协调连接成本和发送报文的成本,我们加一些“捷径”。如下图,如果1想询问11是谁负责,它发现它可以直接联系到5,从5再向后依次询问,这样就可以跳过3和4.
加粗样式

对等方扰动

对等方加入和离开时会产生对等方扰动,我们思考DHT怎么处理这种扰动。处理扰动的方式有点类似于链表的思想。

对等方离开

每个对等方都知道它的第一个后继和第二个后继。

  1. 当它的第一个后继离开时,它将它的第二个后继设为第一个后继,并询问这个后继的后继,以得到新的第二个后继。
  2. 当它的第二个后继离开时,它询问它第二个后继的后继,以得到新的第二个后继。
对等方加入
  1. 若对等方13想加入该DHT,它能联系到1,于是它询问1以得到13的前任和后继
  2. 假如12和14在DHT中,那么1将报文发送到12,12知道它是13的前任,并告知14它是13的后继。
  3. 12给13发送报文,告知它13的后继和前任,13加入DHT,将14设为它的后继,同时12将13设为他的后继。

UDP套接字编程

编写一个网络程序时,在应用层上有两种选择:

  1. 我们可以使用FTP、HTTP等实现在协议标准中的协议,这时我们需要使用协议标准中规定的端口号;
  2. 我们也可以使用自己编写的应用层协议编写网络程序,这个时候就要避免使用协议标准中规定的端口号。

接下来,我们要做的第一件事就是确定所使用的运输层协议,即TCP/UDP。我们先看使用UDP的情况,即UDP套接字编程。

一个网络程序应用包含两部分,客户程序和服务器程序。下图表示了客户和服务器之间的交互过程:
请添加图片描述
从客户视角来看,它只是从套接字处送出去和拿到了数据;从服务器视角来看也是如此,因此我们编写程序时也要保证视角中只有应用层和套接字。运输层的操作由协议自动进行。接下来用一个例子介绍实际代码,这个代码中客户将一串字符送到服务器,服务器将这串字符的大写版本送回客户。

客户端代码

下图是应用程序客户端的代码:
在这里插入图片描述

  1. socket模块行让我们能在程序中创建套接字
  2. serverName行提供了目的主机名(服务器名)或服务器IP地址,如果使服务器名,则自动使用DNS服务获取IP地址
  3. serverPort行提供了服务器端接收该报文的套接字。这一行和上一行共同指向了一个服务器端一个具体的进程。
  4. clientSocket行创建了一个客户端套接字,其中包含两个参数。
  • AF_INET指示网络层使用了IPv4网络
  • SOCK_DGRAM指示这是一个UDP套接字
  1. 这一行是python语法,将这个字符串放到变量message中
  2. 这一行指示套接字将要发送的数据发送给特定进程。
  • message是发送的数据
  • 第二个参数包含了服务器的IP地址和服务器的套接字,确定了一个具体进程作为目的进程
  1. 这一行的recvfrom()函数开辟长度为2048的缓存接收报文,并将报文的数据放入modifiedmessage,将源地址放入serverAddress。
  2. 这一行将modifiedmassage,也就是报文的数据打印到屏幕上。
  3. 关闭套接字,关闭进程。

服务器端代码

在这里插入图片描述
这里只介绍与客户端代码不一样的部分:

  1. 第四行将serverPort,即12000这个端口号分配给一个套接字,以便能用这个套接字接收特定进程的报文
  2. while循环让服务器每次处理完一个请求后回到recvfrom()函数行再次接收报文。
  3. 倒数第二行执行将字符串的所有字母改写成大写字母的指令。

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

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

相关文章

锁相环的工作原理

锁相环是一个能够比较输入与输出信号相位差的反馈系统,利用外部输入的参考信号控制环路内部的振荡信号的频率和相位,使振荡信号同步至参考信号。 问题:既然是利用外部的参考时钟控制内部的振荡信号频率和相位使内部信号同步至外部参考,那为什么不直接用导线将外部参考信号…

微服务监控系统选型:Zabbix、Open-Falcon、Prometheus

监控系统的 7 大作用 实时采集监控数据:包括硬件、操作系统、中间件、应用程序等各个维度的数据。实时反馈监控状态:通过对采集的数据进行多维度统计和可视化展示,能实时体现监控对象的状态是正常还是异常。预知故障和告警:能够提…

08 【Sass语法介绍-混合指令】

1.前言 混合指令在 Sass 中也是一个比较常用的指令,在前面我们讲解的内容中有编写过混合指令 mixin ,本节我们将详细讲解混合指令 mixin 的语法包括定义混合指令和引用混合指令等等,混合指令同样非常好用,我们一起来学习它吧。 …

python 离线安装pyinstaller

Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirrorhttps://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载各类anaconda Archived: Python Extension Packages for Windows - Christoph Gohlke (uci.edu)https://www.lfd.uci.edu/~g…

OpenGL(二)—— Hello World

目录 一、前言 二、渲染 三、GLSL 3.1 数据类型 3.2 编程步骤 四、渲染窗口 五、渲染三角形 5.1 顶点输入 5.2 顶点着色器 5.3 片段着色器 5.4 着色器链接 5.5 顶点属性 5.6 VAO管理顶点属性 5.7 画图 六、渲染四边形 6.1 元素缓冲对象EBO 6.2 运行 一、前言 G…

hbuilder打包IOS上线APP流程

iOS 系统打包流程 1. 创建唯一标识符 (1) 首先,申请苹果开发者账号。没有苹果开发者账号是无法进行 ios 打包上线的。 (2) 进入链接: https://developer.apple.com 这个网址,点击“account”并输入苹果开…

计算机含金量最高的赛事大全,考研和工作都能加持,这才是该参加的比赛

现在计算机相关的赛事数不胜数,但含金量较高的比赛却只有那么几项,做好了你现场就能找到工作,就算是考研也是益处很大,今天给大家总结出来。 就别再折腾一些费时费力但又不讨好的比赛了。 文章目录 一、ACM国际大学生程序设计竞赛…

【0基础学爬虫】爬虫基础之自动化工具 Playwright 的使用

大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…

autosar软件分层架构组成--汽车电子

介绍 autosar是汽车软件协会制定的一套软件标准 本文章所有图片来源于网络 一、分层架构 分层:3层 1.上层应用层(Application Layer) 2.中间件RTE(Runtime Environment) 3.下层的基础软件(Basic Software) 中间件R…

电脑截图快捷键有哪些?5大截图方法总结!(2023版)

案例:电脑截图快捷键 【朋友们,最近我总是需要用到电脑截图,有什么比较好用的电脑截图快捷键可以帮助我提高效率的吗?感谢感谢!】 电脑截图是我们日常工作、学习中不可或缺的一项功能。在Windows系统中,快…

python图像处理之形态学梯度、礼帽、黑帽

文章目录 简介实战 简介 腐蚀和膨胀是图像形态学处理的基本运算,这两种运算的复合运算构成了开和闭,而腐蚀、膨胀与原图之间的加减操作,则构成了形态学梯度、礼帽和黑帽计算。 由于这几种函数均基于腐蚀和膨胀,所以其参数均与开…

zynq基于XDMA实现PCIE X8通信方案测速 提供工程源码和QT上位机程序和技术支持

目录 1、前言2、我已有的PCIE方案3、基于zynq架构的PCIE4、总体设计思路和方案5、vivado工程详解6、SDK 工程详解7、驱动安装8、QT上位机软件9、上板调试验证9、福利:工程代码的获取 1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串…

Linux进程通信:信号相关函数

1. kill函数 #include<sys/types.h> #include<signal.h>int kill(pid_t pid, int sig); /* 功能&#xff1a;给进程pid发送信号sig 参数&#xff1a;pid&#xff1a;取值有4种情况&#xff1a;> 0&#xff1a;将sig信号发送给进程号为pid的进程&#xff1b; 0&…

加密解密学习笔记

加密种类 对称加密&#xff0c;分组对称加密算法 加密算法 AES&#xff08;Advanced Encryption Standard&#xff09;高级加密标准 DES&#xff08;Data Encryption Standard&#xff09;数据加密标准 3DES/Triple DEA (Triple Data Encryption Algorithm) 三重数据加密算…

如何分别在macOSWindowsLinux上对OpenSSL源码进行编译

问题描述 如何分别在macOS、Windows、Linux系统上对OpenSSL源码进行编译&#xff1f; 问题解答 编译版本&#xff1a;openssl-1.1.1t 官方源码地址&#xff1a;https://www.openssl.org/source/ 下面流程在三种系统上均进行实际验证&#xff0c;可放心食用。 Windows(MSVC…

在Vue3项目中js-cookie库的使用

文章目录 前言1.安装js-cookie库2.引入、使用js-cookie库 前言 今天分享一下在Vue3项目中引入使用js-cookie。 1.安装js-cookie库 js-cookie官网 安装js-cookie&#xff0c;输入 npm i js-cookie安装完成可以在package.json中看到&#xff1a; 安装以后&#xff0c;就可…

【C++代码之美】你不得不知道的经典代码

1.斐波那契数列 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个…

vite4+vue3:从0到1搭建vben后台管理系统

从0到1带你学习如何搭建vben后台管理系统系列文章目录 一.准备工作:技术选型基础环境的搭建 文章目录 从0到1带你学习如何搭建vben后台管理系统系列文章目录一.准备工作:技术选型基础环境的搭建 前言一、技术选型二、生成基础项目三、安装步骤跑起项目 总结 前言 前端日趋复杂…

鸿蒙Hi3861学习二-程序烧录与日志输出

一、准备事项 开发板&#xff1a;BearPi-Hm Nano windows工具&#xff1a;HiBurn.exe https://pan.baidu.com/s/18OQD1_BvjNKD_J2e2iX3qg?pwdadrs 提取码&#xff1a;adrs windows工具&#xff1a;MobaXterm和RaiDrive 把ubuntu文件夹映射到windows本地。可以参考如下链接&am…

边缘计算在哪些场景的应用?实现了哪些功能

边缘计算是一种分布式计算模型&#xff0c;将数据处理和存储功能从云中心移动到接近数据源的边缘设备上&#xff0c;从而在处理延迟、网络带宽、隐私保护和数据安全等方面带来了许多优势。 智慧油站应用&#xff1a;在加油区部署的吸烟检测、打电话检测、烟火检测、区域入侵检测…