当前位置: 首页 > news >正文

【Linux】数据链路层

一、数据链路层引入

1.1 数据链路层的功能

       在网络层中,我们使用IP协议进行通信,需要进行跨网络转发到目标主机,本质上就是一个报文经历了无数个子网,而数据链路层就是解决在一个子网中如何传输报文的问题。

       数据链路层的功能是:用于两个设备(同一种数据链路节点)之间进行传递。

1.2 认识以太网

       “以太网”不是一种具体的网络,而是一种技术标准,即包含数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;

  • 例如以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等;
  • 以太网是当前应用最广泛的局域网技术,和以太网并列的还有令牌环网,无线LAN等。

1.3 交换机

1.3.1 什么是交换机 

       交换机是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。交换机工作于OSI参考模型的第二层,即数据链路层。交换机拥有一条高带宽的背部总线和内部交换矩阵,在同一时刻可进行多个端口对之间的数据传输。交换机的传输模式有全双工,半双工,全双工/半双工自适应。

1.3.2 交换机的工作原理

       当交换机收到数据时,它会检查它的目的MAC地址,然后把数据从目的主机所在的接口转发出去。交换机之所以能实现这一功能,是因为交换机内部有一个MAC地址表,MAC地址表记录了网络中所有MAC地址与该交换机各端口的对应信息。某一数据帧需要转发时,交换机根据该数据帧的目的MAC地址来查找MAC地址表,从而得到该地址对应的端口,即知道具有该MAC地址的设备是连接在交换机的哪个端口上,然后交换机把数据帧从该端口转发出去。

  1. 交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中。
  2. 交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由哪个端口进行转发。
  3. 如数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转发。这一过程称为泛洪(flood)。
  4. 广播帧和组播帧向所有的端口转发。

1.3.3 交换机的功能和作用

1.学习MAC地址

       交换机了解每一端口相连设备的MAC地址,并将地址同相应的端口映射起来,并存放在交换机缓存中的MAC地址表中。如果接收到新的端口回应,它可以学习新的MAC地址并记录好。

2、转发数据帧

       当一个数据帧的目的地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口。消除回路 当交换机包括一个冗余回路时,以交换机通过生成树协议避免回路的产生,同时允许存在后备路径。

3、连接不同网络

       交换机除了能够连接同种类型的网络之外,还可以在不同类型的网络之间起到互连作用。如今许多交换机都能够提供支持快速以太网或FDDI等的高速连接端口,用于连接网络中的其它交换机或者为带宽占用量大的关键服务器提供附加带宽。

4、划分局域网

       交换机可以像网桥那样,将局域网分为多个冲突域,每个冲突域都是有独立的宽带,因此大大提高了局域网的带宽。

二、以太网的帧格式

       对于不同类型的MAC帧的格式是不一样的,类型为0800的是IP数据报;类型为0806的是ARP请求和应答报文;类型为8035的是RARP请求和应答报文。

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
  • 帧末尾是CRC校验码。

三、MAC地址

3.1 认识MAC地址

  • MAC地址用来识别数据链路层中相连的节点
  • 长度为48位,即6个字节,一般使用16进制数字加上冒号形式来表示(例如:08:00:27:03:fb:19)
  • 在网卡出厂时就确定了,不能进行修改,MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会发生冲突,也有些网卡支持用户配置MAC地址)
  • 在日常生活中,我们有一些硬件中也是有自己的唯一的标号,这个标号可以帮助厂家来判断这个硬件是不是自己家生产的,也可以帮助厂家去定位自己产品的生产线。

3.2 对比理解MAC地址和IP地址

  • IP地址描述的是路途总体的起点和终点
  • MAC地址描述的是路途上的每一个区间的起点和终点

四、MTU

4.1 了解一下MTU

       MTU相当于在发快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层产生的限制。

  • 以太网帧中的数据长度规定最小是46字节,最大是1500字节的,ARP数据报的长度不够46字节,要在后面补充填位
  • 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
  • 如果一个数据报从以太网路由到拨号链路上,数据报长度大于拨号链路的MTU,则需要对数据报进行分片
  • 不同的数据链路层标准的MTU是不同的

4.2 MTU对IP协议的影响

       由于数据链路层MTU的限制,对于较大的IP数据报要进行分包,一旦有一个分片丢失,就要重新传输这些报文分片,占用带宽。

  1. 将较大的IP报文分成多个小包,并给多个小包打上标签
  2. 每一个小包的IP协议头的16位标识ID都是相同的
  3. 每一个小包的IP协议头的3位标志字段中,第二位置为0,表示允许分片;第三位表示结束标记(当前是否是最后一个小包,是的话置为1,不是的话置为0)
  4. 达到对端时再将这些小包按顺序重组,拼装到一起返回给传输层
  5. 一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但是IP层不会负责重新传输数据

4.3 MTU对UDP协议的影响

       首先,我们先来回顾一下UDP协议:一旦UDP携带的数据超过1472(1500 - 20(IP首部)- 8(UDP首部)),那么就会在网络层中分成多个UDP数据报。

       这些UDP数据报有任意一个丢失,都会引起接收端网络层重组失败,那么这就意味着:如果UDP数据报在网络层中分片,整个数据被丢失的概率就大大增加了。

4.4 MTU对于TCP协议的影响

我们也来回顾一下TCP协议:

  • TCP的一个数据报也不能无限大,还是受限于MTU,TCP的单个数据报的最大消息长度称为MSS。
  • TCP在建立连接的过程中,通信双方会进行MSS协商。在三次握手的时候,会通过报文告诉对方自己的窗口大小,在选项中会携带MSS字段告诉对方自己的MSS。
  • 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度还是受限于数据链路层的MTU)
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值
  • 然后双方得知对方的MSS值后,选择较小的作为最终MSS
  • MSS的值就是在TCP首部的40字节变长选项中

4.5 查看硬件地址和MTU

我们可以在服务器上使用ifconfig命令查看IP地址和MAC地址和MTU:

五、ARP协议

       当我们知道要发送报文的目标IP地址后,如何在数据链路层中发送到对应的主机中呢,因为我们并不知道其MAC地址,但是我们知道其IP地址,所以我们现在需要从IP地址中得知其MAC地址,这里就引入一个新的协议——ARP协议,ARP协议不仅仅是一个数据链路层协议,而是一个介于数据链路层和网络层之间的协议。

5.1 ARP协议的作用

ARP协议建立了主机IP地址和MAC地址的映射关系。

  1. 在网络通讯中,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
  2. 数据报首先是被网卡接收到再去处理上层协议,如果接收到的数据报的硬件地址和本机不符,则需要直接丢弃;
  3. 因此在通讯前必须获得目的主机的硬件地址。

5.2 ARP协议的工作流程

       源主机发出ARP请求(广播),询问IP地址是192.168.0.1的主机的硬件地址是多少,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播)

       目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据报给源主机,将自己的硬件地址填写在应答包中;如果发现其中的IP地址和本机不符,直接在数据链路层中丢弃

       每一台主机都维护一个ARP缓存表,可以使用arp -a命令查看,缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还有发ARP请求来获得目的主机的硬件地址。因为有可能在之后其IP地址对应的网卡进行更换。

5.3 ARP数据报的格式(应该不重要)

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring3-IoC1-IoC容器、基于xml管理bean
  • Android 源码多个Launcher设置默认Launcher
  • 『功能项目』C#拓展 - 优化冗余脚本【36】
  • 目标检测从入门到精通——数据增强方法总结
  • 使用vue2+axios+chart.js画折线图 ,出现 RangeError: Maximum call stack size exceeded 错误
  • 远程访问电脑共享文件
  • 一文说清什么是数据仓库
  • 灌区信息化建设的主要内容
  • 视频监控基础学习
  • GaN挑战Si价格底线?英飞凌推出全球首个12英寸GaN晶圆技术
  • 使用程序方式获取与处理MySQL表数据
  • [Unity Demo]从零开始制作空洞骑士Hollow Knight第二集:通过InControl插件实现绑定玩家输入以及制作小骑士移动空闲动画
  • Spring Cloud之二 微服务注册
  • JS中判断字符串中是否包含指定字符
  • 代码随想录刷题day32丨动态规划理论基础,509. 斐波那契数, 70. 爬楼梯, 746. 使用最小花费爬楼梯
  • Shadow DOM 内部构造及如何构建独立组件
  • Vue学习第二天
  • 阿里云Kubernetes容器服务上体验Knative
  • 新书推荐|Windows黑客编程技术详解
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​【已解决】npm install​卡主不动的情况
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​力扣解法汇总946-验证栈序列
  • ​用户画像从0到100的构建思路
  • #### go map 底层结构 ####
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • ()、[]、{}、(())、[[]]命令替换
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (16)Reactor的测试——响应式Spring的道法术器
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (pytorch进阶之路)扩散概率模型
  • (安卓)跳转应用市场APP详情页的方式
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)换源+apt-get基础配置+搜狗拼音
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (论文阅读30/100)Convolutional Pose Machines
  • (四)Controller接口控制器详解(三)
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (转)原始图像数据和PDF中的图像数据
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET Core Web APi类库如何内嵌运行?
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .NET连接数据库方式
  • .Net面试题4
  • .net生成的类,跨工程调用显示注释
  • .Net中ListT 泛型转成DataTable、DataSet
  • .so文件(linux系统)
  • :class的用法及应用
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • [04]Web前端进阶—JS伪数组