一.快速重传介绍 按照TCP协议,RTO超时重传是一个非常重要的事件,当RTO超时的时候,TCP会同时通过两种方式非常谨慎的降低发送数据包的速率,一种是基于拥塞控制削减发送窗口的大小,另外一个是通过指数回退增加每次RTO超时的时间(即karn算法的第二部分).所以RTO超时后有可能会导致网络容量的利用不足. 最开始我们介绍tcp重传的时候就介绍过TCP还有另外一种重传方式--快速重传.快速重传是RFC5681定一个的一个过程.快速重传不依赖定时器的超时,而是依靠ACK确认包来进行重传.使用快速重…
[易学易懂系列|rustlang语言|零基础|快速入门|(16)|代码组织与模块化] 实用知识 代码组织与模块化 我们知道,在现代软件开发的过程中,代码组织和模块化是应对复杂性的一种方式. 今天我们来看看Rust是怎么做代码组织和模块化的. Rust用mod 关键字来定义模块. 我们还是拿上一篇文章中的代码来作例子,我们在原来的代码lib.rs加入新的mod: mod greetings { // ⭐️ By default, everything inside a module is priv…
[易学易懂系列|rustlang语言|零基础|快速入门|(9)] 有意思的基础知识 Control Flows 我们今天再来看看流程控制. 条件控制 if-else if -else: / Simplest Examplelet team_size = 7;if team_size < 5 {    println!("Small");} else if team_size < 10 {    println!("Medium");} else {  …
简单易懂的rustlang入门教程. [易学易懂系列|rustlang语言|零基础|快速入门|(1)|开篇] [易学易懂系列|rustlang语言|零基础|快速入门|(2)|VCCode配置] [易学易懂系列|rustlang语言|零基础|快速入门|(3)|所有权Ownership] [易学易懂系列|rustlang语言|零基础|快速入门|(4)|借用Borrowing] [易学易懂系列|rustlang语言|零基础|快速入门|(5)|生命周期Lifetime] [易学易懂系列|rustlang…
[易学易懂系列|rustlang语言|零基础|快速入门|(28)|实战5:实现BTC价格转换工具] 项目实战 实战5:实现BTC价格转换工具 今天我们来开发一个简单的BTC实时价格转换工具. 我们首先创建一个目录: cargo new btc_converter 我们用TDD方式来开发. 然后 我们先写一些测试代码. 在src/main.rs下面,增加代码如下: #[cfg(test)] mod tests { use super::*; #[test] fn test_convert_succ…
[易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链] 项目实战 实战4:从零实现BTC区块链 我们今天来开发我们的BTC区块链系统. 简单来说,从数据结构的角度上来说,区块链,就是区块组成的链. 以下就是BTC区块链典型的结构: 那最小单元就是区块:block. 这个block包含两部分:区块头,区块体. 我们先忽略Merkle树,先简化所有数据结构,只保留最基本的数据结构. 那区块头,就包含:区块高度,时间截:前一个区块地址:工作证明; 区块体,就包…
[易学易懂系列|rustlang语言|零基础|快速入门|(26)|实战3:Http服务器(多线程版本)] 项目实战 实战3:Http服务器 我们今天来进一步开发我们的Http服务器,用多线程实现. 我们在原来工程h_server更新代码如下: src/main.rs: use h_server::*; use std::fs; use std::io::prelude::*; use std::net::TcpListener; use std::net::TcpStream; fn main(…
[易学易懂系列|rustlang语言|零基础|快速入门|(25)|实战2:命令行工具minigrep(2)] 项目实战 实战2:命令行工具minigrep 我们继续开发我们的minigrep. 我们现在以TDD测试驱动开发的模式,来开发新的功能search函数. 开始吧,我们先在src/lib.rs文件中,增加测试代码: #[cfg(test)] mod tests { use super::*; #[test] fn one_result() { let query = "duct"…
[易学易懂系列|rustlang语言|零基础|快速入门|(24)|实战2:命令行工具minigrep(1)] 项目实战 实战2:命令行工具minigrep 有了昨天的基础,我们今天来开始另一个稍微有点复杂的项目. 简单来说,就是开发一个我们自己的grep (globally search a regular expression and print) 首先用命令生成一个工程: cargo new minigrep 然后在工程目录minigrep下新建一个文件:poem.txt,文件的内容如下 :…
[易学易懂系列|rustlang语言|零基础|快速入门|(23)|实战1:猜数字游戏] 项目实战 实战1:猜数字游戏 我们今天来来开始简单的项目实战. 第一个简单项目是猜数字游戏. 简单来说,系统给了一个随机数字,你根据提示输入你的数字,如果答对了,系统显示:you win! 否则系统会给个提示:太小或太大的提示,继续猜. 我们开始吧! 先用命令生成工程: cargo new guessing_game 用vscode打开新建的工程guessing_game,src/main.rs的代码更新为如…