计算机网络之传输层 + 应用层

在这里插入图片描述

.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前缀不是一个东西.
在这里插入图片描述

  • 在IPv6中, ICMP + IGMP + ARP的功能集成到ICMPv6中.
  • IPv6首部的几个特点
  • 数据报由基本首部 + 有效载荷组成, 有效载荷中有 0 ~ n 个扩展首部, 例如分片扩展首部
  • 基本首部固定为40B, 所有可选项都放到扩展首部中, 因此基本首部中删去了首部长度字段
  • 基本首部中删去了 检验和 字段, 把差错检测功能交给传输层 , 以加快路由器处理数据报的速度
  • 基本首部中删去了 标识/标志/片偏移字段, 因为这些功能在分片扩展首部中实现
  • TTL 字段改名为 跳数限制, 更加切合实际
  • 基本首部中删去了 总长度 字段, 改用 有效载荷长度 字段
  • 基本首部中删去了 协议 字段 , 改用 下一个首部 字段
    当数据报没有扩展首部时, 下一个首部 字段作用与协议字段一样, 指明数据报应交付上层哪个协议 , 如6/17代表TCP/UDP
    当数据报有扩展首部时, 下一个首部 字段标识第一个扩展首部的类型

  • BGP协议同时运行在AS内部和之间, 运行在内部时是iBGP连接, 运行在AS之间时是eBGP连接.
  • BGP路由可在eBGP/iBGP上双向传输, 但只能由eBGP传向iBGP.

SDN的几个特点

  • 基于流的转发. 分组的转发可以基于网络层/运输层/链路层协议数据单元中的首部字段值, 最终的抓发规则由SDN控制器计算并放置到流表中. 区别与传统仅依靠目的IP地址转发.
  • 数据层面与控制层面解耦(decouple).
  • 控制层面位于路由器之外, 且用软件实现
  • 可编程的网络

SDN控制器从下到上的三个层次

  • 通信层, 大多采用openFlow协议
  • 状态管理层
  • 到网络控制程序层的接口

多协议标签交换MPLS
通过添加短的固定长度标签(MPLS首部)来引导数据包在链路层用硬件进行转发。MPLS使得数据包转发决策可以基于标签而不是基于包内的IP地址进行,从而加快了数据包的处理速度,并支持多种网络协议。

几个特点

.2 ICMP

在这里插入图片描述
其中源抑制报文/地址模请求报文 已经不再使用


Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。有2种实现方案:基于UDP实现和基于ICMP实现。

基于UDP实现traceroute工作原理:

  1. 源主机向目的主机发送一连串的 IP 数据报(UDP报文)。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
  2. 源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
  3. 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。
  4. 之后源主机知道了到达目的主机所经过的路由器 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的优先级设为最高.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/272328.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

办公电脑换成MacBookPro半年之后……

小白是从2008年开始接触电脑的&#xff0c;当时朋友给我注册的第一个QQ账号是2008年4月。 从此&#xff0c;小白一直认为电脑全部都是Windows系统。直到上大学那年&#xff0c;看到了外教老师的MacBookPro…… 折腾电脑的开始居然是起源于诺基亚手机&#xff0c;给半智能S40的…

根据QQ号获取暗恋的人的全部歌单

文章目录 前言一、成果展示二、后端开发流程三、前后端障碍与难点解决四、待扩展内容五、总结 前言 本人喜欢使用QQ音乐听歌&#xff0c;并且喜欢点击好友栏目观看最近在听&#xff0c;了解暗恋的人最近在听什么歌曲&#xff0c;知己知彼&#xff0c;百战不殆。但是每次都需要…

Ainx的消息封装

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于Ainx系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列…

【排序算法】深入理解归并排序算法:从原理到实现

目录 1. 引言 2. 归并排序算法原理 3. 归并排序的时间复杂度分析 4. 归并排序的应用场景 5. 归并排序的优缺点分析 5.1 优点&#xff1a; 5.2 缺点&#xff1a; 6. Java、JavaScript 和 Python 实现归并排序算法 6.1 Java 实现&#xff1a; 6.2 JavaScript 实现&…

OpenCV 4基础篇| OpenCV图像的裁切

目录 1. Numpy切片1.1 注意事项1.2 代码示例 2. cv2.selectROI()2.1 语法结构2.2 注意事项2.3 代码示例 3. Pillow.crop3.1 语法结构3.2 注意事项3.3 代码示例 4. 扩展示例&#xff1a;单张大图裁切成多张小图5. 总结 1. Numpy切片 语法结构&#xff1a; retval img[y:yh, x…

Vue开发实例(六)实现左侧菜单导航

左侧菜单导航 一、一级菜单二、二级菜单三、三级菜单1、加入相关事件 四、菜单点击跳转1. 创建新页面2. 配置路由3. 菜单中加入路由配置4、处理默认的Main窗口为空的情况 五、动态左侧菜单导航1、动态实现一级菜单2、动态实现二级菜单 一、一级菜单 在之前的Aside.vue中去实现…

C#实现快速排序算法

C#实现快速排序算法 以下是C#中的快速排序算法实现示例&#xff1a; using System;class QuickSort {// 快速排序入口函数public static void Sort(int[] array){QuickSortRecursive(array, 0, array.Length - 1);}// 递归函数实现快速排序private static void QuickSortRecu…

结合大象机器人六轴协作机械臂myCobot 280 ,解决特定的自动化任务和挑战!(上)

项目简介 本项目致力于探索和实现一种高度集成的机器人系统&#xff0c;旨在通过结合现代机器人操作系统&#xff08;ROS&#xff09;和先进的硬件组件&#xff0c;解决特定的自动化任务和挑战。一部分是基于Jetson Orin主板的LIMO PPRO SLAM雷达小车&#xff0c;它具备自主导航…

2.Rust变量

变量的声明 let关键字 在Rust中变量必须要先声明才能使用&#xff0c;let关键字用于声明变量并将一个值绑定到该变量上。如下: fn main() {let var_name:i32 123123;println!("{}",var_name) //println! 是一个宏&#xff08;macros&#xff09;&#xff0c;可以…

C#与欧姆龙PLC实现CIP通讯

参考文档&#xff1a; 欧姆龙PLC使用-CSDN博客 CIP通讯介绍&#xff08;欧姆龙PLC&#xff09;-CSDN博客 使用NuGet添加引用&#xff1a;CIPCompolet 基础参考我的CIP协议介绍&#xff0c;默认TCP端口为&#xff1a;44818 类NXCompolet 类的功能可以在安装PLC开发软件后帮…

【Transformer】single self-attention的理解与计算步骤

参考B站Enzo_Mi老师 【self-Attention&#xff5c;自注意力机制 &#xff5c;位置编码 &#xff5c; 理论 代码】https://www.bilibili.com/video/BV1qo4y1F7Ep?vd_source19425b683f74eeac34bde8ddf968a0d6 建议大家去看老师的原视频&#xff0c;讲解非常清晰&#xff0c;这里…

类和对象-继承

师从黑马程序员 基本语法 有些类与类之间存在特殊的关系&#xff0c;例如&#xff1a; 定义这些类时&#xff0c;下一级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性。 这时候我们就可以考虑继承技术&#xff0c;减少重复代码 语法&#xff1a;class 子类&…

【鸿蒙 HarmonyOS 4.0】应用状态:LocalStorage/AppStorage/PersistentStorage

一、介绍 如果要实现应用级的&#xff0c;或者多个页面的状态数据共享&#xff0c;就需要用到应用级别的状态管理的概念。 LocalStorage&#xff1a;页面级UI状态存储&#xff0c;通常用于UIAbility内、页面间的状态共享。AppStorage&#xff1a;特殊的单例LocalStorage对象&…

Android Studio下载gradle超时问题解决

方法一 1. 配置根目录的setting.gradle.kts文件 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urluri ("https://maven.aliyun.com/repos…

【Pytorch、torchvision、CUDA 各个版本对应关系以及安装指令】

Pytorch、torchvision、CUDA 各个版本对应关系以及安装指令 1、名词解释 1.1 CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由NVIDIA开发的用于并行计算的平台和编程模型。CUDA旨在利用NVIDIA GPU&#xff08;图形处理单元&#xff09;的强大计算…

SpringCloudGateway全局过滤器

文章目录 全局过滤器的作用自定义全局过滤器过滤器执行的顺序 上一篇 Gateway理论与实践 介绍的过滤器&#xff0c;网关提供了31种&#xff0c;但每一种过滤器的作用都是固定的。如果我们希望拦截请求&#xff0c;做自己的业务逻辑则没办法实现。 全局过滤器的作用 全局过滤器的…

App前端开发跨平台框架比较:React Native、Flutter、Xamarin等

引言 移动应用开发领域的跨平台框架正在不断演进&#xff0c;为开发者提供更多选择。在本文中&#xff0c;我们将比较几个流行的跨平台框架&#xff1a;React Native、Flutter和Xamarin等。讨论它们的优缺点、适用场景以及开发体验。 第一部分 React Native: 优缺点、适用场景…

大模型时代下的自动驾驶研发测试工具链-SimCycle

前言&#xff1a; 最近OpenAI公司的新产品Sora的发布&#xff0c;正式掀起了AI在视频创作相关行业的革新浪潮&#xff0c;AI不再仅限于文本、语音和图像&#xff0c;而直接可以完成视频的生成&#xff0c;这是AI发展历程中的又一座重要的里程碑。AI正在不断席卷着过去与我们息…

接口自动化框架(Pytest+request+Allure)

前言&#xff1a; 接口自动化是指模拟程序接口层面的自动化&#xff0c;由于接口不易变更&#xff0c;维护成本更小&#xff0c;所以深受各大公司的喜爱。 接口自动化包含2个部分&#xff0c;功能性的接口自动化测试和并发接口自动化测试。 本次文章着重介绍第一种&#xff0c…

python学习the sixth day

python函数进阶 一、函数多返回值 二、函数的多种参数使用 1.位置参数 2.关键字参数 3.缺省参数 设置默认值&#xff0c;必须放在最后面 4.不定长参数 4.总结 三、匿名函数 1.函数作为参数传递 这是计算逻辑的传递&#xff0c;而非数据的传递 2.lambda匿名函数 python文件操…