跳到主要内容
JackSparrow414
返回

计算机网络-数据链路层

本文导航

展开本文导航

数据链路层

帧的组成

封装帧是由数据链路层-网卡完成的。

帧/帧长 = 帧头 + IP数据报(IP 包) + 帧尾

对于帧而言,所能传送的数据长度也就是不包括帧头、帧尾的数据部分 上限(IP数据报的长度)叫做最大传送单元(Maximum Transfer Unit)

SOH 和 EOT有什么用?

确定一个帧是否完整

Start Of Header-SOH-位于帧的最前面,表示帧的开始-16进制-01-二进制-00000001

End Of Transmission-EOT-位于帧的最后面,表示帧结束-16进制-04-二进制-00000100

当一个帧,发送途中出现了问题,这时接收方收到的帧是没有帧尾的。这时发送方重新发送的这个帧,也已经传输过来了,所以面对

A- 和 A-B,这种情况,接收方就可以知道A-是一个无用的帧。因为A-在A-B前面,A-B是一个完整的帧,A-肯定是在中途出现了丢失

当发现传递的数据如下

00000001 + 0110 1111 0110 1011+ 00000100 = 帧头+ok + 帧尾

代表数据帧是对的。

特殊情况

当传输的数据中有一个字节恰好为00000100,按照上面说的情况,接收方,会错误的认为该帧已经结束,会将后面的剩余部分丢弃,因为找不到帧头的标识SOH。 数据中出现 EOT 字节时被误判为帧结束的示意图

就像正则一样,对于这种本来就有特殊含义的二进制,在他的前面加一个转义ESC。对于数据链路层来说,这叫字节填充

对应的二进制为0001 1011

具体流程为

发送方:当数据链路层接收到网络层的IP数据报时,开始进行封装帧的操作,如果这是发现IP数据报中有这种(指的是SOH,EOT分别的二进制表示)特殊含义的二进制,则会将其转义

接收方:当数据链路层接收到帧的时候,会对帧进行解包装,就是去掉帧头、帧尾。并且将IP数据报中的刚才的转义字符删除 通过 ESC 字节填充转义 SOH、EOT 和 ESC 的示意图

如何确定一个帧的数据部分丢没丢失?

对于整个帧,可以通过SOH和EOT判断是不是完整。但是在物理层的时候,还是要一个比特一个比特进行传输,如何确定在传输过程中数据部分是完整的没有发生错误的呢。即数据部分发送前为100110,接收方接收到的数据部分也应该为100110,而不是101110,或者100010等等。即0和1发生变化的情况(术语叫比特差错)

循环冗余检测-Circle Redundancy Check-CRC

前提条件:需要定一个除数P

发送方:接收到上层网络层的IP数据报,可能很大,由于MTU的限制,要对这个IP数据报分成几组发送,每组k个bit,数据101001-k是6,因为0/1就是一位。用帧的数据部分,后面拼上冗余码位数个0(假设冗余码位数为3,001,则在101001后面拼3个0,101001000),再对除数P做除法,什么时候除法可以结束呢?得到的余数的位数比除数的位数少一位,即可结束除法,得到的余数,作为标识,跟在正常帧的数据部分。假设余数为010,则数据帧变为101001(数据部分)010(冗余码)

得到的余数叫做冗余码 术语叫Frame Check Sequence-帧检测序列

接收方:接收到帧之后,去掉帧头、帧尾,对除数P做除法,如果得到的余数为0,则认为这个帧的数据部分是完整的,并且没有丢失的、出错的。反之,则认为这个帧的数据部分是有问题的

CRC是由硬件部分完成的。

为什么会出现帧丢失、帧失序、帧重复?

既然会出现这种情况,说明,数据链路层的协议都不是可靠的传输协议。(对于通信质量差的链路,数据链路层还增加了帧的确认、重传机制)

适配器-adapter-即网卡

计算机和外界联网是通过适配器完成的

适配器又叫网络接口卡-Network Interface Card、网卡

网卡 有两个处理器RAM、ROM

ROM 中存放本机物理地址

RAM 中存放要发送的数据,或者在网络上接收的数据

组装帧,解封帧的操作是由网卡完成的 教材对网卡、主机 I/O 总线及帧处理的说明

目前的计算机主板均嵌入了网卡。原来的计算机是需要插网卡的。适配器和计算机主机通信是通过I/O总线完成的。当主板上插入适配器时,必须把管理适配器的驱动程序安装在操作系统中,驱动程序会告诉适配器,把数据发送到网络中去.

Mac地址

一台计算机的物理地址,也叫Mac地址。主机A和主机B通信,必须知道对方的物理地址,才能进行链路的通信。Mac地址是放在网卡的ROM中,为什么?因为Mac地址是不变的,ROM-Read Only Memory-只读存储器。将不变的信息放到ROM中,需要的时候,直接读出即可。当一个主机有多个网卡,那么对应的就有多个Mac地址。对应的,当主机更换网卡时,对应的物理地址就会改变。如果不更换网卡,仅仅从北京带到上海,其物理地址也不会变。Mac地址是由全球统一的机构颁发的,生产适配器的厂家需要从机构购买。

网卡内部发送数据细节

  1. MAC模块从报头开始将数字信息按每个比特转换成电信号,然后由PHY,或者叫MAU的信号收发模块发送出去。在这里,将数字信息转换为电信号的速率就是网络的传输速率,例如每秒将10 Mbit的数字信息转换为电信号发送出去,则速率就是10 Mbit/s。
  2. 接下来,PHY(MAU)模块会将信号转换为可在网线(以太网)上传输的格式,并通过网线发送出去。
  3. 以太网规格中对不同的网线类型和速率以及其对应的信号格式进行了规定,但MAC模块并不关心这些区别,而是将可转换为任意格式的通用信号发送给PHY(MAU)模块,然后PHY(MAU)模块再将其转换为可在网线上传输的格式。大家可以认为PHY(MAU)模块的 功能就是对MAC模块产生的信号进行格式转换

上述几段话引用自 网络是怎样连接的?一书中 > 2.5.9 向集线器发送网络包 章节

适配器接收帧

当适配器从网络上收到一个Mac帧时,启用硬件检查Mac帧中的目的地址,如果是目的地是本机,则收下。如果不是本机,则丢弃。

Mac帧 = 目的地地址(6字节) + 源地址(6字节) + 类型(2字节,标识上一层使用的是什么协议) + 数据(46-1500字节之间)+FCS(4字节,冗余码)

一个Mac帧的最小长度为64字节=6+6+2+46+4 以太网 MAC 帧格式,包括地址、类型、数据和 FCS

调制解调器-猫

概念:将一种信号转为另一种信号的设备。比如将数字信号转为模拟电话信号

一开始的 宽带接入-即用户通过物理线路连接至ISP提供的网络中-也可以简单理解为家里接宽带,是利用电话线的不同频率实现的(直接利用原有电话线,无需重新布线),低频的模拟电话信号是用来打电话(0-4k Hz),把高频的用来上网。将数字信号转换为模拟信号,就是调制解调器,干的工作。

远距离传输就则使用光纤,进行更快传输。

光纤调制解调器

在过去,主机间的链路通信 可以简单理解为布线方式,通常都是铜线的粗缆或者细缆,这种做法的坏处是,当主机距离较远,那么经过通线传输的信号就会衰减,到达接收方的时候,可能都无法识别了。于是当时大量使用转发器。当光纤出现后,使用光信号进行传输,光纤传输时延小、带宽很宽。但是如何在发送时将电信号转为光信号,在接收时又如何将光信号转为电信号的呢。

利用光纤调制解调器。

主机A通过物理线路,连接光纤调制解调器A,光纤调制解调器A将电信号转为光信号。因为信号传输是一个bit一个bit传输,所有最开始是01的高低电流。调至解调器A通过光纤将光信号传送至调制解调器B,调制解调器B将光信号转为电信号后,又通过物理线路转发给源主机B

发送数据完整流程-广播信道

确定目的主机Mac地址

主机A向主机B请求通信,首先要在当前网络里查找是否存在主机B。主机B如果在当前网络中,主机B的适配器(适配器有过滤功能)会检测从网络上收到的Mac帧,如果Mac帧中的目的地址是本机,则收下,否则将帧丢弃

单播帧-一对一-收到的帧的目的地就是本机

广播帧-一对全体-收到的帧目的地是网络里的所有主机

多播帧-一对多-只是发给网络中的部分帧

准备发送数据

  1. 适配器将IP数据报封装成帧

  2. 进行信道检测。确保信道中没有其他主机在发送数据

    信道一般为广播信道-即多个主机使用一条信道、点对点信道。

发送数据

  1. 适配器发送数据,发送数据的同时,适配器依旧要检测信道。当出现碰撞-即在总线上,有多个主机在发送数据,会造成总线的信号电压幅度会增大,当超过固定阈值时,认为发生了碰撞。
  2. 一旦出现碰撞,适配器会立刻停止发送,等待一段时间后,再重新回到上面第二步,进行发送步骤

第二步和第三步所使用的协议叫CSMA/CD-载波监听多点接入/碰撞检测。也就是广播信道所使用的的协议

以上是依赖总线结构的网络,现在为止,是星型结构的网络。

为什么会发生这种变化?

备注

  1. 以太网交换机自学习功能 以太网交换机学习地址并转发帧的示意图

  2. 利用多台交换机构建不同的网络 多台以太网交换机互连形成网络的示意与说明

  3. 双绞线的作用?

    减少信号干扰还便宜。详情见知乎

    网线 = 双绞线+RJ-45插头(网线两端的水晶头)

  4. 集线器、交换机、路由器的区别?

    详情见知乎

  5. 主机A-通过双绞线连接-路由器-双绞线-调制解调器A(猫)-光纤-调制解调器B-双绞线-路由器-双绞线-主机B


分享本文:

上一篇
计算机网络-传输层
下一篇
JAVA 中的锁(一)锁分类

评论

欢迎提问、纠错和分享经验。发表评论需要登录 GitHub;中英文版本共享评论。

评论仅在正式网站开放。