首页 > 编程知识 正文

物理层网络层传输层应用层,计算机网络的数据链路层

时间:2023-05-03 22:43:29 阅读:137714 作者:3128

正文物理层概述物理层作用分离传输媒体信道基本概念-复用技术数据链路层概述帧透明传输检错奇偶校验码循环冗馀校验码(CRC )最大传输单元MTU以太网协议MAC地址以太网协议详细解析

物理层概述物理层的作用在OSI层模型的情况下,物理层位于最底层。 对于TCP/IP层模型,它属于最低网络接口层。 物理层的作用是

通过连接各种物理设备(如路由器和计算机通过网线连接)传输比特流。 比特流是指像0、1这样的高电平,也就是数字信号。 各种物理设备连接到有线介质,包括传输介质和无线介质,包括

双绞线、同轴电缆、光纤、比特流

信道的基本概念信道在作为单向传递信息的媒体的通信电路中,往往包含接收信道和发送信道。 由于发送信息的方向和接收信息的方向不同,所以这里有两个信道和一条通信线路,既进行发送又进行接收。 如果发生冲突会怎么样?

这个问题,其实物理层解决了。 根据通道的不同,通信电路被分开

单通信信道半双工通信信道全双工通信信道单工通信信道

只能进行单向通信,没有反向反馈的频道有限电视、无线电等,都是单向通信信道(一方发送,另一方只能接收)半双工通信信道

双方可以收发的信息双方不能同时发送。 此外,全双工通信信道

如在全双工通信信道的分离复用技术之前介绍的那样,双方都可以同时发送和接收消息网,当两台计算机进行通信时,他们之间有通信线路,在该通信线路中可以使用发送信道和接收信道。 考虑一个情况吧。 如果有很多计算机,他们就需要连接。 这时,有很多发送信道和接收信道,在很多情况下,他们不是处于活动状态。 这将导致更高的通道利用率。 因此,为了提高信道的利用率,提出了分用-复用的技术

分用-复用技术如何提高信道利用率?

多台计算机连接到复用器,另一台计算机连接到分用器。 由于多路复用器和分离器这两个设备可以共享一个发送信道和接收信道,所以可以大幅提高信道的利用率。

注意:有很多计算机,如果频繁地通过通道收发信息,通道就会变得拥挤

数据链路层的概要物理层主要进行不同设备的连接和比特流的传输。 接下来介绍数据链路层。 首先,数据链路层是OSI层模型的倒数第二层,即物理层之上的层,位于TCP/IP四层模型的网络接口层

数据链路层主要解决了以下三个问题

封装的透明传输错误检测封装的帧“帧”是数据链路层数据的基本单位。 位位可以是物理层数据的单位。 发送方在网络层数据之前和之后添加特定的标签以形成“帧”,接收方基于之前和之后的特定标签识别“帧”下有“帧”是为了理解从图中成帧的过程

首先,在网络层上将若干“IP数据报”传输至数据链路层,当收到此数据时,将其视为数据帧的数据,然后在数据的前部和后部进行特定的标记,这是在数据帧的末尾上述帧头和帧末尾都是特定的控制字符(特定的比特流)

帧首部中的比特流是SOH:00000001(SOH为控制字符)

帧尾部的比特流是EOT:00000100

如果帧数据中也正好有帧头或帧末尾这样的比特流,该怎么办

这需要透明的传输

透明转发可以通过透明转发解决上述问题。 在说明透明转发之前,请理解什么是“透明”。 “透明度”是计算机领域非常重要的术语。

例如,当我们平时设计一个API的时候,我们经常会说,如果你这个API设计得足够好,这个底层API的操作对于API的调用方是透明的。 例如,对于数据链路层和物理层来说,物理层所做的所有工作都是透明的,并且物理层可在数据链路层中提供和使用一些API。 说白了,就是一种实际存在的事务,却又看起来不存在一样。把透明这个概念使用在数据链路层就是,控制字符在帧数据中,但是要当做不存在的去处理

数据链路层如何能假装不知道处理控制字符即使在帧数据中?

此时,假设帧数据中有帧末尾的控制字符。 如果数据链路层不使用透明传输,则接收方很可能会将帧数据中的控制字符视为数据帧的末尾,并识别出错误的帧。因此数据链路层就会对帧数据中的控制字符进行特殊处理

解决方法是在控制字符前添加转义字符,下面的ESC就是转义字符。 于是,接收端在接收到数据帧后,先判断是否位于帧数据中的控制字符之前

存在转义字符,如果存在,就不会把这个控制字符当做一个控制字符。那如果帧数据中也出现了转义字符怎么办?把转义字符重新转义一次即可

其实我们在平时的编程当中,“”一般看做是转义字符。假设此时要输出“”,那么在这两个反斜杠前边都加上转义字符即可,表示这两个都不是转义字符""

差错检测

物理层只管传输比特流,无法控制是否出错(如果物理层传输比特流的过程中受到了一些干扰,比如闪电。就会影响比特流的传输,物理层是察觉不到的)

数据链路层负责起“差错检测”的工作,主要包含两个部分:

奇偶校验码循环冗余校验码(CRC) 奇偶校验码

奇偶校验码是一种非常简单的检测比特流中是否有传输错误的方法。该方法是通过在比特流的尾部添加一位比特位来检测比特流是否有出错。假设测试要传输“00110010”这个8位的比特流

首先在这个比特流后边加“1”这个比特位当接收端接收到这个比特流之后,就会根据后边加的那个比特位来检测该比特流是否有出错这个1是通过前边的8位比特流相加得到3,因为3是奇数,所以就在这个8位的比特流后边加上1,来表示这是一个奇偶校验的位

如果我们要传输“00111010”这个比特流,那么后边添加的比特位就应是“0”,因为这8位相加的结果是4,是个偶数。下边就看一下,如何通过这个奇偶检验码来检测错误。假设此时要传输“00110010”这个比特流,那么需要在尾部添加“1”这个比特位。假设在传输的过程中发生了错误,接收端收到的是“00010010”,此时接收端会通过奇偶校验码来进行校验,接收端计算的奇偶校验码是“0”,不等于“1”,说明这个比特流在传输的过程中出现了差错
相信聪明的你已经看出来,这里边有一个局限性,假设现在还是要传输“00110010”,在尾部添加的比特位是“1”。假设此时接收端接收到的是“00000010”,接收端经过运算之后,发现后边的奇偶校验位应该是“1”,而恰好此时,最后一位校验位就是“1”,就会认为数据没问题,而实际上数据是有问题的。所以当比特流出现两位错误,奇偶校验码就检测不到错误

循环冗余校验码(CRC)

循环冗余校验码是一种广泛使用的差错检测的算法

它是一种根据传输或保存的数据而产生固定位数校验码的方法(固定位数,可能是1位,也可能是多位)它可以检测数据传输或者保存后可能出现的错误它的过程和奇偶校验码有些类似它首先计算生成一些数字,并且附加到数据后边当接收端接收到数据之后,就会根据附加到后边的数字,来判断接收到的数据是否有出错

CRC主要有三个步骤

选定一个用于校验的多项式G(x),并在数据尾部添加r个0将添加r个0后的数据,使用模“2”除法除以多项式的位串将得到的余数填充在原数据r个0的位置,得到可校验的位串

下边直接例子

使用CRC计算“101001”的可校验位串

下边就根据上边提到的计算CRC的三步来计算

(1)首先是选定一个用于校验的多项式G(x),并在数据尾部添加r个0

什么是G(x)?

G(x)可能是下边这样的一个多项式
位串就是将多项式的常数项提取出来,得到了位串1101。在数据尾部添加r个0,其实就是在尾部添加最高阶个0。因此在“101001”后边添加3个0就得到了“101001000”

(2)将添加r个0后的数据,使用模“2”除法除以多项式的位串

经过上边的计算,得到sdqd“001”,然后进行第三步

(3)将得到的余数填充在原数据r个0的位置,得到可校验的位串
也就是将原来的“101001000”填充为“101001001”,最后这个就是最终要发送的可校验位串,上边的过程都是在发送端完成的,发送端通过校验出可校验位串之后,它就可以将这个比特流发送给接收端。接收端在接收到这个比特流之后,它就可以进行校验。校验的过程也是一样,接收端将接收到的数据除以G(x)的位串,根据余数判断是否出错,如果没有出错,得到的余数应该是0,如果不是0,说明数据在传输过程中出错了
上边就是循环冗余校验码算法(CRC)的整个过程

其实CRC的错误检测能力与位串的阶数r有关(位串中添加越多的0,检测能力就越强,比如,阶数如果是1的话,就是在传输数据后边加一个校验位,这样就退化成了前边介绍的奇偶校验码了)数据链路层只进行数据的检测,不进行纠正(如果数据链路层发现错误的数据,它会直接的将其丢弃掉) 最大传送单元MTU

数据链路层的数据帧不是无限大的(因此MTU描述的就是最qsdfk传输的数据帧)

设置MTU的好处:数据帧过大或者过小都会影响传输的效率(常用的以太网的MTU一般为1500字节)

如果数据帧过大,总时延就会增大,这样就导致发送端和接收端处理信息的时间过长,如果过小的话也不行,假设每次发1个字节,那么1500个字节就需要发送1500次,虽然每个数据发送的总时延减少了,但是重复1500次,这个也会影响通信的效率,所以数据帧过大或过小都会影响数据传输效率

路径MTU

假设计算机A给计算机B传输数据,需要经过多个小型网络。假设计算机A给计算机B传输数据的话,那么路径的MTU由谁决定的呢?如下图

计算机和小型网络之间以及小型网络和小型网络之间的数字是MTU,那么整个路径的MTU就是受最小的MTU影响的,称之为木桶效应。所以整个路径的MTU就是1492

以太网协议详解

上边介绍了数据链路层中的数据封装成帧、透明传输、差错检测以及MTU。了解完这些,还不能让我们知道数据链路层是如何进行数据传输的,以太网协议是数据链路层非常常用的一种协议。在学习具体某一层的协议时,我们是希望可以屏蔽其它层的一些细节,比如我们在学习数据链路层的协议时,就不需要关注物理层是如何进行比特流的传输的,我们甚至可以认为比特流是由某一台机器的数据链路层直接传输到另一台机器的数据链路层的,以此来简化理解

假设有下边这么一个网络拓扑,图中有A、B、C三台计算机,这三个计算机通过一个路由器进行连接。假设此时A需要向C发送数据,数据是如何到达的C的?路由器怎么知道计算机A的数据要发送给谁?


两个主要内容

MAC地址以太网协议 MAC地址 MAC地址(物理地址、硬件地址)每一个设备都拥有唯一的一个MAC地址(可以理解成设备的身份证)MAC地址共48位,通常用十六进制表示可以通过ifconfig -a(windows使用 ipconfig /all)来查看本机所有硬件设备的地址 以太网协议 以太网(Ethernet)是一种使用广泛的局域网技术以太网是一种应用于数据链路层的协议使用以太网可以完成相邻设备的数据帧传输

以太网数据格式

主要由五个部分组成:

目的地址、源地址:前边两个部分就是前边提到的MAC地址,下边的6,表示占用6个字节(48位)类型:类型表明的是帧数据是哪个协议的数据,如果是网络层的数据的话,类型就是0800;如果帧数据是ARP协议的请求或应答数据,它的类型就是0806;如果是RARP的协议数据,那类型就是8035帧数据:就是具体发的数据CRC:这个是前边介绍到的循环冗余校验码

MAC地址表

MAC地址表是一个映射,会把MAC地址具体的映射到硬件接口。了解了MAC地址表,就可以解决最开始提到的那个问题了

当A要给C发送消息的时候,在路由器E中有一个MAC地址表,表中记录了每一个MAC地址映射到了哪一个接口。所以A给C发数据的整个过程就是:

A通过网卡发送数据帧数据帧到达路由器,路由器取出前6个字节(目的地址)路由器匹配MAC地址表,找到对应的网络接口路由器通过目的地址匹配到的接口来发送数据帧

如果MAC地址表,不知道C的硬件接口具体是哪一个,该怎么办?


这个问题的过程就是:

路由器E检查MAC地址表,发现没有MAC地址C的信息E将广播A的数据包到除A以外的接口E将收到来自B、C的回应,并将MAC地址记录下来

对于比较复杂的网络拓扑,通过MAC地址表就不能解决跨设备的数据传输


因为通过MAC地址表只能进行相邻物理节点之前的数据传输,所以,如果A要给C发送数据,靠MAC地址表是完成不了的(E只能知道A、D、F的地址)。解决跨设备的数据传输就需要学习网络层的更多内容

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。