因此物理层仅实现了
数据传输
而没有实现有效无差错通信!
要实现真正的通信,还需要做大量的协调工作,如
链路管理、流量控制、差错控制
等,这些功能由数据链路
层来完成。
数据链路层的主要功能是在
不可靠的物理链路上实现可靠的数据传输,向网络层提供无差异的、可靠的数据传输通路。
数据链路层的主要功能
1、链路管理
2、封装成帧(帧同步)
3、差错检测
4、将数据和控制信息区分开
5、透明传输
6、寻址
7、流量控制
链路管理
1、为确保
接收方处于接收
状态,数据的发送方与数据的接收方在数据交换之前,通过交换必要的信息,确定链路的状态。
2、这些状态分为:
链路建立、链路维持和链路释放。
3、完成这些状态的转换的功能,称为链路的管理。
帧的概要描述
帧是
数据链路层数据传输的单位;
帧包含
网络层
需要传输的数据
和传输网络层数据所需的控制信息
;
封装成帧
在一段
数据
的前后分别添加首部和尾部
,就构成了一个帧。
首部和尾部的一个重要作用就是进行帧定界。
MTU (Maximum Transfer Unit) :帧的
数据
部分的长度上限。
用
控制字符
进行帧定界的方法
文头SOH(Start Of Header):
二进制 00000001
文尾EOT(End Of Transmission):
二进制 00000100
以帧为单位便于
差错检测和处理。
透明传输
将数据正确传输到接收方,
称为透明传输;
- 当传送的帧是文本文件时,数据部分不会出现像SOH、EOT这样的控制字符,因此是透明传输;
- 当数据部分
是非ASCⅡ码
的文本文件时,如果数据中的某个字节的二进制代码恰好和SOH、EOT这种控制字符一样:
发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的
前面插入一个转义字符“ESC”
。
字节填充
或字符填充
——接收端的
数据链路层在将数据送往网络层之前删除插入的转义字符。
如果
转义字符也出现数据当中
,那么应在转义字符前面再插入一个转义字符
。当接收端收到连续的两个转义字符时
,就删除其中前面的一个。
解决方法:
发送端的数据链路层在数据中出现控制字符“SOH”、“EOT”之前
插入转义字符“ESC”
(escape):00011011。
接收端的数据链路层先删除这些转义字符,然后再将数据送往网络层。
差错检测控制
差错控制目的:
- 及时发现错误
- 及时处理
差错编码技术分为两大类:
(1)前向纠错:
接收方能检验错误并能纠正错误;
(2)差错检测:
只检测错误,不做纠正。
差错控制的具体方法有:
垂直冗余校验(VRC)、水平冗余校验(LRC)、水平垂直冗余校验(TRC)和
循环冗余校验(CRC)。
crc的特点:
检错能力极强、开销很小、易于实现
CRC校验常用场合
奇偶校验
对一个字符校验一次,适合异步通讯
,
一个
数据块(frame)校验一次
,适合同步通讯
。
在
串行同步通信中
,在所有链路层或网络接口层协议中,几乎都可以使用这种校验方法。
在串行同步通信中
,在所有链路层或网络接口层协议中,几乎都可以使用这种校验方法。
CRC码的生成
CRC码生成和校验基本分为三步:
第一步:在数据单元(k位)的末尾加上r个0。r是一个比预定除数的比特位数(r+1)少1的数。
第二步:采用二进制除法将新的加长的数据单元(k+r位)除以除数。
第三步:求CRC循环冗余校验码
将被除数+余数发送出去
如果余数位数小于r,最左的缺省位数为0。
如果余数为0,则r=0。
说明:
1、发送方和接收方必须有一个共同的多项式P(x);
2、除数比余数多1位。
3、余数既为冗余码,又称帧检验序列FCS
例子:
多项式P(X)的选择
1、为保证检测错误的概率足够大,必须正确选择P(X);
2、它的最高位和最低位必须是1;
—CRC可以做到
无差错接受
将数据和控制信息区分开
1、在数据链路层将
控制信息
和数据
组成在一个数据帧中;
2、在数据的接收端,还需要将它们分开;
3、帧包括
(1)帧起始、结束标志
(2)接收站标志
(3)控制字段(流控制、差错控制)
(4)帧校验序列
(5)数据部分
寻址
1、
地址
作为控制信息
,存在帧中;
2、主机的寻址流程
(1)发送主机将
源地址和目的地址
放入帧中;
(2)收到帧的主机将帧中的目的地址与自己的地址比较;
(3)不同,抛弃;相同,进一步处理。
3、寻址的方式
(1)单播 (2)组播 (3)广播
链路层功能之 流量控制
1、发送方和接收方处理数据的
速度必须匹配;
2、当出现不匹配时,数据传输失败;
3、通过
接收方控制发送方
发送数据的速度,保证数据传输的成功是计算机网络中常用的流量控制方式;
4、接收方使用
反馈机制
,向发送方应答,报告自己当前的接收情况和能力。接收能力由接收设备的处理速度、接收缓冲的容量等影响)
最后
简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。
面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。
另外,描述问题一定要慢!不要一下子讲一大堆,慢显得你沉稳、自信,而且你还有时间反应思路接下来怎么讲更好。现在开发过多依赖ide,所以会有个弊端,当我们在面试讲解很容易不知道某个方法怎么读,这是一个硬伤…所以一定要对常见的关键性的类名、方法名、关键字读准,有些面试官不耐烦会说“你到底说的是哪个?”这时我们会容易乱了阵脚。正确的发音+沉稳的描述+好听的嗓音决对是一个加分项!
最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。
希望大家都能找到合适自己满意的工作!
进阶学习视频
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
[外链图片转存中…(img-itERTR2U-1715352917779)]
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-nsinIYmV-1715352917780)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!