在Ubuntu 16.04.3 LTS上搭建QUIC交互demo
目的
本文依据参考文献中的资料,来利用chromium源码编译出quic_server和quic_client, 并依靠它们来发送QUIC协议请求,了解QUIC交互的细节。
前提
必须能够流畅地翻墙下载chromium等项目代码
下面是实操记录
项目目录存放在
cd ~/program_develop/quic_dev
最后的目录结构在这里提前说明一下
下载chromium项目源码
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
在~/.bashrc中添加
export PATH="$PATH:这里为depot_tools的路径"
更新配置
source ~/.bashrc
mkdir chromium && cd chromium
fetch --nohooks chromium
chromium项目源码大约9.91G,这一步根据网速快慢可能需要花费较长时间,我这里大约40分钟左右吧
编译出quic_server和quic_client
cd src
sudo build/install-build-deps.sh
或者
sudo build/install-build-deps.sh --no-chromeos-fonts
这两个命令都下载失败,但是都没有啥影响
gclient runhooks
gn gen out/Default
ninja -C out/Default quic_server quic_client
此时我们已经得到quic_server和quic_client
准备测试网页及证书
mkdir -p ~/program_develop/quic_dev/quic-data
cd ~/program_develop/quic_dev/quic-data
wget -p --save-headers https://www.example.org
cd www.example.org
vim index.html
在header里加上X-Original-Url: https://www.example.org/
行末的^M使用Ctrl+V,Ctrl+M实现
cd ~/program_develop/quic_dev/chromium/src
cd net/tools/quic/certs
./generate-certs.sh
cd -
生成的证书在下面的目录
在浏览器中添加证书
然后打开chrome浏览器(我在Ubuntu 16.04上安装的版本是63),在地址栏里输入chrome://settings/search#ssl 然后选择 授权中心,点击导入 ,将net/tools/quic/certs/out/2048-sha256-root.pem导入 ,最后勾选第一项,确定即可
开启QUIC的server和client,请求准备好的网址
下一步就是跑server,开启指定端口监听
./out/Default/quic_server \
--quic_response_cache_dir=/home/taoyx/program_develop/quic_dev/quic-data/www.example.org \
--certificate_file=net/tools/quic/certs/out/leaf_cert.pem \
--key_file=net/tools/quic/certs/out/leaf_cert.pkcs8 \
--port=6121 \
--v=1
这里明确指定端口号6121,使用--v=1开启更多的调试信息
然后是启动Client,采用QUIC协议来发送请求和接收响应
./out/Default/quic_client --host=127.0.0.1 --port=6121 https://www.example.org/
然后,根据交互细节来了解QUIC协议,并阅读QUIC实现的相关代码。
参考文献
[1].http://blog.csdn.net/Claranc/article/details/79062260
[2].http://blog.csdn.net/dxpqxb/article/details/76819992
在Ubuntu 16.04.3 LTS上搭建QUIC交互demo相关推荐
- 在Ubuntu 16.04.3 LTS上搭建Go语言环境实录
1.安装 sudo apt-get install golang-go 目前go的最新版本是1.9.2,但是在Ubuntu 16.04上采用预编译好的包安装的话,只能是go 1.6.x版本. 安装完成 ...
- 在Ubuntu 16.04.6 LTS上升级python 3.5到3.7.3实录
缘由 我想安装一个python模块you-get,发现只能使用pip3安装,但是我发现我的Ubuntu 16.04.6 LTS上有python3.5,但是没有pip3,也无法成功安装,真是要了我的老命 ...
- 在Ubuntu 16.04.6 LTS上安装python3.7和pip3后出现Command '('lsb_release', '-a')' 出错问题的解决方法
在Ubuntu 16.04.6 LTS上安装python3.7和pip3后出现Command '('lsb_release', '-a')' returned non-zero exit status ...
- 在Ubuntu 16.04.6 LTS上升级Go到最新版1.12.5实录
上一次我在Ubuntu 16.04.3 LTS上从源码安装了Go,当时最新的版本是1.10,参见我之前的博文 https://blog.csdn.net/tao_627/article/details ...
- 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操
在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小. 在Ubuntu 16.0 ...
- 在Ubuntu 16.04.5 LTS上升级python的pip版本实录
在ubuntu 16.04.5 LTS上使用Python安装模块时,比较顺手的方法是使用pip命令.这次,我在安装一个模块时,老是提示下面的问题,比较不爽.所以,我就照着提示做了一遍,记录下来,以作备 ...
- 在Ubuntu 16.04.3 LTS上玩转quic-go项目
说明 quic-go是使用Go来重写chromium中的QUIC协议,将来计划过渡到IETF版本的QUIC协议. 目前该协议还处于不断更新和活跃之中,目前IETF版本的QUIC协议草案版本号已经到dr ...
- 在Ubuntu 16.04.3 LTS上运行go+https+json示例
下面是我依据网上资料的实操过程,记录以作备忘.该示例给出了https通信并处理json文件的例子. 平台:Ubuntu 16.04.3 LTS go版本:1.10 1.生成自签名的服务器端的私钥KEY ...
- 在Ubuntu 16.04.4 LTS上调研开源QUIC项目ngtcp2
最近在研究QUIC协议,尝试了一些QUIC相关的开源项目,主要是c,c++,go等语言编写的.这里记录下我折腾ngtcp2的过程. 基本思路就是参照github上该项目的README来进行就可以了.由 ...
最新文章
- ie下面兼容性问题的一些总结(转)
- Head First设计模式之策略模式(Strategy)
- pyinstaller打包exe在其他机器无法运行_详解pyinstaller selenium python3 chrome打包问题!解决率100%...
- 携号转网将于明年在全国范围内实施
- 分布式事务解决方案,Seata的基本配置和使用
- LeetCode(183)—— 从不订购的客户(MySQL)
- hibernate文档
- 一致性 hash 算法(consistent hashing)
- 大数据开发笔记(一):HDFS介绍
- Windows 已经激活,但是显示副本不是正版的解决办法
- Linux内存管理 (1)物理内存初始化
- 静态HTML网页设计作品——动漫电影《你的名字》(7页) HTML+CSS大作业_ 动漫电网页制作作业_动漫电网页设计...
- “15分钟核酸检测服务圈”怎样进行采样点选址
- 微信小程序与java语言mysql数据库
- 零售信贷产品的8大业务流程
- 连接计算机名提示输入网络凭据,Win10访问局域网共享文件时提示输入网络凭据如何解决...
- 基于SpringBoot的城市建设用地管理系统的设计与实现
- python tensorflow2 deeplearning 音频处理 声学事件检测
- 转战物联网·基础篇03-从JSON数据到短指令谈思维的转变
- 盖世帝尊 I 分享(一叶青天)
热门文章
- 2022-2028年中国边缘计算行业投资分析及前景预测报告(全卷)
- 2022-2028年中国摩托车行业投资分析及前景预测报告(全卷)
- oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园
- mysql数据没有真正提交,转MySQL 批量提交优化
- MySQL 学习笔记(8)— 触发器
- css3之transition、transform、animation比较
- YML(2)yml 语法
- 获取request的变量
- 惰性求值 php,详细介绍C#函数式编程的示例代码
- python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同