草庐IT

计算机网络期末考试考点

柳和666 2023-04-09 原文

1.循环冗余校验码

K个信息码 + R位校验码=校验码总长;

R = 生成多项式最高次幂 

余数的位数 = 除数的位数-1 = 校验码的位数

除数=多项式二进制码(x幂的系数)

(例: = 1101)

 

模2除法余数的高位为1,便可商1 之后上下做异或,否则商0补0

 

2.路由表转发
路由转发”顾名思义,分为“路由”和“转发”两步:

● 路由选择:确定数据报走那一条路径,即路由器根据不同的算法生成动态的路由表。

● 分组转发:路由器根据转发表将用户的IP数据从合适的端口报转发出去。

注意:路由表是由路由算法生成的,转发表是根据路由表生成的。但是在讨论路由选择的原理时,往往不去区分路由表和转发表的区别,同一使用路由表一词。

路由选择协议分为静态路由和动态路由,那什么是静态路由,什么是动态路由呢?

● 静态路由(非自适应路由算法):管理员手动配置路由信息。如果网络拓扑或链路状态发生变化时,需要管理员手动修改路由信息;不适合大型和复杂的网络环境。

● 动态路由(自适应路由算法):路由信息由路由器根据路由算法动态生成,这些路由信息会在一定时里面更新,以适应不断变化的网络,随时获取最优的寻路效果;常动态路由算法有距离-向量路由算法和链路状态路由算法。

(1)首先从IP数据报首部提取出目的主机的IP地址D,得出其所在的网络N。

(2)若N就是与此路由器直接相连的某个网络,则进行直接交付,不需要经过其它的路由器进行转发,直接把数据报交付给目的主机。 否则就执行(3)

(3)若路由表中有目的地址为D的特定主机路由,则把数据报传给路由表中所指明的下一跳路由器。否则执行(4)

(4)若路由表中有到达网络N的路由,则把数据报传给路由表中所指明的下一跳路由器。否则执行(5)

(5)若路由表中有一个默认路由,则把数据报传给默认路由所指明的默认路由器。否则执行(6)

(6)报告转发分组出错。


 

3.距离-向量路由算法(RIP)
路由信息协议 RIP (Routing Information Protocol) 是内部网关协议 IGP 中最先得到广泛使用的协议

在一个自治系统(计算机网络中的自治系统是指能够自主决定在本系统中应采取某种路由协议的单位)内,RIP 是一种分布式的,基于距离向量的路由选择协议

从一个路由器到直接连接的网络的距离定义为 1

从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1

RIP 协议中的“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加 1

这里的“距离”实际上指的是“最短距离”,RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”

RIP 允许一条路径最多只能包含 15 个路由器,“距离”的最大值为 16 时即相当于不可达。可见 RIP 只适用于小型互联网

RIP 不能在两个网络之间同时使用多条路由。RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由

 

上图:R1距离网1和网2的距离都是1,而R1距离网3的距离是2,距离网4的距离是3


4.拥塞控制

为什么要用拥塞控制

因为由于一些原因(接收过多的报文,超过路由器的处理能力)路由器可能会丢弃一些报文,然而定时器这个时候就会处于超时状态,发送端就会重新发送报文,这样反而会恶性循环,加重路由器的拥塞。那么为了控制这种情况设计人员在TCP的加入了拥塞控制功能。

分析有哪些方法可以解决这种情况:

1.在发生拥塞的时候,路由器进行流量限制

2.发送端减慢自己发送报文的速度
显然,TCP协议是利用第二种,控制发送端的发送报文速率进行拥塞控制的。

几个名词的认识:

Sender window = Min {rwnd, cwnd}–发送窗口–缓存

rwnd: receiver’s advertised window (接收方宣告窗口)—— a receiver-side limit——流量控制

cwnd: congestion window(拥塞窗口) —— a sender-side limit(反映了网络的拥塞状况)——拥塞控制

慢启动和拥塞避免

快速重传和快速恢复

ssthresh:人为设置的阈值

拥塞控制的过程:

建立一条新的TCP连接以后,执行慢启动:

···初始状态cwnd=1(1个最大报文段)

···发送方只允许发送1个TCP报文段(因为发送窗口=1)------慢启动实际并不慢,每过1个RTT,cwnd就翻倍,呈2的指数增长(当窗口为1时发送一个报文,经过一个RTT后,窗口大小加1为2,当窗口大小为2时发送两个报文,经过一个RTT时,窗口加2,是每当收到一个报文窗口就加1,以此类推)

·等待ACK(即接收端接收报文后会返回一个指定报文)

···每收到1个ACK,

···发送窗口向右滑动1个报文段的长度

···cwnd+1 发送方连续发送2个报文段

···直到发送窗口大小=ssthresh(慢启动阈值)

·在慢启动阶段,拥塞窗口以指数形式增长,要避免发生拥塞,当拥塞窗口达到某个值后,必须减慢拥塞窗口的增长规律

·当发送窗口大小=ssthresh时,发送方进入拥塞避免阶段

·在这个阶段中,只有当窗口中所有报文都确认后,拥塞窗口+1

·实质上:每收到1个ACK,cwnd=cwnd+1/ cwnd

·当RTT较大时,可以认为是每隔一个RTT,拥塞窗口cwnd+1 à 加性增加(Addictive Increase)

·拥塞避免直到出现重传定时器超时,即发生拥塞

·推测拥塞:超时重传–因为重传定时器超时

·ssthresh(慢启动阈值)设置为当前cwnd(拥塞窗口)的一半

·即ssthresh = [cwnd / 2]

·cwnd(拥塞窗口)= 1

·重新执行慢启动:也就是说如果还出现报文超时,那么ssthresh就要一直减半1

·如果不是超时,而是连续收到3个ACK,处理方式是:

·ssthresh(慢启动阈值)设置为当前cwnd(拥塞窗口)的一半–这个与上面的操作是一样的

·cwnd=当前阈值–但是这里就与上面不同了,而是设置为当前慢启动阈值,连续收到3个ACK,说明1个报文段可能丢失了,但后面的几个报文段又安全到达开始拥塞避免阶段

 

有关计算机网络期末考试考点的更多相关文章

  1. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是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,

  2. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  3. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  4. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  5. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  6. ruby - 使用 Ruby,计算 n x m 数组的每一列中有多少个 true 的简单方法是什么? - 2

    给定一个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

  7. arrays - 计算数组中的匹配元素 - 2

    给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[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

  8. ruby - 检查网络文件是否存在,而不下载它? - 2

    是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby​​不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案

  9. ruby - 404 未找到,但可以从网络浏览器正常访问 - 2

    我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT

  10. ruby-on-rails - 如何计算 Ruby/Rails 中 JSON 对象的数量 - 2

    Ruby中如何“一般地”计算以下格式(有根、无根)的JSON对象的数量?一般来说,我的意思是元素可能不同(例如“标题”被称为其他东西)。没有根:{[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]}根包裹:{"posts":[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]} 最佳答案 首先,withoutroot代码不是有效的json格式。它将没有包

随机推荐