【斯坦福CS144】Lab7

news2024/12/27 9:46:48

一、实验目的

在本课程中,你已经实现了互联网基础设施的重要部分。这个检查点不是关于实现,而是关于测量实际的互联网并报告特定路径的长期统计数据。

二、实验内容

1.收集数据

选择一个远程主机,其往返时间(RTT)从你的虚拟机至少需要100毫秒。一些可能的选项包括:www.cs.ox.ac.uk (英国牛津大学计算机系服务器)

162.105.253.58 (中国北京大学计算机中心)

www.canterbury.ac.nz (新西兰坎特伯雷大学服务器)

41.186.255.86 (卢旺达MTN)

首选:从你的位置选择一个RTT至少为100ms的原始目标

使用mtr或traceroute命令追踪你的虚拟机和这个主机之间的路由。

运行ping至少两小时,以收集这个互联网路径的数据。使用类似ping -D -n -i 0.2 hostname | tee data.txt的命令来保存数据到"data.txt"文件。(-D参数使ping记录每一行的时间戳,-i 0.2使其每0.2秒发送一个“回声请求”ICMP消息。-n参数使其跳过尝试使用DNS反向查找回复IP地址到主机名。)

注意:每0.2秒发送默认大小的ping是可以的,但请不要以比这更快的速度发送流量。

2.分析数据

如果你每秒发送五个ping,持续两小时,你将发送大约36,000个回声请求(= 5 × 3600 × 2),其中我们预期绝大多数在ping输出中收到回复。请使用你选择的编程语言和图形工具,包含:

整个时间间隔的总体传递率是多少?换句话说:收到的回声回复数除以发送的回声请求数是多少?

最长的连续成功ping(连续回复)是多少?

最长的连续丢包(连续未回复)是多少?

“数据包丢失”的事件在时间上是多么独立或相关?换句话说:给定回声请求#N收到回复,回声请求#(N+1)也成功回复的概率是多少?

给定回声请求#N未收到回复,回声请求#(N+1)成功回复的概率是多少?

这些数字(条件传递率)与第一个问题中的总体“无条件”数据包传递率相比如何?丢失是怎样的独立或突发的?

三、实验过程

运行ping -D -n -i 0.2 162.105.253.58 | tee data.txt 这行指令,连接“中国北京大学计算机中心”,收集这个互联网路径的数据

打开桌面上的data.txt文件,查看收集到的数据

安装pip

输入Y以完成安装

用pip安装pandas库,发现报错:error: externally-managed-environment

选择使用pipx解决此问题。输入sudo apt install pipx安装pipx

输入Y确定执行

稍作等待后安装完成

使用pipx ensurepath将其添加到PATH中

现在可以使用 Pipx 而不是 Pip 安装 Python 包。再次尝试安装pandas

编写一个python代码

运行此python程序

运行成功,实验结束。

四、实验体会

1.在实验过程中,我首先选择了远程主机 162.105.253.58,并使用 ping 命令收集数据。按实验要求应至少收集两小时,但本次实验主要目的在于完成这个过程,因此为节省时间,我选择缩短收集时间来完成这个过程。然后,我使用 pandas 库对数据进行处理和分析。最后,我使用python计算了整个时间间隔的总体传递率、最长的连续成功 ping 和连续丢包、数据包丢失的独立性或相关性等指标。这些数据为我们提供了互联网路径的性能和稳定性的详细信息。

2.这次实验遇到的主要问题是运行pip install时,通常会收到一个错误提示:error: externally-managed-environment,即“外部管理环境”错误,但这不是一个 bug。完整错误信息如下:

$ sudo pip3 install please-cli

error: externally-managed-environment

× This environment is externally managed

╰─> To install Python packages system-wide, try 'pacman -S

python-xyz', where xyz is the package you are trying to

install.

If you wish to install a non-Arch-packaged Python package,

create a virtual environment using 'python -m venv path/to/venv'.

Then use path/to/venv/bin/python and path/to/venv/bin/pip.

If you wish to install a non-Arch packaged Python application,

it may be easiest to use 'pipx install xyz', which will manage a

virtual environment for you. Make sure you have python-pipx

installed via pacman.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.

hint: See PEP 668 for the detailed specification.

“外部管理环境”错误背后的原因:Manjaro 22、Ubuntu 23.04、Fedora 38 以及其他的最新发行版中,正在使用 Python 包来实现此增强功能。

这个更新是为了避免「操作系统包管理器 (如pacman、yum、apt) 和 pip 等特定于 Python 的包管理工具之间的冲突」。

这些冲突包括 Python 级 API 不兼容和文件所有权冲突。

解决方案主要有三种:

①直接去掉这个提示,使用

sudo mv /usr/lib/python3.x/EXTERNALLY-MANAGED /usr/lib/python3.x/EXTERNALLY-MANAGED.bk

然后运行pip(3) install package_name 命令来安装python模块。

②使用pipx,这也是我在本实验中用来解决的方案。它会自动为您安装的每个应用程序创建一个新的虚拟环境。不仅。它还创建指向它的链接.local/bin。这样,安装该软件包的用户就可以从命令行中的任何位置运行它。

③使用venv

需要先安装venv,然后安装模块,再使用新的虚拟环境执行py文件。此处不再展开。

五、代码附录

xxx.py

import pandas as pd

# 读取数据文件
data = pd.read_csv('./data.txt', names=['Timestamp', 'Received', 'RTT'])

# 将 'Received' 列转换为布尔类型
data['Received'] = data['Received'].astype(bool)

total_pings = len(data)
successful_pings = data['Received'].sum()
delivery_rate = successful_pings / total_pings
print(f"总体传递率: {delivery_rate:.2f}")

total_pings = len(data)
successful_pings = data['Received'].sum()
delivery_rate = successful_pings / total_pings
print(f"总体传递率: {delivery_rate:.2f}")

from itertools import groupby

def longest_streak(series):
    return max((sum(1 for _ in group) for key, group in groupby(series) if key), default=0)

longest_success_streak = longest_streak(data['Received'])
longest_failure_streak = longest_streak(~data['Received'])

print(f"最长连续成功ping: {longest_success_streak}")
print(f"最长连续丢包: {longest_failure_streak}")


# 计算连续请求的成功/失败关联
data['Next_Received'] = data['Received'].shift(-1)
correlated_success = data[(data['Received'] == True) & (data['Next_Received'] == True)].shape[0]
correlated_failure = data[(data['Received'] == False) & (data['Next_Received'] == True)].shape[0]

prob_success_following_success = correlated_success / successful_pings if successful_pings else 0
prob_success_following_failure = correlated_failure / (total_pings - successful_pings) if total_pings - successful_pings else 0

print(f"给定回声请求#N收到回复, #N+1 也成功回复的概率: {prob_success_following_success:.2f}")
print(f"给定回声请求#N未收到回复, #N+1 成功回复的概率: {prob_success_following_failure:.2f}")

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

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

相关文章

Unity3D相关知识点总结

Unity3D使用的是笛卡尔三维坐标系,并且是以左手坐标系进行展示的。 1.全局坐标系(global) 全局坐标系描述的是游戏对象在整个世界(场景)中的相对于坐标原点(0,0,0)的位置…

处理 Vue3 中隐藏元素刷新闪烁问题

一、问题说明 页面刷新,原本隐藏的元素会一闪而过。 效果展示: 页面的导航栏通过路由跳转中携带的 meta 参数控制导航栏的 显示/隐藏,但在实践过程中发现,虽然元素隐藏了,但是刷新页面会出现闪烁的问题。 项目源码&…

MLP优化KAN

一:spline概念介绍 在数学学科数值分析中,样条(spline)是一种特殊的函数,由多项式分段定义。样条的英语单词spline来源于可变形的样条工具,那是一种在造船和工程制图时用来画出光滑形状的工具 样条有两个特…

Adversarial and Adaptive Tone Mapping Operatorfor High Dynamic Range Images

Abstract 这项工作涉及色调映射,这是一种将高动态范围 (HDR) 图像转换为低动态范围 (LDR) 图像的常用方法。 我们通过使用自适应色调映射来解决这个问题。 我们建议部署条件生成对抗网络来构建对抗性和自适应色调映射算子(adTMO)&#xff0c…

游戏盾是如何解决游戏行业攻击问题

随着游戏行业的迅猛发展,其高额的利润和激烈的市场竞争吸引了众多企业和创业者的目光。然而,这一行业也面临着前所未有的业务和安全挑战,尤其是DDoS(分布式拒绝服务)攻击,已经成为游戏行业的一大威胁。今天…

Metasploit渗透测试之MSFvenom

简介 到目前为止,你应该已经对MSFvenom不陌生了,因为在之前的文章中已经介绍多次了。MSFvenom是用于生成有效攻击载荷和编码的工具。它由msfpayload和msfencode演变而来。并于2015年6月8日取代了这两者。 在本文中,我们将更深入地研究可用的…

MySQL进阶 - 索引

01 索引概述 【1】概念:索引就是一种有序的数据结构,可用于高效查询数据。在数据库表中除了要保存原始数据外,数据库还需要去维护索引这种数据结构,通过这种数据结构来指向原始数据,这样就可以根据这些数据结构实现高…

如何高效开发一套医院绩效核算系统

医院绩效核算系统是一种专为医疗机构设计的软件系统,旨在通过科学、系统的方法评估和核算医院内各科室及员工的绩效。该系统与医院的信息化系统紧密集成,特别是与医院信息系统(HIS)对接,以确保数据的准确性和实时性。 …

nginx配置多域名共用服务器80端口

nginx配置多域名共用服务器80端口 多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc.com(可以是http://abc.com或者www.abc.com),另外一个域名为x…

腾讯地图接口报错此key每日调用量已达到上限

需要在 配额管理 的 账户额度 中进行配额的分配

安捷伦Agilent N9918A,N9918B Fieldfox手持式微波分析仪

Agilent N9918B、Keysight N9918B、HP N9918B FieldFox 手持式微波分析仪,26.5 GHz 配置详情: 233 - 频谱分析仪 350 - 实时频谱分析仪 (RTSA) 010 - 矢量网络分析仪时域 235 - 前置放大器 238 - 频谱分析仪时间选通 210 - 矢量网络分析仪传输/反射…

照片在线转成二维码展示,更方便分享图片的好办法

怎么能把照片生成二维码后,分享给其他人展示呢?现在很多人为了能够更方便的将自己的图片展现给其他人会使用生成二维码的方式,将图片存储到云空间,通过扫码调取图片查看内容。与其他方式相比,这样会更加的方便&#xf…

BI 在运营管理中的案例实操与策略交流会开始报名啦!

BI 在运营管理中的案例实操与策略交流会开始报名啦 点击链接报名https://www.dataondemand.cn/activity20241029

【C++差分数组】3229. 使数组等于目标数组所需的最少操作次数|2066

本文涉及知识点 C差分数组 LeetCode3229. 使数组等于目标数组所需的最少操作次数 给你两个长度相同的正整数数组 nums 和 target。 在一次操作中,你可以选择 nums 的任何子数组,并将该子数组内的每个元素的值增加或减少 1。 返回使 nums 数组变为 tar…

天气预报echarts

如上图&#xff0c;可以切换温度&#xff0c;降水量&#xff0c;风力风向和空气质量 <template><el-radio-group v-model"selectedData" change"updateChart"><el-radio-button label"temperature">温度</el-radio-butto…

一、制作UI自适应

当前分辨率 更改分辨率 一、原因 一款游戏的UI&#xff0c;可能会根据玩家的分辨率和屏幕尺寸&#xff0c;产生不同的变化 例如&#xff1a;某一个Image位移到了摄像机外面 因此需要通过锚点和屏幕自适应来制作完美的效果 二、解决方法 1、锚点 作用是&#xff1a;根据当…

RPA技术的定义与原理

RPA&#xff08;Robotic Process Automation&#xff09;即机器人流程自动化&#xff0c;是一种利用软件机器人或机器人工具来自动执行重复性、规则性和可预测性的业务流程的技术。以下是对RPA技术的详细介绍&#xff1a; 一、RPA技术的定义与原理 RPA技术通过模拟人工操作&a…

【深度学习 | 基础部分】深度学习导论

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

基于IMX6UL的EPIT的定时器实验

定时器是最常用的外设&#xff0c;常常需要使用定时器来完成精准的定时功能&#xff0c;I.MX6U 提供了多 种硬件定时器&#xff0c;有些定时器功能非常强大。本章我们从最基本的 EPIT 定时器开始&#xff0c;学习如何配置EPIT 定时器&#xff0c;使其按照给定的时间&#xff0c…

springmvc发送邮件的功能怎么集成Spring?

springmvc发送邮件的实现方法&#xff1f;怎么用SpringMVC发信&#xff1f; Spring框架提供了强大的支持&#xff0c;使得在SpringMVC应用中集成邮件发送功能变得非常简单。AokSend将详细介绍如何在SpringMVC应用中集成邮件发送功能&#xff0c;并确保其高效、可靠地运行。 s…