文章目录
数据链路层
帧的组成
封装帧是由数据链路层-网卡完成的。
帧/帧长 = 帧头 + 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。
就像正则一样,对于这种本来就有特殊含义的二进制,在他的前面加一个转义ESC。对于数据链路层来说,这叫字节填充
对应的二进制为0001 1011
具体流程为
发送方:当数据链路层接收到网络层的IP数据报时,开始进行封装帧的操作,如果这是发现IP数据报中有这种(指的是SOH,EOT分别的二进制表示)特殊含义的二进制,则会将其转义
接收方:当数据链路层接收到帧的时候,会对帧进行解包装,就是去掉帧头、帧尾。并且将IP数据报中的刚才的转义字符删除
如何确定一个帧的数据部分丢没丢失?
对于整个帧,可以通过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总线完成的。当主板上插入适配器时,必须把管理适配器的驱动程序安装在操作系统中,驱动程序会告诉适配器,把数据发送到网络中去.
Mac地址
一台计算机的物理地址,也叫Mac地址。主机A和主机B通信,必须知道对方的物理地址,才能进行链路的通信。Mac地址是放在网卡的ROM中,为什么?因为Mac地址是不变的,ROM-Read Only Memory-只读存储器。将不变的信息放到ROM中,需要的时候,直接读出即可。当一个主机有多个网卡,那么对应的就有多个Mac地址。对应的,当主机更换网卡时,对应的物理地址就会改变。如果不更换网卡,仅仅从北京带到上海,其物理地址也不会变。Mac地址是由全球统一的机构颁发的,生产适配器的厂家需要从机构购买。
适配器接收帧
当适配器从网络上收到一个Mac帧时,启用硬件检查Mac帧中的目的地址,如果是目的地是本机,则收下。如果不是本机,则丢弃。
Mac帧 = 目的地地址(6字节) + 源地址(6字节) + 类型(2字节,标识上一层使用的是什么协议) + 数据(46-1500字节之间)+FCS(4字节,冗余码)
一个Mac帧的最小长度为64字节=6+6+2+46+4
调制解调器-猫
概念:将一种信号转为另一种信号的设备。比如将数字信号转为模拟电话信号
一开始的 宽带接入-即用户通过物理线路连接至ISP提供的网络中-也可以简单理解为家里接宽带,是利用电话线的不同频率实现的(直接利用原有电话线,无需重新布线),低频的模拟电话信号是用来打电话(0-4k Hz),把高频的用来上网。将数字信号转换为模拟信号,就是调制解调器,干的工作。
远距离传输就则使用光纤,进行更快传输。
光纤调制解调器
在过去,主机间的链路通信 可以简单理解为布线方式,通常都是铜线的粗缆或者细缆,这种做法的坏处是,当主机距离较远,那么经过通线传输的信号就会衰减,到达接收方的时候,可能都无法识别了。于是当时大量使用转发器。当光纤出现后,使用光信号进行传输,光纤传输时延小、带宽很宽。但是如何在发送时将电信号转为光信号,在接收时又如何将光信号转为电信号的呢。
利用光纤调制解调器。
主机A通过物理线路,连接光纤调制解调器A,光纤调制解调器A将电信号转为光信号。因为信号传输是一个bit一个bit传输,所有最开始是01的高低电流。调至解调器A通过光纤将光信号传送至调制解调器B,调制解调器B将光信号转为电信号后,又通过物理线路转发给源主机B
发送数据完整流程-广播信道
确定目的主机Mac地址
主机A向主机B请求通信,首先要在当前网络里查找是否存在主机B。主机B如果在当前网络中,主机B的适配器(适配器有过滤功能)会检测从网络上收到的Mac帧,如果Mac帧中的目的地址是本机,则收下,否则将帧丢弃
单播帧-一对一-收到的帧的目的地就是本机
广播帧-一对全体-收到的帧目的地是网络里的所有主机
多播帧-一对多-只是发给网络中的部分帧
准备发送数据
-
适配器将IP数据报封装成帧
-
进行信道检测。确保信道中没有其他主机在发送数据
信道一般为广播信道-即多个主机使用一条信道、点对点信道。
发送数据
- 适配器发送数据,发送数据的同时,适配器依旧要检测信道。当出现碰撞-即在总线上,有多个主机在发送数据,会造成总线的信号电压幅度会增大,当超过固定阈值时,认为发生了碰撞。
- 一旦出现碰撞,适配器会立刻停止发送,等待一段时间后,再重新回到上面第二步,进行发送步骤
第二步和第三步所使用的协议叫CSMA/CD-载波监听多点接入/碰撞检测。也就是广播信道所使用的的协议
以上是依赖总线结构的网络,现在为止,是星型结构的网络。
为什么会发生这种变化?