热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

在Ubuntu下运行PQUIC

官网教程:https:pquic.orgPQUIC简介PQUIC(Pluginizedquic),即插件化QUIC,是一个框架,使QUIC客户端和服务器能够动态地交换协议插件(可以

官网教程:https://pquic.org/


PQUIC简介

PQUIC (Pluginized quic),即插件化QUIC,是一个框架,使QUIC客户端和服务器能够动态地交换协议插件(可以在每个连接的基础上扩展协议)。其中,QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议。


运行步骤

在教程中,假设我们的工作目录为working_dir


Step 1:编译PQUIC

首先,需要clone picotls,picotls提供PQUIC所基于的TLS实现,picotls自身需要openssl

$ sudo apt install libssl-dev # or dnf install openssl-devel
$ cd working_dir
$ git clone https://github.com/p-quic/picotls.git
$ cd picotls
# the following instructions just come from the picotls README
$ git submodule init
$ git submodule update
$ cmake .
# 如果缺少依赖,cmake可能失败,下载这些依赖之后重试cmake
$ make
# once picotls is compiled, just go back to the working directory
$ cd ..
# 应该回到目录working_dir

在picotls准备好之后,可以用下面的命令编译pquic

$ git clone https://github.com/p-quic/pquic
$ cd pquic
# install libarchive, used for the plugin exchange (on Fedora, dnf install libarchive-devel)
$ sudo apt install libarchive-dev
# fetch and compile ubpf, the virtual machine used within PQUIC
$ git submodule update --init
$ cd ubpf/vm
$ make
# make might generate warnings, but should compile
$ cd ../..
# compile michelfralloc dependency to handle memory
$ cd picoquic/michelfralloc
$ make
$ cd ../..
# also install gperftools, required in the current build process (on Fedora, dnf install gperftools)
$ sudo apt install google-perftools
$ cmake .
# if all the dependencies are present, cmake should not report any issue
$ make

这一步结束时,应该生成了多个可执行文件,包括picoquicdemo,可以充当PQUIC客户端和服务器


Step 2:检查picoquicdemo的运行

在进一步实验前,先检查我们编译好的代码可以交换数据。根据提供的参数,picoquicdemo可以用作(P)QUIC客户端或(P)QUIC服务器,接下来我们生成第一个连接。

我们打开两个不同的终端,首先,在一个终端中,我们用下面的命令来运行服务器:

$ cd working_dir/pquic
$ ./picoquicdemo
Starting PicoQUIC server on port 4443, server name = ::, just_Once= 0, hrr= 0, 0 local plugins and 0 both plugins

接着在另一个终端中按如下命令运行客户端:

$ cd working_dir/pquic
$ ./picoquicdemo ::1 4443

会显示大量的日志,但在客户端的最后一行,我们应该看到连接是成功完成的且没有报错,效果如下图:

(服务器端)



(客户端执行./picoquicdemo ::1 4443


Step 3:编译第一个插件

现在基础的实现工作正常,我们可以做一点修改,让它可以通过前向纠错来保护交换的数据。fec插件实现了这一点,但首先,我们需要把它编译成eBPF代码。

编译过程需要clang-6.0和llc-6.0,可以根据https://apt.llvm.org/中的内容进行下载。更新的版本也可用,但在本实验中,需要在Makefile中对CLANG和LLC变量进行修改。准备好之后,可以用以下命令对fec插件进行编译:

$ cd working_dir/pquic
$ cd plugins/fec
$ make
# if it raises an error about clang-6.0 not found, update the CLANG and LLC variables in Makefile

生成了几个对象文件,每个都是包含实现插件行为的eBPF代码的ELF文件,我们可以在PQUIC中插入这些文件


Step 4:在PQUIC中运行第一个插件

与第一次运行picoquicdemo一样,打开两个终端,首先,在一个终端运行带有fec插件的服务器:

$ cd working_dir/pquic
$ ./picoquicdemo -P plugins/fec/fec.plugin
Starting PicoQUIC server on port 4443, server name = ::, just_Once= 0, hrr= 0, 1 local plugins and 0 both plugins
local plugin plugins/fec/fec.plugin

在另一个终端,运行带有fec插件的客户端。在这里为了更简单的日志处理,我们使用-G和-4选项,将传输交换限制在10KB

$ cd working_dir/pquic
$ ./picoquicdemo -4 -G 10000 -P plugins/fec/fec.plugin ::1 4443

查看客户端的日志可以看到,新帧SFPID FRAME在连接上使用。这些帧对于注入的fec插件是特殊的,说明我们在这个连接中成功注入了前向纠错。


问题与解决方法

1.找不到-lprofiler

在运行Compiling PQUIC的最后一步make时,出现报错

/usr/bin/ld:找不到 -lprofiler

解决方法:

使用sudo apt install mlocate命令下载locate之后,查看locate libprofiler



可以看到,存在libprofiler.so.***文件,但不存在libprofiler.so文件,所以需要新建一个软链接

cd /usr/lib/x86_64-linux-gnu/
//进入对应目录
sudo ln -s libprofiler.so.0 libprofiler.so
//新建一个libprofiler.so的软链接,链接到已有的libprofiler.so.***文件
ll libprofiler.so*
//完成后可以查看是否成功

效果如图:

重新回到/working_dir/pquic执行make命令,编译成功:


2.编译plugin时的clang,llc版本问题

直接运行make很可能报错,提示找不到clang-6.0和llc-6.0

解决方法一:

查看系统中安装的clang和llc的版本号(在/usr/bin下执行ls命令即可),在Makefile中修改变量的值,如图所示:



解决方法二:

如果已经安装了clang-6.0和llc-6.0,但--version时显示的版本是更高的版本,可以将默认的版本改成6.0

参考链接:https://blog.csdn.net/DumpDoctorWang/article/details/84567757


拓展

运行basic,和运行fec插件是同理的,要先进到plugins/basic下执行一个make之后,再执行运行的命令

效果如图:

(服务器端)

(客户端)



推荐阅读
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
author-avatar
化合价steuart_968
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有