###1.循环冗余检验的原理
例题:
解:
根据多项式的最高次幂得出冗余码的长度n=6。
然后对生成多项式 G ( x ) = x 6 + x 5 + x + 1 G(x)=x^6+x^5+x+1 G(x)=x6+x5+x+1补全得到除数
G ( x ) = 1 ∗ x 6 + 1 ∗ x 5 + 0 ∗ x 4 + 0 ∗ x 3 + 0 ∗ x 2 + 1 ∗ x 1 + x 0 G(x)=1*x^6+1*x^5+0*x^4+0*x^3+0*x^2+1*x^1+x^0 G(x)=1∗x6+1∗x5+0∗x4+0∗x3+0∗x2+1∗x1+x0
那么除数就是每一项前面的系数:除数=1100011
被除数为信息位+n个0,即信息位=1101110010001000000
余数即为冗余码,若长度不够,前面补0凑。
RIP协议距离向量算法-如何更新路由表
题目:假定网络中路由器B中的路由表有以下项目:
B表:
目的网络 | 距离 | 下一跳路由 |
---|---|---|
N1 | 7 | A |
N2 | 2 | C |
N6 | 8 | F |
N8 | 4 | E |
N9 | 4 | F |
现在B收到C发过来的路由信息:
c表:
目的网络 | 距离 |
---|---|
N2 | 4 |
N3 | 8 |
N6 | 4 |
N8 | 3 |
N9 | 5 |
解:求出路由表B更新后的路由表:
1.先将C中的距离都加1
目的网络 | 距离 |
---|---|
N2 | 4+1=5 |
N3 | 8+1=9 |
N6 | 4+1=5 |
N8 | 3+1=4 |
N9 | 5+1=6 |
更新B后的表
目的网络 | 距离 | 下一跳路由 | 解释 |
---|---|---|---|
N1 | 7 | A | C中没有N1的信息,那么则 不需要更新 |
N2 | 5 | C | 下一跳相同,无条件更新 |
N3 | 9 | C | B表中没有N3的信息,而C表中有N3,则需要将N3插入B表 |
N6 | 5 | C | B经过C到N6的距离为5,小于B到N6的距离8,需要更新,并将下一跳改为C |
N8 | 4 | E | B到N8的距离为4,B经过C到N8的距离也为4则不更新 |
N9 | 4 | F | B到N9的距离为4,小于经过C到N9的距离6,不更新 |
A类:1.0.0.0-126.0.0.0 网络号8位,主机号24
B类:128.0.0.0-191.255.0。0 网络号16位,主机号16位
C类:192.0.0.0-223.255.255.0 网络号24位,主机号8位
子网需要向主机号借位来增加其网络号的长度来增加子网的数目
例题1(主机号数目相同):
解:
首先求出需要借多少位(n)的主机号: 2 n − 2 ≥ 6 , 那 么 n = 3 2^n-2\geq 6 ,那么n=3 2n−2≥6,那么n=3
则子网掩码为:255.255.255.11100000=255.255.255.224
每个子网的网络地址为:193.160.80.00100000=193.160.80.32
该子网的广播地址:主机号全1,193.160.80.00111111=193.160.80.63
主机地址范围:193.160.80.33—62,主机号个数: 2 5 − 2 = 30 2^5-2=30 25−2=30
193.160.80.01000000=193.160.80.64
193.160.80.10000000=193.160.80.128
193.160.80.10100000=193.160.80.160
193.160.80.11000000=193.160.80.192
193.160.80.11100000=193.160.80.224
例题2(主机号数目不同):
解:
根据所需主机数目确定主机号所需要的的位数
子网N1: 2 n − 2 > = 120 2^n-2>=120 2n−2>=120,那么n=7,8-7=1,则网络号可借到1位。网络号位数一共为24+1=25
第一个子网首地址为:14…24.74.00000000/25.主机号范围为:14.24.74.0000001-14.24.74.01111110
子网N2: 2 n − 2 > 60 2^n-2>60 2n−2>60,那么n=6,8-6=2,则网络号可借到2位。网络号位数一共为24+2=26.
第二个子网首地址为:14.24.74.10000000/26。
子网N3: 2 n − 2 ≥ 10 2^n-2\geq10 2n−2≥10 那么n=4.网络号一个为24+4=28
第三个子网首地址为;14.24.74.11000000/28
原理部分:
算法分为4个部分:
1.慢开始:在慢开始阶段,拥塞窗口每个轮次翻倍(x2),直到达到了慢开始门限(阈值),如果超过阈值,则窗口只能设置为阈值
2.拥塞避免:拥塞避免阶段,拥塞窗口每个轮次·+1,直到超时。这时将拥塞窗口置为1,慢开始门限设为超时的一半
3.快重传:当接收到了3-ACK(收到了3个重复的报文,有数据包丢失),执行快重传算法,下一个轮次:将拥塞窗口设置为当前窗口的一半,慢开始门限也设置为该值。即拥塞窗口大小=慢开始门限,那么就是执行拥塞避免
4.快恢复
需要知道三个概念:轮次n,拥塞窗口cwnd,慢开始门限ssthresh
例题
轮次 | 拥塞窗口cwnd | 原因 |
---|---|---|
1 | 2 | |
2 | 4 | |
3 | 8 | |
4 | 10 | 达到了慢开始阈值 |
5 | 11 | 启动拥塞避免算法,每次加1 |
6 | 12 | |
7 | 13 | |
8 | 14 | |
9 | 15 | |
10 | 16 | 发生超时,置cwnd为1,阈值设为超时窗口的一半:8 |
11 | 1 | |
12 | 2 | |
13 | 4 | |
14 | 8 | 达到阈值,启动拥塞避免算法 |
15 | 9 |
1.序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。
2.确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。
3.确认ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效
4.同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。
5.终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接
PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号
1)首先客户端向服务器端发送一段TCP报文,其中:
标记位为SYN,表示“请求建立新连接”;序号为Seq=X(X一般为1);随后客户端进入SYN-SENT阶段。
(2)服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段。并返回一段TCP报文,其中:
标志位为SYN和ACK,表示“确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”(即告诉客户端,服务器收到了你的数据);序号为Seq=y;确认号为ack=x+1,表示收到客户端的序号Seq并将其值加1作为自己确认号ack的值;随后服务器端进入SYN-RCVD阶段。
(3)客户端接收到来自服务器端的确认收到数据的TCP报文之后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT阶段。并返回最后一段TCP报文。其中:
标志位为ACK,表示“确认收到服务器端同意连接的信号”(即告诉服务器,我知道你收到我发的数据了);序号为Seq=x+1,表示收到服务器端的确认号ack,并将其值作为自己的序号值;确认号为ack=y+1,表示收到服务器端序号Seq,并将其值加1作为自己的确认号ack的值;随后客户端进入ESTABLISHED阶段。服务器收到来自客户端的“确认收到服务器数据”的TCP报文之后,明确了从服务器到客户端的数据传输是正常的。结束SYN-SENT阶段,进入ESTABLISHED阶段。
连接的释放必须是一方主动释放,另一方被动释放
(1)首先是客户端想释放连接,向服务器端发送TCP报文:
标记位为FIN=1,表示“请求释放连接”,seq=u。
随后客户端进入FIN-WAIT-1阶段,即半关闭阶段。并且停止向服务器端发送数据(这里不发送的是正常连接时传输的数据(非确认报文),而不是一切数据,所以客户端仍然能发送ACK确认报文),但是客户端仍然能接受从服务器端传输过来的数据。
(2)服务器端接受到了客户端的释放连接请求,随后服务器端结束ESTABLLISHED(建立)阶段,进入CLOSE-WAIT阶段(半关闭)并返回一段TCP报文:
ACK=1,表示接受到了客户端发送的连接请求,序号为seq=v;ack=u+1,表示是在收到客户端报文的基础上,将序号seq的值+1作为本报文段确认号ack的值。
随后服务器端开始准备释放服务器端到客户端的连接。
(3)客户端收到了服务器端发出的报文后,确认了服务器收到了客户端的发出的释放连接请求。随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段。等待服务器端发送连接释放报文。
(4)服务器端将最后的数据发送完毕后,就向客户端发送连接释放报文:
FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w.
发送完连接释放的报文后,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
(5)客户端收到服务器的连接释放请求报文后,必须要发出确认报文:
ACK=1,ack=w+1,seq=u+1。
此时,客户端就进入TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2**MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
而服务器端接受到客户端发出的确认ACK后,立即进入CLOSED转态。
问题:为什么连接的时候是三次握手,而关闭的时候是四次挥手?
答:因为当服务器端收到客户端的连接建立请求SYN=1后,服务器daunt可以直接发送SYN+ACK报文进行应答,其中SYN是用来同步的,ACK是用来应答确认的。
而在关闭连接时,当服务器端收到FIN=1(连接释放请求)后,不会立即关闭SOCKET,只能先回复一个ACK报文,告诉客户端,你的请求我收到了。但是得等我服务器端的所有 报文都发送完了,我才能发送FIN报文,因此不能一起发送,需要四次握手。
例题:
rdt1.0是默认在可靠信道上的可靠数据传输
底层信道完全可靠:不会发生bit错误,不会丢弃分组
发送方和接受方的FSM独立
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ce5TmM0G-1610332720078)(计算机网络复习.assets/image-20210110105301513.png)]
默认信道上会产生bit错误,不产生丢失分组的情况。
底层信道可能会翻转分组中的bit
解决方法:利用效验和检测bit错误
如何从错误中恢复?
解决方法:
基于这种重传机制的rdt协议称为ARQ(Automatic Repeat ReQuest)协议
总结:rdt2.0引入了新的机制:
1.差错检验
2.接受方反馈控制消息ACK/NAK
3.重传
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDyL2b4H-1610332720079)(计算机网络复习.assets/image-20210110110123342.png)]
###6.3 rdt2.1
rdt2.0有什么缺陷?:如返回的ACK/NAK分组受损,发送方不理解接受方是否收到。
解决方法:当发送方收到收损的ACK和NAK分组时,重发当前的分组
在解决这个问题的时候,引入了新的问题:接受方接受到了冗余的分组,无法判断是新的分组还是重传的分组。于是需要给分组添加序号字段。
解决方法:
注意:ACK和NAK不需要明确的序号,因为假设信道不丢失分组的。发送方知道所接受的ACK或NAK是对应最近发送分组的响应。
进一步改进:
接收方接收到受损分组时,不发送NAK,改为发送一个对前一个正确接收分组的ACK.
发送方接收到对同一个分组的两个ACK,可以判断出接收方没有正确收到被两次确认的那一个分组。
默认:会出现bit错误,会丢分组,
因为会丢分组,所以需要引入超时重发机制。
即:发送方发送一个数据 后,如果一定时间内未收到ACK,则重传分组。
实现:每发送一个分组,就设置开启一个递增(减)计数定时器,超时了重发分组。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9dLRPgE0-1610332720080)(计算机网络复习.assets/image-20210110130350728.png)]
##8.最短路径(Dijkstra算法)
描述:
dist[]数组代表 源点到其余各点的距离
path[]数组记录当前点的上一个顶点
set[]数组表示哪些点已经被算出来了,即已经处在最短路径中了
速率:指连接在计算机网络上的主机在数字信道上传送数据的速度.在计算机网络中,通常把最高速率称为带宽。
也称为数据率或比特率。单位b/s
Kb/s(k=1000),Mb/s(m= 1 0 6 10^6 106),Gb/s( 1 0 9 10^9 109),
文件数据大小数据量转换。1KB=8bitx1024=8192bit
发送时延=数据长度/速率
传播时延=信道的长度/电磁波在信道中的传播速率。
处理时延:
排队时延:
信道的极限数据传输速率(也称为信道容量)C= w l o g 2 ( 1 + S / N ) wlog_2(1+S/N) wlog2(1+S/N) 单位:b/s
其中w为信道的带宽,S为信道所传输的平均功率。N为信道内部的高斯噪声功率
信噪比(dB)= 10 l o g 10 ( S / N 10log_{10}(S/N 10log10(S/N)
发送窗口为1
发送窗口 1 ≤ W T ≤ 2 n − 1 1\leq W_T\leq 2^n-1 1≤WT≤2n−1,其中n是采用n位bit对帧进行编号
发送窗口 W T ≤ 2 n W_T\leq2^n WT≤2n/2
题目类型求信道利用率:
信道利用率最大= 连 续 发 送 的 帧 数 t ∗ 每 一 帧 的 传 输 时 间 连 续 发 送 的 帧 数 t ∗ 每 一 帧 的 传 输 时 间 + 单 程 传 播 时 间 \frac{连续发送的帧数t*每一帧的传输时间}{连续发送的帧数t*每一帧的传输时间+单程传播时间} 连续发送的帧数t∗每一帧的传输时间+单程传播时间连续发送的帧数t∗每一帧的传输时间
信道利用率= 连 续 发 送 的 帧 数 t ∗ 每 一 帧 的 传 输 时 间 连 续 发 送 的 帧 数 t ∗ 每 一 帧 的 传 输 时 间 + 单 程 传 播 时 间 ∗ 2 \frac{连续发送的帧数t*每一帧的传输时间}{连续发送的帧数t*每一帧的传输时间+单程传播时间*2} 连续发送的帧数t∗每一帧的传输时间+单程传播时间∗2连续发送的帧数t∗每一帧的传输时间
其中 t ≥ 2 n t\geq 2^n t≥2n
信道利用率= 连 续 发 送 的 帧 数 t ∗ 每 一 帧 的 传 输 时 间 连 续 发 送 的 帧 数 t ∗ 每 一 帧 的 传 输 时 间 + 单 程 传 播 时 间 ∗ 2 \frac{连续发送的帧数t*每一帧的传输时间}{连续发送的帧数t*每一帧的传输时间+单程传播时间*2} 连续发送的帧数t∗每一帧的传输时间+单程传播时间∗2连续发送的帧数t∗每一帧的传输时间
其中 t ≥ 2 n t\geq 2^n t≥2n
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道