数据链路层(学习笔记)

首先要明确“数据链路”和“链路”这两个概念:

  链路:从一个节点到相邻节点的一段物理现路,其中间没有任何的交换节点,所以可以说链路只是一条路径的组成部分。
  数据链路:当需要在一条线路上传送数据的时候,除了要有一条物理线路还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的软硬件添加到链路上就形成了数据链路。其中最常使用网络适配器来实现这些协议,一般都包括数据链路层和物理层的功能。
  数据链路层负责相邻设备之间的数据传输,数据单元为帧,主要的设备是交换机,主要工作是将网络层交下来的IP数据报添加首部和尾部封装成帧,然后将封装好的帧发送给接收方的数据链路层,接收方如果收到的帧是无差错的,就从中提取IP数据报交付给网络层,否则丢弃。
  所以在数据链路层的协议要解决三个问题:封装成帧、透明传输和差错控制。

  1. 封装成帧:在数据的首端和尾端添加首部和尾部封装成帧,这样可以判断一个帧的完整性。
  2. 透明传输:虽然帧的开始(SOH)和结尾(EOT)是ASCLL码不可打印的控制字符,但是他的二进制形式很有可能和数据中的二进制相同,造成帧提前结束,透明传输就是用来解决这一问题。在数据中出现控制字符前插入转义自读“ESC”,接收方接收到帧将这个转义字符删掉,然后发往网络层。如果前面刚好有一个转义字符,在插入一个转义字符,然后删掉最前面的。
  3. 差错控制:为了保证可靠性,使用CRC(循环冗余校验码)。由于数据链路层不要求可靠传输,CRC只做到对帧的无差错接收,只是为了避免比特差错,但是仍然会出现传输差错(帧丢失、帧重复、帧失序)。
CRC校验

  先在要发送的帧后面附加一个数(这个就是用来校验的校验码,它是二进制序列),从而生成一个新帧发送给接收端。这个附加的数要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除。到达接收端后,再把接收到的新帧除以这个选定的除数。因为之前在发送端发送数据帧时就已通过附加一个校验码,做了“去余”处理,所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。

MTU

  MTU相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层而产生。以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;最⼤大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,不同的数据链路层标准的MTU也是不同的。如果数据包长度大于相应链路的MTU,则需要对数据包进分片。需要注意的是IPv4主机对其产生的数据执行分片,IPv4路由器对其转发的数据也进行分片,然而IPv6只在数据产生的主机分片,其路由器对转发的数据不进行分片

MTU对IP协议的影响

  由于数据链路层MTU的限制,对于较大的IP数据包就要进行分包。
  将较大的IP包分成多个小包,并给每个小包上打上标签。每个小包的IP协议头的16标识(ID)都是相同的。每个小包的IP协议头的3位标志字段中,第二位置为0,标识允许分片,第3位来表示结束标记,如果当前是最后一个包置1,否则置0。到达对端是再将这些小包按顺序重组,拼接到一起返回给传输层。这些小包中任意一个包丢失,接收端的重组就会失败,但是IP层不会负责重新传输数据。

MTU对UDP协议的影响

  一旦UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么就会在网络层分成多个IP数据报。这些IP数据报中由任意的一个丢失了,都会引起接收端网络层重组失败,这就意味着如果UDP在网络层备份片,整个数据被丢弃的概率就大大增加了。

MTU对TCP协议的影响

  TCP的一个数据报也不能无限大,还是会受到MTU的限制,TCP的单个数据报的最大消息长度被称为MSS,TCP在建立链接的过程中,通信双方会进行MSS协商。在最理想的情况下,MSS的值真好使IP不会被分片处理的最大长度,但是这个长度仍然受数据链路层的MTU限制。双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值,然后双方得知对方的MSS值后,选择两者最小的作为最终的MSS。MSS的值就是在TCP首部的40自己变长选项。

MTU和MSS的关系

  MTU:最大传输单元,由硬件规定,比如说以太网的MTU位1500字节。
  MSS:最大分节大小,位TCP数据包每次传输的最大数据分段大小,一般由发送端向对端TCP通知对端在每个分节中能发送的最大TCP数据。
  MSS值 = MTU - IPv4 Header(20字节) - TCP Header(20字节)/UDP Header(8字节)

ARP协议

  ARP不是一个单纯的数据链路层协议,他是介于数据链路层和网络层之间的协议。

ARP协议的作用

  ARP协议建立了主机IP地址和MAC地址之间的映射关系。在网络通信时,源主机的应用程序直到目的主机的IP地址和端口号,却不知道目的主机的硬件地址。因为数据包首先是被网卡接收到再去处理上层协议的,如果接受的数据包的硬件地址与本机不符合,直接丢弃,所以在铜锌铅必须先获得目的主机的硬件地址

ARP协议的工作流程

在这里插入图片描述
  源主机发出ARP请求,询问IP地址是172.168.0.1的主机的硬件地址是多少,并将这个请求广播到本地网段,目的主机接收到广播的ARP请求,发现其中的IP地址和本机相符,就发送一个ARP应答数据包给源主机,将自己的硬件地址信息填写到应答包中。
  每台主机都会维护一个ARP缓存表,缓存表中的表项中有过期时间,一般为20分钟,如果在这段时间中没有再次使用某个表项,这个表项就失效,下次还需要发送ARP来获取该表项目的主机的硬件地址
在这里插入图片描述

ARP数据报的格式

【数据报格式图】
  源MAC地址、目的MAC地址在以太网首部和ARP请求中个出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其他类型的网络则有可能是必要的。
  硬件类型是指链路层网络类型,1为以太网
  协议类型指要转换的地址类型,0x0800为IP地址
  硬件地址长度队医以太网地址为6字节
  协议地址长度对于IP地址为4字节
  op字段为1表示ARP请求,2为ARP应答

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免otp动态密码登录堡垒机

环境准备 安装brew 参考文档:https://brew.sh/index_zh-cn.html 安装oath-toolkit 和expect brew install oath-toolkit brew install expect 正式开始 生成MFA_KEY对应的6位otp密码:oathtool -b --totp [MFA_KEY] MFA_KEY就是你绑定APP时&#x…

英特尔10纳米处理器再度跳票,或收缩芯片代工业务

来源:腾讯科技摘要:在全球半导体行业,线宽(N纳米)是制造厂商进行激烈竞争的指标。在全球半导体行业,线宽(N纳米)是制造厂商进行激烈竞争的指标。据报道,英特尔将延期到20…

简单GDB调试

GDB下载 使用yum工具直接下载 生成可用gdb调试的可执行程序 -g 会保留源文件中的函数名和变量名 启动gdb gdb 可执行程序名 set args xxx xxx 给程序传参查看程序中的源代码 当前文件 l(list) l 行号 l 函数名 非当前文件 l 文件名:行号 l 文件名&#xf…

人工智能应用需要高可信性(180806)

来源:科学网摘要:近日,“Rekognition”却闹了一个大乌龙:28名美国国会议员被它识别成了罪犯。小编搞了大半辈子测试和容错,对这方面消息比较敏感。最近看到新闻,商业巨头亚马逊2016年推出图像识别AI系统“R…

暑假集训中期测试 Problem D: 装箱问题2 (并查集)

Description 有很多个棱长为1的正方体货物整齐地堆在一堆。不过有一些是悬空的, 大概是粘上去的吧。。。 给出这些货物的相邻关系,求最小的长方体(或正方体)能装下这些货物的集装箱的体积,(集装箱棱长方向与…

s3cmd安装及使用

一、安装 1.下载安装包。 这里我们使用s3cmd-1.0.0.tar.gz安装包 2.解压安装包 tar xzvf s3cmd-1.0.0.tar.gz 3.移动路径 mv s3cmd-1.0.0 /usr/local/s3cmd 4.创建软链接 ln -s /usr/local/s3cmd/s3cmd /usr/bin/s3cmd 5.执行配置命令(按提示输入相应密码等) s3cmd -…

二叉树——堆

二叉树顺序存储结构 理解堆之前先理解一下二叉树的顺序存储结构。普通的二叉树并不适合顺序存储,因为可能会造成大量的空间浪费。只有完全二叉树适合顺序结构存储。显示中我们通常把堆使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统中虚拟进程…

hive函数大全:11大类、109个函数

磨刀不误砍柴工&#xff0c;学完函数再sql 目录 一、关系运算 1. 等值比较: 2. 不等值比较: <> 3.小于比较: < 4. 小于等于比较: < 5. 大于比较: > 6. 大于等于比较: > 7. 空值判断: IS NULL 8. 非空判断: IS NOTNULL 9. LIKE比较: LIKE 10. J…

open AI 在DOTA 5v5 比赛中战胜职业选手

来源&#xff1a;AI科技大本营摘要&#xff1a;去年&#xff0c;OpenAI 在 DOTA 的 1v1 比赛中战胜了职业玩家 Dendi&#xff0c;而在距离进阶版 OpenAI Five 系统战胜人类业余玩家不过一个月的时间&#xff0c;今天凌晨&#xff0c;它又以 2:1 的战绩再次完成对人类高级玩家的…

C/C++程序从源代码到可执行程序的流程

对于一个C/C编写的程序&#xff0c;从源代码到可执行程序的过程通常是由IDE来完成的&#xff0c;一般分为四个步骤&#xff1a;预处理、编译、汇编、链接&#xff0c;下面就来详细说一下这四个步骤。 预处理&#xff1a; 主要是对其中的伪指令和特殊符号进行处理&#xff1a; …

Python 两种装饰器

目录 带参数的装饰器&#xff08;函数&#xff09; 类装饰器 装饰器(Decorators)是 Python 的一个重要部分。简单地说&#xff1a;他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短&#xff0c;也更Pythonic&#xff08;Python范儿&#xff09;。 带参数的装…

如何体现机器智能和群体智能的关系,2018新版互联网大脑模型绘制

作者&#xff1a;刘锋 计算机博士 互联网进化论作者2018年新的这一版&#xff0c;也是互联网大脑模型图的第五个版本&#xff0c;距离第一版的发布已经有10年时间&#xff08;2008年&#xff09;&#xff0c;距离上一版第四版也有1年时间&#xff0c;在这一版中主要解决了如何…

Python可变传参: *args和**kwargs

args是参数的数组&#xff0c;kwargs就是当你传入keyvalue是存储的字典。 请看例子&#xff1a; def test(a,*args,**kwargs): print "a: ",a print "args: ",args print "kwargs: ",kwargs test(1,2,3,d4,e5) 输出结果&#xff1a; a: 1 args: …

7/7 第7篇 函数名与函数指针

第7篇 函数名与函数指针 一 通常的函数调用 一个通常的函数调用的例子&#xff1a; //自行包含头文件 void MyFun(int x); //此处的申明也可写成&#xff1a;void MyFun( int ); int main(int argc, char* argv[]) { MyFun(10); //这里是调用MyFun(10);函数 return 0; }…

全球互联正在创造一个知识极大丰富和隐私终结的时代

来源&#xff1a;资本实验室摘要&#xff1a;据预测&#xff0c;到2020年&#xff0c;全球物联网连接设备将超过500亿个&#xff0c;会产生600泽字节的信息。这么庞大的数据量&#xff0c;将如何影响并改变我们的生活和工作&#xff1f;聚焦前沿科技创新与传统产业升级据预测&a…

大数据计算引擎:impala对比hive

目录 Impala与Hive的异同 数据存储 元数据 SQL解释处理 执行计划&#xff1a; 数据流&#xff1a; 内存使用&#xff1a; 调度&#xff1a; 容错&#xff1a; 适用面&#xff1a; Impala相对于Hive所使用的优化技术 Impala的优缺点 Impala与Hive的异同 数据存储 …

从外部调用Django模块

import os import sys sys.path.insert(0,/data/cloud_manage) from django.core.management import setup_environ import settings setup_environ(settings)from common.monitor import Monitor from django.db import connection, transaction 前提就是&#xff0c;要新建一…

泡沫破裂之后,强化学习路在何方?

作者&#xff5c;侯宇清、陈玉荣来源&#xff5c;智能单元编辑&#xff5c;Debra一、深度强化学习的泡沫2015 年&#xff0c;DeepMind 的 Volodymyr Mnih 等研究员在《自然》杂志上发表论文 Human-level control through deep reinforcement learning[1]&#xff0c;该论文提出…

常见的设计模式--单例模式

设计模式 设计模式&#xff08;Design Pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的是为了代码可重用性、让代码更容易被他人理去解、保证代码可靠性。 设计模式使代码编写真正工程化&#xff1b;设计模式是软件工…

一篇文章搞懂数据仓库:维度表(设计原则、设计方法)

目录 1、什么是维度表&#xff1f; 2、维度表设计原则 &#xff08;1&#xff09;维度属性尽量丰富&#xff0c;为数据使用打下基础 &#xff08;2&#xff09;给出详实的、富有意义的文字描述 &#xff08;3&#xff09;区分数值型属性和事实 &#xff08;4&#xff09;…