计算机网络之传输层 + 应用层
.1
- CIDR地址块中还有三个特殊的地址块
a. 前缀 n = 32 , 即32位IP地址都是前缀, 没有主机号, 这其实就是一个IP地址, 用于主机路由
b. 前缀 n = 31 , 这个地址块中有两个IP地址, 主机号分别为0/1 , 这个地址块用于点对点链路
c. 前缀 n = 0 , 用于默认路由 - 使用二叉线索树查找转发表
为进行更有效的查找,通常把无分类编址的转发表存放在一种层次的数据结构中,然后自上而下地按层次进行查找,这里最常使用的即为二叉线索(binary trie).
一般用唯一前缀来构造二叉线索 , 每个叶节点代表一个IP地址, 其内包含完整IP地址 , 前缀 , 子网掩码
唯一前缀是指,在表中所有的IP地址中,该前缀是唯一的。

规则:先检查IP地址的第一位,如为0,则第一层的节点就在根节点的左下方;如为1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。每个叶节点代表一个唯一前缀。
此外, 即使找到唯一前缀匹配的叶子结点, 还需要将 “目的IP地址” 的 与 “叶子节点” 中的 “子网掩码” 相与, 如果结果等于 “叶子节点” 中的IP地址, 则可以转发. 因为归根到底这个"唯一前缀" 和 CIDR前缀不是一个东西.

.2 ICMP

其中源抑制报文/地址模请求报文 已经不再使用
Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。有2种实现方案:基于UDP实现和基于ICMP实现。
基于UDP实现traceroute工作原理:
- 源主机向目的主机发送一连串的 IP 数据报(UDP报文)。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
- 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
- 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
- 之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。
.1 UDP与TCP
- IP中的检验和只检验IP数据报的首部, 但UDP的检验和检验 伪首部 + 首部 + 数据
- TCP的交互单位是数据块, 但仍说TCP是面向字节流的, 因为TCP仅把应用层传下来的数据看成无结构的字节流, 根据当时的网络环境组装成大小不一的报文段.
- 10秒内有1秒用于发送端发送数据, 信道利用率就是10%
- TCP报文段由首部和数据部分组成, 紧急位URG的作用就是将紧急指针所指示的数据放到数据部分的最前面
- 发送方的发送窗口受接收方的窗口字段 + 拥塞窗口cwnd共同决定, 取二者的更小值.
- TCP为每个连接设有一个持续计时器(Persistence Timer)用以打破死锁.
只要有一方收到零窗口通知, 就启动PT, 当PT时间到了以后就发送一个零窗口探测报文, 对方就回复当前的rwnd. 如果窗口仍为0就重设PT时间; 不为0就可以传送了, 这样就打破了死锁 - TCP的报文段的发送时机
a. 缓存中的数据达到MSS字节时, 就组装成TCP报文发送出去
b. 每次计时器期限到了就自动发送(但不能超过MSS字节)
c. 由发送方的进程指明要发送的报文段, 每次发送采用推push操作
d. nagle算法: 第一轮中, 先发送缓存中的第一个字节, 然后等待对第一个字节的确认再开始第二轮. 以后的每一轮都 将缓存中的数据一次发完(但不能超过MSS字节), 然后等待确认开始下一轮. 同时, 为了提升效率, 只要缓存中数据达到发送窗口的一半或MSS时 , 就不同等待上一轮的确认, 直接发送. - 快重传中, 禁止使用捎带确认, 对每个收到的报文立即确认. 若收到1, 2, 4号报文, 则持续发送2号的确认报文, 连续发送三次后, 发送方就会对3号报文启动快重传
- 路由器的队列通常采用FIFO, 但由于队列长度有限, 队列满了以后再收到的报文段会全部丢弃, 这就是尾部丢弃策略.尾部 丢弃策略会导致一连串分组的丢失, 应采用主动队列管理AQM, 即当队列长度达到某一警示值时, 便按某种算法丢弃个别报文段.
- TCP中新增了一个概念RTTS(smoothed).
第一次测量到RTT 样本时,RTTS值就取为所测量到的RTT样本值。
以后每测量到一个新的RTT 样本,就按下式重新 计算一次RTTS:

式中,0 <α<1, 当α越接近1, RTTS值受新的RTT样本影响较大, RTTS值更新较快. 推荐值为0.125 - TCP中新增了一个概念RTTD(Deviation). 是RTT的偏差的加权平均值
第一次测量到RTT样本时, RTTD值就取为所测量到的RTT样本值的一半
以后每测量到一个新的RTT 样本,就按下式重新 计算一次RTTD :

推荐值为0.25 - TCP中新增了一个概念RTO(Retransmission Time-Out) , 超时计时器中设置的就是RTO, RTO应略大于RTTS, 按照下式计算:

- karn算法 : 计算RTTS时, 只要报文段重传了 , 就不采用其RTT样本进行计算, 以避免不准确RTT样本的影响. 但如果网络拥塞, 所有报文段都是重传的, 而依据karn算法RTO竟然不进行更新, 这显然不合理
改进为 : 每重传一次, 就把RTO设为原来的一倍, 直到不发生重传时, 才采用公式计算RTO.
2.1 DNS系统
- 域名由点和标号(label)组成, 点分割的即是标号
- 每个标号不超过63个字符,总计不超过255个字符, 并且不区分大小写
- 顶级域名TLD(Top Level Domain)分为三类, 国家顶级域名nTLD, 通用顶级域名gTLD, 基础结构域名ID(Infrastructure Domain). 基础结构域名只有一个即 arpa. 用于反向域名解析, 因此被称为反向域名
- 2011年开始, 顶级域名TLD新增了一类新通用顶级域名(New gTLD)
- 域名服务器管辖范围(或有权限的)以区 (zone) 为单位, 而非域(domain)。各单位根据具体情况来划分自己管辖范围的区, 但在一个区中的所有节点必须是能够连通的。管辖一个区的服务器就是权限域名服务器, 后有详细叙述
实际上也很好理解, 例如对于一个com顶级域名, 其下辖的二级域名可能以亿单位, 这时我们当然不可能用一台com顶级域名服务器就全部管辖. 区≤域

- 域名服务器可以划分为四种类型: 根/顶级/权限/本地域名服务器.
其中根域名服务器知道所有顶级域名服务器的域名和ip, 即根域名服务器可以解析所有com/org等顶级域名.
根域名服务器一共有13台(A~M), 每台又由许多物理节点组成, 这些物理节点会分布在世界各地.
每台根域名服务器的IP地址和域名都是不同的, 但同一台内的所有物理节点的IP地址都是相同的, 因此采用了任播(anycast)技术后, 会自动寻找IP地址相同, 但距离最近的物理节点. - 每台域名服务器都会有一些分布式备份, 其中只能在主域名服务器中进行数据更改, 辅助域名服务器是备份.
- 每台域名服务器都启用了高速缓存
- 主机中也启用了高速缓存, 例如在开机后自动从本地域名服务器下载全部数据
.2 HTTP协议
- n个文档的传输时间为 : n X (2RTT + 文本传输时间), 因此HTTP1.1版本后使用了持续连接(Persistent Connection). 持续连接又分为非流水线方式(Without Pipelining)和流水线方式(With Pipelining).

- 非流水方式指的是, 客户端必须要收到上一个请求的响应后, 才能发出下一个请求.
相比非持续连接, n个文档传输能省去 n-1 个建立TCP连接的RTT.
n个文档的传输时间为 : (RTT +nRTT + n X 文本传输时间), - 流水方式中, 由于没有限制请求必须在响应之后发送, 因此文档传输的时间不定.最好的情况下, 客户端一次性发送完所有请求, 传输时间为2RTT+ n X 文本传输时间
- HTTP1.1 版本的一个缺点是, 即使客户端可以一次性发送多个请求, 但服务器只能按照请求的顺序逐一回复, 如果某一请求耗时特别长, 就会阻塞后面的请求
HTTP2 版本中, 服务器可以并行发回所有响应, 而不必按序. - HTTP2 版本中, 把所有报文划分为二进制编码的帧
.3 文件传送协议
基于TCP的文件传输协议FTP(File Transfer Protocol)和基于UDP的简单文件传输协议TFTP(Trivial)共同的特点是: 任何操作都要先获得一个本地副本文件, 任何修改都要先在副本文件上进行.
举个例子, A想要在B的某个文件最后新增一个字母, 则必须先要将文件传输到A, A完成修改后再回传覆盖.
.3.1 TFTP
TFTP主要有以下特点:
- 传输数据块大小为512字节。
- 只支持读取和写入两种操作。
- 没有用户身份验证、加密和完整性校验功能。
- 使用UDP作为传输层协议,不保证可靠性
- 默认使用69号端口。
TFTP的工作过程很像停止等待协议,发送完一个文件块后就等待对方的确认,确认时应指明所确认的块号。
发送完数据后在规定时间内收不到确认就要重发数据PDU,发送确认PDU的一方在规定时间内收不到下一个文件块,也要重发确认PDU。这样保证文件的传送不致因某一个数据报的丢失而告失败。
.4 P2P
- 在BT中, 使用"最稀有的优先(rarest first)" 技术优先请求最稀有的文件块, 避免之后收集不到
- 在BT中, 还运用了对等传输的思想. 如果A以最高速率向B发送文件, B 也会将A的优先级设为最高.
相关文章:
计算机网络之传输层 + 应用层
.1 CIDR地址块中还有三个特殊的地址块 a. 前缀 n 32 , 即32位IP地址都是前缀, 没有主机号, 这其实就是一个IP地址, 用于主机路由 b. 前缀 n 31 , 这个地址块中有两个IP地址, 主机号分别为0/1 , 这个地址块用于点对点链路 c. 前缀 n 0 , 用于默认路由使用二叉线索树查找转发…...
五、软考-系统架构设计师笔记-信息安全技术基础知识
信息安全技术基础知识 1、信息安全基础知识概述 信息安全的概念 信息安全包括 5 个基本要素: 机密性:确保信息不暴露给未授权的实体或进程。完整性:只有得到允许的人才能修改数据,并且能够判别出数据是否已被篡改。可用性:得到授权的实体在需要时可以…...
vue3+uniapp在微信小程序实现一个2048小游戏
一、效果展示 二、代码 <template><view class"page"><view class"top"><view class"score">得分:{{total}}</view><view class"time">用时:{{allTime}}s</view></view><view cl…...
常见的浏览器跨域解决方法
1. 前端方法:JSONP(仅适用于GET请求) JSONP(JSON with Padding)是一种利用<script>标签的src属性不受同源策略限制的特性来实现跨域数据请求的方法。JSONP通过在前端动态创建<script>标签,并将…...
飞桨模型转ONNX模型教程
文章目录 飞桨模型转ONNX模型教程1. ONNX简介2. Paddle2ONNX安装3. 获取Paddle2ONNX模型库4. 飞桨转ONNX教程4.1 飞桨训练模型导出为ONNX模型4.2 飞桨部署模型转为ONNX模型4.3 验证ONNX模型4.4 使用ONNX模型进行推理 5. 注意事项 飞桨模型转ONNX模型教程 1. ONNX简介 ONNX是一…...
vue使用swiper(轮播图)-真实项目使用
一、安装 我直接安装的vue-awesome-swiper": "^3.1.3"指定版本 npm install vue-awesome-swiper3.1.3 swiper --save二、vue页面使用,写了一个小demo <template><div class"vue-swiper"><h1>{{ msg }}</h1><…...
C++ 创建并初始化对象
创建并初始化C对象 当我们创建一个C对象时,它需要占用一些内存,即使我们写一个完全为空的类,类中没有成员,什么也没有,它至少也要占用一个字节的内存。但是我们类中有很多成员,它们需要存储在某地方&#…...
大数据可视化python01
import pandas as pd import matplotlib.pyplot as plt# 设置中文改写字体 plt.rcParams[font.sans-serif] [SimHei]# 读取数据 data pd.read_csv(C:/Users/wzf/Desktop/读取数据进行数据可视化练习/实训作业练习/瓜果类单位面积产量.csv ,encoding utf-8)#输出 print(data)…...
Java底层自学大纲_分布式篇
分布式专题_自学大纲所属类别学习主题建议课时(h)A 分布式锁001 Zookeeper实现分布式锁l-常规实现方式2.5A 分布式锁002 Zookeeper实现分布式锁II-续命&超时&羊群效应问题解决方案2.5A 分布式锁003 Zookeeper实现分布式锁III-基于Curator框架实现…...
Thread多线程(创建,方法,安全,通信,线程池,并发,并行,线程的生命周期)【全详解】
目录 1.多线程概述 2.多线程的创建 3.Thread的常用方法 4.线程安全 5.线程同步 6.线程通信 7.线程池 8.其它细节知识:并发、并行 9.其它细节知识:线程的生命周期 1.多线程概述 线程是什么? 线程(Thread)是一个程序内部的一条执行…...
自定义View中的ListView和ScrollView嵌套的问题
当我们在使用到ScrollView和ListView的时候可能会出现显示不全的问题。那我们可以进行以下分析 ScrollView在测量子布局的时候会用UNSPECIFIED。通过源码观察, 在ScrollView的onMeasure方法中 Overrideprotected void onMeasure(int widthMeasureSpec, int heightMe…...
支持向量机 SVM | 线性可分:硬间隔模型公式推导
目录 一. SVM的优越性二. SVM算法推导小节概念 在开始讲述SVM算法之前,我们先来看一段定义: 支持向量机(Support VecorMachine, SVM)本身是一个二元分类算法,支持线性分类和非线性分类的分类应用,同时通过OvR或者OvO的方式可以应用…...
【Unity实战】UGUI和Z轴排序那点事儿
如果读者是从Unity 4.x时代过来的,可能都用过NGUI这个插件(后来也是土匪成了正规军),NGUI一大特点是可以靠transform位移的Z值进行遮挡排序,然而这个事情在UGUI成了难题(Sorting Layer、Inspector顺序等因素…...
Vue/React 前端高频面试
说一说vue钩子函数 钩子函数是Vue实例创建和销毁过程中自动执行的函数。按照组件生命周期的过程分为:挂载阶段 -> 更新阶段 -> 销毁阶段。 每个阶段对应的钩子函数分别为:挂载阶段(beforeCreate,created,befor…...
[技巧]Arcgis之图斑四至范围批量计算
ArcGIS图层(点、线、面三类图形)四至范围计算 例外一篇介绍:[技巧]Arcgis之图斑四至点批量计算 说明:如下图画出来的框(范围标记不是很准) ,图斑的x最大和x最小,y最大,…...
C/C++工程师面试题(STL篇)
STL 中有哪些常见的容器 STL 中容器分为顺序容器、关联式容器、容器适配器三种类型,三种类型容器特性分别如下: 1. 顺序容器 容器并非排序的,元素的插入位置同元素的值无关,包含 vector、deque、list vector:动态数组…...
Effective Programming 学习笔记
1 基本语句 1.1 断言 在南溪看来,断言可以用来有效地确定编程中当前代码运行的前置条件,尤其是以下情况: 第三方工具库对输入数据的依赖,例如:minitouch库对Android版本的要求...
【MGR】MySQL Group Replication 背景
目录 17.1 Group Replication Background 17.1.1 Replication Technologies 17.1.1.1 Primary-Secondary Replication 17.1.1.2 Group Replication 17.1.2 Group Replication Use Cases 17.1.2.1 Examples of Use Case Scenarios 17.1.3 Group Replication Details 17.1…...
300分钟吃透分布式缓存-17讲:如何理解、选择并使用Redis的核心数据类型?
Redis 数据类型 首先,来看一下 Redis 的核心数据类型。Redis 有 8 种核心数据类型,分别是 : & string 字符串类型; & list 列表类型; & set 集合类型; & sorted set 有序集合类型&…...
思科网络设备监控
思科是 IT 行业的先驱之一,提供从交换机到刀片服务器的各种设备,以满足中小企业和企业的各种 IT 管理需求。管理充满思科的 IT 车间涉及许多管理挑战,例如监控可用性和性能、管理配置更改、存档防火墙日志、排除带宽问题等等,这需…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...
用鸿蒙HarmonyOS5实现国际象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...
Element-Plus:popconfirm与tooltip一起使用不生效?
你们好,我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip,产品要求是两个需要结合一起使用,也就是鼠标悬浮上去有提示文字,并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...
OpenGL-什么是软OpenGL/软渲染/软光栅?
软OpenGL(Software OpenGL)或者软渲染指完全通过CPU模拟实现的OpenGL渲染方式(包括几何处理、光栅化、着色等),不依赖GPU硬件加速。这种模式通常性能较低,但兼容性极强,常用于不支持硬件加速…...
STM32 低功耗设计全攻略:PWR 模块原理 + 睡眠 / 停止 / 待机模式实战(串口 + 红外 + RTC 应用全解析)
文章目录 PWRPWR(电源控制模块)核心功能 电源框图上电复位和掉电复位可编程电压监测器低功耗模式模式选择睡眠模式停止模式待机模式 修改主频一、准备工作二、修改主频的核心步骤:宏定义配置三、程序流程:时钟配置函数解析四、注意…...
