数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第1张图片

OSI模型中的数据链路层与物理层,在TCP/IP协议中同属于网络接口层。

数据链路层为物理连接之间提供了可靠的数据传输。数据链路层主要解决3个问题:封装成帧、透明传输、差错检测。

封装成帧

“帧”是数据链路层中数据的基本单位,发送端在一段数据前后添加特定标记形成“帧”,接收端根据前后特定标记识别出“帧”。

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第2张图片

帧首部和尾部是特定的控制字符(即:特定比特流),帧首部(SOH)使用00000001,帧尾部(EOT)使用00000100。

透明传输

假如帧数据中刚好存在帧首部、帧尾部的比特流,那该怎么处理呢?

下图的帧数据中出现了帧尾部的比特流。

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第3张图片

解决方式是在帧数据的EOT前面加一个转义字符

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第4张图片

如果帧数据中就包含了ESC+EOT比特流,则在前面再加一个转义字符。

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第5张图片

这种处理方法跟编程语言中使用“\”作为转义字符是一个道理。

“透明”在计算机领域是一个非常重要的术语,透明即“当它不存在”。在特殊比特流前面加转义比特流,将帧数据中的特殊比特流透明化,以便能把这些比特流标识为正常的数据。

差错检测

数据在物理层以比特流的方式传输,传输过程中可能发生差错,0可能变成1,1可能变成0。数据链路层提供差错检测功能,在发送的数据块中添加一些冗余信息,以便接收方判断数据在传输过程中是否出错。

奇偶检验码

奇偶检验码是一种通过增加冗余位使得码流中"1"的个数恒为奇数或偶数的编码方法。下面以码流中“1”恒为偶数讲解。

假设要发送数据是00110010,1的个数是奇数个,在数据的末尾加1,保证数据中“1”为偶数个。假设要发送数据是00111010,1的个数是偶数个,在数据的末尾加0,保证数据中“1”为偶数个。

当001100101在传输过程中有一个比特位发生变化,变成了000100101,接收端收到数据后,发现“1”的个数为奇数个,则认为此数据在传输过程中发生了错误。

奇偶检验有局限性,如果数据有两个比特位发生错误,奇偶检验无法检测出错误。例如001100101在传输过程中,前面的两位发生错误,变成111100101,由于“1”的个数还是偶数个,则服务端认为此数据是正确的。

循环冗余校验码CRC

目前在数据链路层广泛使用了CRC检测技术(循环冗余检测)。CRC校验码是在数据后面添加n位冗余码,构成“数据+n位冗余码”的帧发送出去。

CRC用到了模“2”除法,二进制的模“2”除法不会向前一位借位,仅是一种异或的数学关系。例如:1001除以1010,商为1,余数是11。1101除以1011,商为1,余数是110。如下图:

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第6张图片

计算CRC循环冗余校验码有3步骤:

1、选定一个用于校验的多项式G(x),G(x)的位串(也叫“最高阶”)是r。

2、在数据尾部添加r个0,使用模“2”除法除以多项式的位串。

3、得到的余数填充在原数据末尾,得到可校验的位串。

下面以G(x)=x^{3}+x^{2}+1,数据=101001 为例子讲解。

发送端

1、 G(x)=x^{3}+x^{2}+1,最高阶是3,对应的二进制串为1101。

2、要校验的数据为101001,由于G(x)最高阶是3,则在数据后加3个0,变成101001000。

101001000除以G(x)对应的二进制串1101

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第7张图片

3、将余数001添加到原始数据101001的后面,变成101001001,这个数据就是发送给接收端的数据。

接收端

接收端将接收到的数据除以G(x)=x^{3}+x^{2}+1对应的二进制串1101,如果余数为0,则认为数据没有出错。

例如:接收端收到101001001后,使用101001001除以G(x)=x^{3}+x^{2}+1对应的二进制串1101,余数为0,证明数据在传输过程中没发生错误。

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第8张图片

最大传输单元MTU

MTU即Maximum Transmission Unit 最大传输单元。它是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。

数据链路层传输数据的基本单位是帧,数据帧不可能无限大,以太网的MTU一般为1500字节。

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第9张图片

路径MTU是指一条因特网传输路径中,从源地址到目的地址所经过的“路径”上的所有IP跳的MTU的最小值。

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第10张图片

上图中计算机A向计算机B传输数据会经过几个小型网络,小型网络之间的MTU各不相同。路径MTU就是此“路径”上最小的MTU,路径MTU = 1492

以太网协议

MAC地址

网络中每台设备都有一个唯一的网络标识,这个地址叫MAC地址或网卡地址,由网络设备制造商生产时写进硬件内部。 MAC地址是48位的(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号或者中杠隔开,如08:00:20:0A:8C:6D是一个MAC地址。

window使用 ipconfig -all 命令查看MAC地址

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第11张图片

以太网协议

以太网(Ethernet)是一种使用广泛的局域网技术,可以完成相邻设备的数据帧传输,是TCP/IP协议簇四层模型的网络接口层使用的协议。

以太网协议数据帧的格式如下:

目的地址、原地址是接收端、发送端的MAC地址,各占6个字节(前面有提到MAC地址是6个字节的)。

类型用于表示网络层使用的协议(备注:数据链路层的上一层就是网络层),占2字节,例如:0800表示网络层使用的是IP协议。

帧数据是网络层交付给数据链路层的数据。数据链路层将网络层的数据加上头(目的地址、源地址、类型),加上尾(CRC冗余校验码)就组成了以太帧网协议的数据帧。

数据链路层将CRC循环冗余校验码添加到以太帧的尾部。

数据链路层使用以太网协议完成相邻设备间的数据传输。

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第12张图片

问题一:如上图所示,计算机A要将数据发送给计算机C,过程是怎样的呢?

1、路由器E维护了一张MAC地址表,存储了计算机A、B、C的MAC地址与硬件接口(即:路由器插槽)的映射。

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第13张图片

2、路由器接收到A发送的数据帧后,读取数据帧中的目的地址。路由器通过MAC地址表知道目的地址的设备插在了E3接口上,则将数据帧发送给E3接口的设备。

问题二:假如MAC地址没有C与E3的映射会怎样呢?

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第14张图片

1、路由器收到A发送的数据帧后,在MAC地址表中找不到目的地址与硬件接口的映射,就会将数据帧广播给除了A以外的所有设备。

2、将数据广播出去后,路由器将收到B、C的响应信息,并将C的MAC地址与硬件接口的映射更新到MAC地址表。

问题三:如果A与C之间有多个路由器,数据如何传输?

数据链路层——封装成帧、透明传输、差错检测、最大传输单元MTU、以太网协议_第15张图片

以太网协议只能解决相邻节点的数据传输,这种跨设备传输的问题将交给网络层解决。请看这篇博客 https://blog.csdn.net/u010606397/article/details/110422346

 

 

 

你可能感兴趣的:(网络)