0-Preview

我的计网学习路线是,跟着课本以及网课快速把概念过一遍,然后上手cs144的lab。有lab经验,无论是考研还是工作,都大有益处。

时代变了,现在没几个项目或者lab经验,别说月薪上万了,五千都够呛。

1-数据链路层概述

1.1-使用点对点信道的数据链路层

三个重要问题:

封装成帧:在数据链路层上会给数据添加 帧头和帧尾
差错检测:在帧尾添加检错码来防止误码 CRC
可靠传输:若发生误码,则丢弃后若向上层提供的是可靠服务,则会重新接受该数据

此处与谢希仁所著第八版《计算机网络》中的描述有所不同。等我回学校拿到课本以后对比一下,在这里进行更改。

1.2-使用广播信道的数据链路层(wifi)

引入mac地址,来确保信息会传给指定的机器

共享式以太网的媒体接入控制协议 CSMA/CD
802.11局域网的媒体接入控制协议 CSMA/CA:载波监听 多点接入/碰撞避免

2-封装成帧

image-20220330113047331

2.1-封装成帧

image-20220330114155368

并不是所有协议格式都有帧定界标志,例如以太网V2的MAC帧格式:
image-20220330114401306

该帧是通过在物理层中每个帧前面添加一个八字节的前导码:
image-20220330114521613

3-差错检测

比特差错:传输过程中,1变成0或者相反。
在一段时间内,传输错误比特占总数的比率称为 误码率BER(Bit Error Rate)

3.1-差错检测码

奇偶校验

奇校验:比特1的数量为奇数则 置1
偶校验:比特1的数量为偶数则 置0

只能处理 n位误码,不能查出来 2N 误码。

循环冗余校验CRC

相对很安全的方式,但是数据很短的时候很容易爆破出来。

1、双方约定一个 生成多项式G(x)
2、发送方按照公式计算出 检测码(冗余码)
3、接收方计算后与 冗余码进行对比

image-20220330141423577

压缩包也使用这种方式进行加密处理,CRC32.比赛中有时候会遇到需要碰撞的情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#python2 crc32碰撞脚本,暴力破解信息
from zlib import crc32
import random
char='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-*/='
def crc32_f(data):
return hex(crc32(data)&0xffffffff)[2:10]
length=input('length:')
crc32_=raw_input('crc32:').lower()
while True:
text=''
for i in range(length):
text+=char[random.randint(0,len(char)-1)]
if crc32_f(text)==crc32_:
raw_input('find it:'+text)
exit

:star:纠错码只能检测差错,不能纠正错误。可以使用冗余信息更多的纠错码进行前向纠错。但开销较大,在计算机网络中较少使用
:star:CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层
:star:在计算机网络中通常采用,检错重传方式来纠正差错,或者直接丢弃差错帧,取决于向上层提供的服务是否可靠。

4-可靠传输基本概念

一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据向上层提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层解决。

无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务

比特差错只是一种,就整个体系结构而言传输差错,还有分组丢失,分组失序和分组重复。这些一般不会出现在数据链路层

可靠传输服务并不仅局限于数据链路层,其它层均可选择实现可靠服务。
image-20220330163431705

4.1-停止等待协议SW(Stop and Wait)

:star:因为发送方的数据包和接收方发回的确认包/否认包 都有可能丢失,所以要添加时钟超时重传。并且给相邻两个数据包 01标号,返回的ACK/NACK 也需要标号。

image-20220330165656272

4.1.1-例题

RTT是往返时间,有的题要X2
image-20220330172222894

4.2-回退N帧协议GBN(Go-Back-N)

:book:采用3个比特给分组编号,所以编号范围是 0~7
:book:发送窗口的尺寸 Wt的取值:1 < Wt <= 7
:book:接收窗口 Wr = 1

接收方不一定要逐个进行确认,而是可以在收到几个分组后对最后一个进行确认,ACKn就表示n以前全接收

image-20220330184337194

4.2.1-例题

image-20220330185542376

4.3-选择重传协议SR(Selective Request)

与回退N不同的地方是,接收端窗口更大了,不用全部重发,只需要检测窗口内的。

发送窗口 : 1 < Wt <= 2^(n-1)
接收窗口 : 1 < Wr <= wt
image-20220330212755677

4.3.1-例题

该题中并未说明3号帧的情况,所以可以不考虑,只考虑02两个超时的
image-20220330213042623