最近在二刷《计算机网络——自顶向下》做点笔记,加深印象,书不在手边时也能有个参考。之前的章节会陆续补充。
两种链路层信道:
节点(node):运行链路层协议的任何设备。如主机、路由器、交换机、Wi-Fi接入点
链路(link):连接相邻节点的通信信道
链路层主体部分在网络适配器(网络接口卡NIC),其核心是链路层控制器。
大部分链路层服务在硬件(链路层控制器)中实现:
部分链路层在软件中实现:
链路层是软硬件结合体, 是协议栈中软件与硬件交接的地方。
通常,要保护网络层数据报以及链路层帧首部。即使采用了差错检测比特,还是可能有未检出比特出差。
三种技术:
偶校验:数据+校验比特共偶数个1
奇校验:数据+校验比特共奇数个1
实际上差错经常以“突发”的方式聚集在一起,一旦出错通常会有多个比特一起出错。单比特奇偶检验保护的一帧中未检出差错概率达50%。
可以检测并纠正单个比特差错(包括校验比特本身)
d比特数据,按 k 比特划分为一个个整数,把这些整数加起来。
因特网检验和将数据按16bit整数对待,求和,取反码(每一位取反)。接收方对接收到的数据(包括检验和)求和取反,检测是否全1。
TCP和UDP对所有字段包括首部和数据字段都计算因特网检验和。
也称为多项式编码,将发送比特串看成是系数是0和1的多项式。每个CRC标准都能检测
点对点链路:
广播链路:
多路访问信道:
多路访问协议:规范共享广播信道上的传输行为,协调活跃节点的传输
理想情况下,对于速率为 R bps的广播信道:
TDM将时间划分为时间帧,每个时间帧 time frame 分为N个时隙 slot。TDM 消除了碰撞、公平。但单节点只能利用 R/N 带宽,即使只有一个发送节点。且节点必须等待轮次。
FDM 优缺点同 TDM:消除碰撞,单节点最大 R/N 带宽。
CDMA 对每个节点分配不同的编码,同时传输,不在乎其他节点干扰。CDMA编码类似于 TDM的时隙和FDM的频率。军用到民用蜂窝电话。
节点总是以全部速率 R 发送。碰撞时,等待随机时延,反复重发,直到无碰撞通过。
以太网是CSMA协议。
最大效率: 一个节点成功传输的概率 p*(1-p)^(N-1)
N个节点活跃节点,时隙 ALOHA的效率是 Np*(1-p)^(N-1)
当 N趋向于∞,最大效率 37%。另外37%空闲,另外26%碰撞。
非时隙、完全分散。收到网络层数据报,立即发送,如果碰撞,发完之后立即以概率p重传。
ALOHA 最大效率是时隙ALOHA的一半。
载波侦听:节点发送前先听信道,如果有其他节点正在发送,则等待一段时间没有传输后再开始发送。
碰撞检测:检测到碰撞,立即停止传输。
这两个规则包含在CSMA和CSMA/CD中。
为什么有载波侦听还会碰撞?因为传播时延。A节点发送数据,但传播到B节点需要一段时间,这时B节点也开始发送。传播时延越长,碰撞机会越大。
CSMA没有碰撞检测,即使碰撞也会继续发送完。
CSMA/CD 检测到碰撞立即停止传输。
随机时间量的选取:以太网和DOCSIS使用二进制指数后退算法。一个帧经历n次碰撞后,随机从 {0...2^n - 1} 中选择K。对于以太网,等待的时间是发送512比特所需时间的K倍。
定义:大量活跃节点,大量帧要发送
传输时间指传是一个最大长度以太网帧的时间,对于10M以太网,约为1.2ms。
效率=1/(1+5*传播时延/传输时间)
6.3 节中对于速率为 R bps的广播信道的理想特性:
随机接入的 ALOHA 和 CSMA 具备第1个特性,但不具备第2个特性。轮流协议可以满足第2个特性。
两种重要的轮流协议:
电缆接入网用到了信道划分协议、随机接入协议和轮流协议。
CMTS:Cable Modem Termination System,电缆调制解调器端接系统
DOCSIS:Data Over Cable Service Interface,CMTS:数据经电缆服务接口
DOCSIS 使用 FDM 将下行(CMTS到Modem)和上行(Modem到CMTS)划分为多个频率信道。每个上下行均为广播信道。下行只有CMTS发送,没有多路访问问题;上行可能出现碰撞。每个上行信道划分为时间间隔(类TDM),CMTS在下行信道通过MAP控制报文显式准许各个Modem在特定微时隙进行传输。
为了通知CMTS有数据发送,Modem在微时隙的特定间隔内向CMTS发送请求帧。请求帧以随机接入方式传输,不能帧听信道是否空闲,也没有碰撞检测,如果没有在下一个下行控制报文收到响应,则以二进制指数回退延缓重发。
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in
给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at
Ruby中如何“一般地”计算以下格式(有根、无根)的JSON对象的数量?一般来说,我的意思是元素可能不同(例如“标题”被称为其他东西)。没有根:{[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]}根包裹:{"posts":[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]} 最佳答案 首先,withoutroot代码不是有效的json格式。它将没有包
目标我正在尝试计算自给定日期以来周的距离,而无需跳过任何步骤。我更喜欢用普通的Ruby来做,但ActiveSupport无疑是一个可以接受的选择。我的代码我写了以下内容,这似乎可行,但对我来说似乎还有很长的路要走。require'date'DAYS_IN_WEEK=7.0defweeks_sincedate_stringdate=Date.parsedate_stringdays=Date.today-dateweeks=days/DAYS_IN_WEEKweeks.round2endweeks_since'2015-06-15'#=>32.57ActiveSupport的#weeks
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c