# 网络工程师工具 **Repository Path**: kedaji/network-engineer-helper ## Basic Information - **Project Name**: 网络工程师工具 - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-02 - **Last Updated**: 2024-04-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 网络工程师工具 学习网络工程师相关知识 版本v0.1.1 # API简介 ### base 基础模块 ###### 枚举 ```rust /// 信号类型 pub enum Signal{ Analog, Digital } /// 按照消息传送的方向与时间关系分类的通信方式 pub enum Communication{ // 单工通信 Simplex, // 半双工通信 HalfDuplex, // 全双工通信 FullDuplex } /// 信道类型 pub enum Channel{ Wired, Wireless, } ``` --- ### core 核心模块 ###### 常量 ```rust /// 光速 300000km/s pub const LIGHT_VELOCITY:u32 = 300000; /// 光速 300m/μs pub const LIGHT_VELOCITY_METRE_PER_MICROSECOND:u32 = 300; /// 电信号在电缆中的传播速度 200000km/s pub const ELECTRICAL_SIGNALS_VELOCITY:u32 = 200000; /// 电信号在电缆中的传播速度 200m/μs pub const ELECTRICAL_SIGNALS_VELOCITY_METRE_PER_MICROSECOND:u32 = 200; ``` ###### 函数 * fn bandwidth 计算模拟信道的带宽 * fn baud_rate_1 计算波特率(码元速率) * fn baud_rate_2 计算波特率(码元速率) * amount_of_information 通过码元种类数计算信息量 * fn code_element_kind 通过信息量计算码元种类数 * fn nyquist 奈奎斯特定理 * fn signal_to_noise_ratio_dB 计算信噪比分贝数 * fn signal_to_noise_ratio_dB_extra 计算信噪比分贝数 * fn shannon 香农定理 * fn shannon_extra 香农定理 * fn delay 计算总延迟 * fn nyquist_sampling 奈奎斯特采样定理 * fn binary_exponential_backoff 二进制指数退避算法 * fn min_frame_size 最小帧计算 --- ### protocol 协议模块 ### protocal::ethernet 以太网协议模块 ###### 枚举 ```rust /// ### 以太网类型 pub enum EthernetType{ // 以太网 Ethernet, // 快速以太网 FastEthernet, // 千兆以太网 GigabitEthernet, // 万兆以太网 TenGigabitEthernet } // 双绞线规格标准 #[allow(non_camel_case_types)] pub enum ISOIEC_11801{ // 已淘汰 CAT_1, // 已淘汰 CAT_2, // 已淘汰 CAT_3, // 已淘汰 CAT_4, // 100M以太网(快速以太网),短距离可传1000M CAT_5, // 1G以太网(千兆以太网) CAT_5E, // 1G以太网(千兆以太网) CAT_6, // 10G以太网(万兆以太网) CAT_7 } ``` ###### 结构 ```rust /// 模拟以太网帧结构 pub struct FrameModel{ // 先导字段,0b10101010,不计入以太网帧大小 pre_field: [u8; 7], // 帧开始标志位,0b10101011,不计入以太网帧大小 start_flag: [u8; 1], // 目的MAC地址 target_mac: [u8; 6], // 源MAC地址 src_mac: [u8; 6], // 长度 length: [u8; 2], // 数据段,最小46字节,最大1500字节 data: [u8; 46], // 校验和 crc_sun: [u8; 4] } ``` ###### 函数 * fn name(t: EthernetType)->String 根据以太网类型获取对应的名称 * fn standard(t: EthernetType)->IEEE802 根据以太网类型对应的IEEE802.3标准 ### protocol::hdlc HDLC协议模块 ###### 枚举 ```rust pub struct FrameModel{ // 帧头,帧边界符:01111110,边界符是头部和尾部都是这个符号 head: u8, // 地址,可扩展 address: [u8;1], // 控制字段 control: [u8;1], // 数据,可变长 info: [u8; 8], // 校验,16或32 fcs: [u8;16], // 帧尾 帧边界符:01111110,边界符是头部和尾部都是这个符号 tail: [u8;1] } ``` ###### 函数 * fn encapsulation(address: u8, frame_type: FrameType, ns: u8, nr: u8, ack_flag: AckFlag, data: &mut Vec) -> Vec 封装HDLC帧 ### protocol::ip IP协议模块 ###### 结构 ```rust /// 模拟IP数据包结构 pub struct PackageModel{ //版本4位;头部长4位 version_and_header_length: [u8;1], // 服务类型字段8位 tos: [u8;1], // ip数据包,总长度16位 total_length: [u16;2], // 标识3位,主机发送IP报文的序号,每发送一次+1;分片偏移13位 flag_and_section: [u8;2], // 生存时间,用于设置一个数据包可经过的路由数量的上限,每经过一个路由 ttl-1。ttl为0时会被丢弃。 ttl: [u8;1], // 协议编号,标识ip报文封装了哪种上层协议。ICMP编号为1,TCP为6,UDP为17 protocol_no: [u8;1], // 头部校验和 header_sum: [u16;1], // 源地址 src_address: [u32;1], // 目的地址 target_address: [u32;1], // 选项,可变长度,最多40字节 ext: [u8;40], // 数据,可变长度,最多65515字节 data: [u8;65515] } ``` ###### 函数 * fn sharding(size: u32, MTU: u32, ip_header_size: u32)->Vec 对ip数据包进行分片,返回分片的详细信息 * fn default_sharding(size: u32, MTU: u32)->Vec 以ip报头默认的20字节大小,对ip数据包进行分片,返回分片的详细信息 * fn sharding_size(size: u32, MTU: u32, ip_header_size: u32) -> u32 对ip数据包进行分片,返回分片个数 * fn default_sharding_size(size: u32, MTU: u32) -> u32 以ip报头默认的20字节大小,对ip数据包进行分片,返回分片个数 --- ### unit 单位换算模块 ### unit::time 时间单位换算模块 ###### 枚举 ```rust enum TimeUnit{ Hour, //时 Minute, //分 Second, // 秒 Millisecond, //毫秒 1毫秒=1/10^3秒=1/1000秒 Microsecond, // 微秒 1微秒=1/10^6秒=1/1000000秒 Nanosecond // 纳秒 1纳秒=1/10^9秒=1/1000000000秒 } ``` ###### 函数 * fn to_hour 任意单位的时间转换为小时 * fn to_minute 任意单位的时间转换为分钟 * fn to_second 任意单位的时间转换为秒 * fn to_millisecond 任意单位的时间转换为毫秒 * fn to_microsecond 任意单位的时间转换为微秒 * fn to_nanosecond 任意单位的时间转换为纳秒 ### unit::rate 数据速率换算模块 ##### 枚举 ```rust pub enum RateUnit{ b,// 位 bps, Kb,// 千位 Kbps, Mb,// 100万位 Mbps, Gb,// Gbps, B,// 字节 KB,// 千字节 MB,// 100万字节 GB// } ``` ##### 函数 * fn to_bit 任意数据速率单位转换成位