数据链路层【Linux网络复习版】

2024-06-20 16:52

本文主要是介绍数据链路层【Linux网络复习版】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

目录

 

一、数据链路层主要解决的是什么问题?

二、什么是以太网?

三、什么是MAC地址?

 四、以太网帧的格式是什么?

五、 什么是MTU?

六、MTU和分片

MTU对IP协议的影响?

 如何分片?

如何组装? 

如何识别有无丢失?

 怎么知道第一个是不是被分片了?

怎么避免分片?MSS

 七、局域网内主机如何通信?

交换机 

八、ARP协议

ARP协议的工作原理

 ARP协议报头

ARP请求发送过程 

 ARP应答发送过程

ARP欺骗


一、数据链路层主要解决的是什么问题?

直接相连的主机(同一网段的主机-路由器)进行数据交付的过程。

二、什么是以太网?

以太网(Ethernet)是一种局域网技术。既包含数据链路层的内容,也包含了一些物理层的内容。除了以太网以外,还有令牌环网,无线LAN等。

三、什么是MAC地址?

MAC地址用来识别数据链路层中相连的节点,在网卡出厂时就确定了,不能修改,具有全球唯一性(虚拟机中的MAC地址不是真实的MAC地址,可能会有冲突;也有写网卡支持用户配置MAC地址)

MAC地址长度为48位,即6字节,一般用16进制数字加上冒号的形式来表示。

 四、以太网帧的格式是什么?

以太网帧首部由 目的mac地址、源mac地址类型组成。

帧类型:该字段的值通常是一个16位的十六进制数,对应不同的协议使用不同的值。例如:

  • 0x0800:表示IP数据报,会把有效载荷交给上层 ------ 网络层        
  • 0x0806:表示ARP请求/响应,发起ARP请求/应答。

五、 什么是MTU?

以太网中规定数据长度最小为46字节,最大为1500字节,ARP数据包长度如果不够46字节,就要在后面补填充位。

MTU就是以太网的最大传输单元:1500(不包括以太网首部),不同的网络类型有不同的传输单元。

六、MTU和分片

MTU对IP协议的影响?

 由于数据链路层MTU的限制,网络层就要对较大数据包进行分片。

 如何分片?

3位标志:第二位表示是否允许分片(0允许);第三位是结束标记(当前是否是最后一个小包,0是/1不是)

13位片偏移:比如4500字节的数据要进行分片,那么第一片的片偏移就是0,第二片的片偏移是1500,第三片的片偏移就是3000。

如何组装? 

a.将分片全聚在一起

b.根据片偏移排序

如何识别有无丢失?

根据片偏移计算。

一旦这些小包中任意一个小包丢失,接收段重组就会失败,但IP层不负责重传。

 怎么知道第一个是不是被分片了?

片偏移为0且接结束标记为1。

怎么避免分片?MSS

分片会增加丢包概率,因为ip中任何一个分片丢失,都要上层重发。所以尽量不分片。

双方tcp三次握手时,协商好双方mss的较小值,就能避免分片。

以太网的mtu是1500(有效载荷)

则 IP的最大有效长度 = 1500 - IP报头(20Byte)=  1480

则 TCP的最大有效长度 = 1480 - TCP报头(20Byte)= 1460

1460数据就是MSS,通信双方的MSS尽量保持一致,减少分片。

 七、局域网内主机如何通信?

局域网中,是以广播的形式来通信的,就好像在一个班级里,老师说:“xxx过来一下”,此时全班的学生都收到了这条消息,只不过不是告诉自己的,就自动丢弃了。

局域网中任何时刻只允许有一条消息在信道上,否则会产生碰撞(有碰撞检查、碰撞避免算法),那么如果局域网内很多主机,碰撞的概率就会加大,如何缓解?

交换机 

 划分碰撞域,在概率上减少局域网碰撞。

此时,交换机左侧和右侧主机可以同时进行内部通信(eg:h1发给h2,h3发给h4),此时就能见效冲突概率。

数据包每到达一个路由器都要重新解包和封包,更新下一跳的mac地址,mac帧只在局域网中有效。

八、ARP协议

当主机A想跨网络传输到主机B,当数据包到主机B所在网络的网关路由器时,该路由器只知道源ip和目的ip,它如何在局域网内将该数据包送给主机B呢?这是候就要用到ARP协议,来获得IP对应的mac地址。ARP协议建立的IP和MAC地址的映射关系

该协议虽然归属数据链路层,但实际是介于数据链路层和网络层之间的协议。

ARP协议的工作原理

在局域网内广播一条消息,问局域网内xxip地址是谁,对应的mac地址是多少。所有主机收到后,根据xxip发现是向我发起的ARP请求,那么就给它响应一条消息,告诉它自己的mac地址是多少。

 ARP协议报头

硬件类型:数据链路层网络类型,1为以太网。

协议类型:只要转换的地址类型,0x0800为IP;

硬件地址长度:对于以太网为6字节。

协议地址长度:对于IP地址为4字节。

op:1表示ARP请求,2表示ARP应答。

ARP请求发送过程 

如果局域网内一台主机想知道局域网内另一台主机的mac地址(已知其ip地址),那么它可以发起一个ARP请求。

填充ARP报头:

op填1(请求)

发送端mac地址和发送端ip地址:自己的mac地址和ip地址。

目的mac地址:未知,填全F

目的ip地址:已知的

mac帧报头:

目的mac地址:全F(表示广播)

源mac地址:自己的mac地址

由于以太网mac地址是全F,广播,所以局域网内每台主机都会收到,到达某台主机的mac帧层时,发现它的目的mac地址是广播地址,就把数据帧向上交付给ARP层。

ARP层

1)先看op字段。

2)发现op字段是请求,那么继续看目的ip地址,如果与当前主机ip地址相同,则说明是发给本主机的,本主机就会给对方回一个ARP应答。

 ARP应答发送过程

目标主机收到应答,mac帧层发现是发给自己的,将数据帧向上交给ARP层。

ARP层:

1)先看op字段,发现op是2(即应答)

2)提取发送端mac地址+发送端ip地址

如果是其他主机收到应答,那么它在数据链路层就发现不是发给自己的,就丢弃了。

ARP欺骗

1)如何获得同一网段下的其他所有主机的mac地址?

用自己的ip地址和子网掩码按位与得到网络号,遍历所有的ip地址,ping一下,就ok了。

2)ARP欺骗

ARP的缓存是有时间限制的,且多次发送收到应答时,往往会以最新的为准。

同一个局域网内的hostM(攻击机)可以伪造应答发疯狂发送给hostA,hostA就会以为ipA的mac地址是macM,那么它就会给hostM发送报文。

hostM可以选择丢弃该报文,也可以替hostA向Route R去请求,Route R应答也会发送给我,此时hostM就成了中间人。

这篇关于数据链路层【Linux网络复习版】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078704

相关文章

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I