目的
本文依据参考文献中的资料,来利用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相关推荐

  1. 在Ubuntu 16.04.3 LTS上搭建Go语言环境实录

    1.安装 sudo apt-get install golang-go 目前go的最新版本是1.9.2,但是在Ubuntu 16.04上采用预编译好的包安装的话,只能是go 1.6.x版本. 安装完成 ...

  2. 在Ubuntu 16.04.6 LTS上升级python 3.5到3.7.3实录

    缘由 我想安装一个python模块you-get,发现只能使用pip3安装,但是我发现我的Ubuntu 16.04.6 LTS上有python3.5,但是没有pip3,也无法成功安装,真是要了我的老命 ...

  3. 在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 ...

  4. 在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 ...

  5. 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操

    在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小. 在Ubuntu 16.0 ...

  6. 在Ubuntu 16.04.5 LTS上升级python的pip版本实录

    在ubuntu 16.04.5 LTS上使用Python安装模块时,比较顺手的方法是使用pip命令.这次,我在安装一个模块时,老是提示下面的问题,比较不爽.所以,我就照着提示做了一遍,记录下来,以作备 ...

  7. 在Ubuntu 16.04.3 LTS上玩转quic-go项目

    说明 quic-go是使用Go来重写chromium中的QUIC协议,将来计划过渡到IETF版本的QUIC协议. 目前该协议还处于不断更新和活跃之中,目前IETF版本的QUIC协议草案版本号已经到dr ...

  8. 在Ubuntu 16.04.3 LTS上运行go+https+json示例

    下面是我依据网上资料的实操过程,记录以作备忘.该示例给出了https通信并处理json文件的例子. 平台:Ubuntu 16.04.3 LTS go版本:1.10 1.生成自签名的服务器端的私钥KEY ...

  9. 在Ubuntu 16.04.4 LTS上调研开源QUIC项目ngtcp2

    最近在研究QUIC协议,尝试了一些QUIC相关的开源项目,主要是c,c++,go等语言编写的.这里记录下我折腾ngtcp2的过程. 基本思路就是参照github上该项目的README来进行就可以了.由 ...

最新文章

  1. ie下面兼容性问题的一些总结(转)
  2. Head First设计模式之策略模式(Strategy)
  3. pyinstaller打包exe在其他机器无法运行_详解pyinstaller selenium python3 chrome打包问题!解决率100%...
  4. 携号转网将于明年在全国范围内实施
  5. 分布式事务解决方案,Seata的基本配置和使用
  6. LeetCode(183)—— 从不订购的客户(MySQL)
  7. hibernate文档
  8. 一致性 hash 算法(consistent hashing)
  9. 大数据开发笔记(一):HDFS介绍
  10. Windows 已经激活,但是显示副本不是正版的解决办法
  11. Linux内存管理 (1)物理内存初始化
  12. 静态HTML网页设计作品——动漫电影《你的名字》(7页) HTML+CSS大作业_ 动漫电网页制作作业_动漫电网页设计...
  13. “15分钟核酸检测服务圈”怎样进行采样点选址
  14. 微信小程序与java语言mysql数据库
  15. 零售信贷产品的8大业务流程
  16. 连接计算机名提示输入网络凭据,Win10访问局域网共享文件时提示输入网络凭据如何解决...
  17. 基于SpringBoot的城市建设用地管理系统的设计与实现
  18. python tensorflow2 deeplearning 音频处理 声学事件检测
  19. 转战物联网·基础篇03-从JSON数据到短指令谈思维的转变
  20. 盖世帝尊 I 分享(一叶青天)

热门文章

  1. 2022-2028年中国边缘计算行业投资分析及前景预测报告(全卷)
  2. 2022-2028年中国摩托车行业投资分析及前景预测报告(全卷)
  3. oracle 存储过程 状态,查看ORACLE中正在运行的存储过程 | 学步园
  4. mysql数据没有真正提交,转MySQL 批量提交优化
  5. MySQL 学习笔记(8)— 触发器
  6. css3之transition、transform、animation比较
  7. YML(2)yml 语法
  8. 获取request的变量
  9. 惰性求值 php,详细介绍C#函数式编程的示例代码
  10. python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同