Linux网络编程:数据链路层协议

目录

前言:

1.以太网

1.1.以太网帧格式

1.2.MTU(最大传输单元)

1.2.1.IP协议和MTU

1.2.2.UDP协议和MTU

1.2.3.TCP协议和MTU

2.ARP协议(地址解析协议)

2.1.ARP在局域网通信的角色

2.2.ARP报文格式

2.3.ARP报文的传输 


前言:

为什么需要数据链路层

我们在之前的学习知道了网络层实现将数据报文从远端A主机经过若干个路由器的转发,最终到达目的主机B。

本质上就是数据从不同的局域网间进行转发直到转发到终点,比如家用主机转发到局域网中的家用路由器,家用路由器转发到局域网中的运营商路由器,最终在广域网这个“局域网”中转发到服务器!!!那么再按照相同的方式转发到目标主机B

 那么我们如何进行局域网之间的转发呢?也就是实现家用主机转发到家用路由器呢?这时我们就需要构建数据链路层协议来实现数据报文在局域网内进行转发。

因此我们也可以看出:网络层时确定往哪里发送,实现路由和路由选择的。而数据链路层就是一个跑腿的,实现数据包的发送。

局域网通信

在局域网中,所有主机都是直连的,这时某一台主机发送信息,其他主机都能够接收到这个信息,所以我们进行局域网通信时需要特别指定接收方进行信息响应,而其他主机不进行消息响应。


 MAC地址和IP地址

MAC地址(又称为---以太网地址):

  • MAC地址用来识别数据链路层中相连的节点;长度为48位,及6个字节
  • 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19) 在网卡出厂时就确定了,不能修改
  • mac地址通常是唯一的

  • IP地址作用:描述整个数据传输过程中的起点和终点(进行路径选择)
  • MAC地址作用:数据传输过程中在同一个局域网之间每一跳的起点和终点 

如何理解这两个地址呢?

我们知道在进行数据报文转发时,起始的IP地址可能为内网的IP,需要不断的通过局域网中的路由器转换成WAN口IP最后转为公网IP。而这个过程需要进行局域网中主机找到路由器,当前层路由器找到向上层转发的路由器,这时就需要MAC地址,进行局域网内的数据移动(因为局域网中的所有主机都能够读到局域网中发出的信息,那么这时我们进行对这个目的MAC地址进行比对)


交换机的引入 

通过MAC地址我们实现了:信息被对应的MAC地址的主机接收,但是当同一个局域网内获取到大量的信息,这时会出现数据碰撞问题,因为局域网可以看做多台主机的一份“临界”资源。

  • 局域网中,任何时刻只允许一台主机在向局域网中发送数据
  • 如果同时发送,会产生局域网数据碰撞问题,这时我们通过碰撞检测和碰撞避免算法来解决

如图:当我们引入交换机,交换机左端为A、B、F、E,右端为C、D、G

场景一:

A主机信息发送给E主机,如图这时A主机直接可以转发给E主机

场景二:

A发送信息给G,因为A到G之间存在交换机,此时就需要通过交换机转发到右边

交换机的作用:划分碰撞域,减少数据碰撞的概率

交换机的引入,实现了数据不会直接扩散在整个局域网中,只有数据需要跨碰撞域才会通过交换机,那么就允许不同的局部(碰撞域)同时发送信息,增大了传输效率。

1.以太网

1.1.以太网帧格式

目的地址和源地址

 表示当前数据报文需要发往局域网中的哪一个地址,当前的地址。这里的地址为mac地址


类型

表示当前的数据报文内存储的是IP数据包、还是ARP、RARP请求/应答


CRC

CRC-循环冗余校验码,用于校验数据传输过程中是否发生了更改、出错。

1.2.MTU(最大传输单元)

我们在Linux网络编程:网络层协议|IP-CSDN博客 曾经提及了MTU最大传输单元,即以太网帧的最大数据长度。实际上帧长度为:46~MTU大小,当以太网帧小于46时,会将他补齐至少为46字节,当以太网帧大于MTU时,会进行切片成适合的以太网帧。

这时我们联想到了快递的包裹大小也是有范围的,不会过于小也不会过于大。

1.2.1.IP协议和MTU

在IP协议中我们对过长的数据报文进行分片,最大有效载荷 = MTU - IP协议报头,并且将对应的报头标志位设为切片的状态,具体可以看Linux网络编程:网络层协议|IP-CSDN博客 这篇博客!!!

1.2.2.UDP协议和MTU

我们知道UDP协议是不可靠的传输层协议,他没有UDP的确认应答机制和超时重传机制,所以我们如果使用UDP协议进行通信时,报文大小过大,进入IP层就会出现切片成若干个UDP报文,那么这样数据丢包的可能性增加。所以UDP协议的 最大有效载荷大小 = MTU - UDP报头 - IP报头

1.2.3.TCP协议和MTU

同理我们知道TCP协议的最大有效载荷大小为: 最大有效载荷大小 = MTU - TCP报头 - IP报头,这个值也称为MSS。

在TCP三次握手期间,双方会进行各自主机的MTU大小进行协商(协议可能不同),双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值,并且选取最小的MSS值作为通信时的MTU大小

这里我们就需要注意加粗字段的内容来理解:“有效载荷”即可

2.ARP协议(地址解析协议)

2.1.ARP在局域网通信的角色

我们在前言中局域网通信模块,学习到了数据传输是需要MAC地址来实现的,那么对于发送端,他知道自己的源MAC地址,但是他怎么知道接收端的MAC地址呢?所以为了知道局域网内某个主机的MAC地址,我们实现了ARP协议,用来建立主机IP地址和MAC地址的映射关系

  1. 通信开始初期,在局域网内发送一条广播信息,内容大致为:我是主机A,我的MAC地址是MAC-A,我要和主机B进行通信,我知道你的IP是IP-B,请告诉我你的MAC-B
  2. 这时在局域网域中,所有主机都能够接收到这个信息,然后用自己的IP地址和IP-B匹配
  3. 最终其他的主机不接受这个报文,只有B主机接收,并返回MAC-B
  4. 这时我们就能够通过IP地址来找到对应的MAC地址,进而完成通信 

并且在实际通信中,ARP协议完成获取主机MAC地址后,会将其进行缓存,也就是不需要一致用过发送ARP请求报文来获取MAC地址,直接在这个缓存表获取即可。

值得一提的是:为了应对某一台主机的网卡设备更改导致MAC地址改变,所以ARP缓存表定期更新,重新发送ARP请求


这时我们回顾以太网帧格式:在图中我们就看到以太网报文中的有效载荷可以为IP报文、ARP请求/应答、RARP请求/应答。

2.2.ARP报文格式

我们已经知道了ARP报文可以作为以太网报文的有效载荷,发到局域网中进行IP地址到MAC地址的映射。如图为:发送ARP报文的以太网格式:

那么接下来我们来学习一下ARP报文的字段!!!

  • 硬件类型指链路层网络类型,1为以太网
  • 协议类型指要转换的地址类型,0x0800为IP地址
  • 硬件地址长度内填6字节
  • 协议地址长度内填4字节
  • op字段为1表示ARP请求,op字段为2表示ARP应答

2.3.ARP报文的传输 

  1. 首先完善ARP报文,然后通过MAC帧进行封装,默认以太网首部(报头)的目的地址为:FFFFFFF,表示传输给所有主机。并且帧类型设为
  2. 当发出ARP请求的报文进入局域网时,所有在局域网的主机都可以接收到,当接收到信息后,解包掉以太网首部,读取当前ARP报文的OP字段,如果是请求报文,那么接下来就分析IP地址是否符合
  3. 如果不符合,直接丢包。如果符合,那么就进行构建ARP应答报文,这时我们也获得了以太网首部的源MAC地址,接着进行以太网帧的构建并发送,完成IP地址和MAC地址的映射。

以上内容即为ARP地址解析,这里我们看出局域网中的任何一台主机都可能接收到ARP请求或者是ARP回应,并且ARP地址解析正是IP地址和MAC地址的互相映射,所以IP地址、MAC地址在实际网络通信都具有各自重要的意义……

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

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

相关文章

数据库中锁的机制和MVCC协议以及隔离级别

文章目录 数据库中的锁锁与索引的关系释放锁的时机乐观锁与悲观锁行锁与表锁共享锁与排它锁意向锁记录锁、间隙锁和临键锁记录锁间隙锁临键锁 锁优化方案 MVCC协议MySQL的隔离级别脏读和幻读快照读和当前读 版本链Read ViewRead View 与已提交读Read View 与可重复读m_up_limit…

工业无线wifi系统搭配高速路由,解决联网及数据传输

​面对日益复杂的工业应用场景,企业对无线网络的高速、可靠和安全提出了更高要求。星创易联SR600系列多网口4G路由器应运而生,为工业无线WiFi系统提供了一个性能卓越的高速路由方案。(key-iot.com/iotlist/sr600-5.html) SR600路由器集4G LTE、虚拟专用…

直播美颜工具解析:美颜SDK核心技术与性能优化方法

本篇文章,小编将深入解析直播美颜SDK的核心技术及其性能优化方法,以期为开发者提供有价值的参考。 一、美颜SDK核心技术 1.实时人脸检测与识别 美颜SDK的核心技术之一是实时人脸检测与识别。这项技术基于深度学习算法,能够快速、准确地识别…

零刻SER8 AMD 8845Hs Ryzen AI 本地部署大语言模型教程!

零刻SER8 8845HS,配备了一个内置的 NPU(神经网络处理单元),可以通过LM Studio语言大模型来部署己的 GPT 模型 AI 聊天机器人,AI 助手已迅速成为提高生产力、效率,甚至是头脑风暴的关键资源。在本地机器上运行 AI 聊天机…

数字人私有化部署系统厂商大比拼

数字人系统私有化部署放在2022年简直是天方夜谭,没有投资个上百万和数百万想建立自己的一个数字人saas平台是可望不可及的事。但是到了2023年,数字人私有化部署系统价格从最初的数十万,迅速被打压到数万元就可以拥有一个自己的数字人平台。可…

ArcGIS中几个好用的空间分析工具

ArcGIS是一款经典的GIS应用,其空间分析能力很强,有着丰富的空间分析工具。今天,我们一起来了解几个好用的空间分析工具的功用及操作。 注:演示版本为ArcMap10.4.1 1.方向分布(标准差椭圆) 路径&#xff…

陆面生态水文模拟与多源遥感数据同化的实践技术应用

了解陆表过程的主要研究内容以及陆面模型在生态水文研究中的地位和作用;熟悉模型的发展历程,常见模型及各自特点;理解Noah-MP模型的原理,掌握Noah-MP模型在单站和区域的模拟、模拟结果的输出和后续分析及可视化等方法;…

(一文读懂)大模型到底是怎么生成文字的?

前言 在人工智能的领域,大模型在去年已经成为了一个热门的话题。 各大厂商如谷歌、微软、OpenAI等,都在积极研发和应用大模型技术。 这些模型在语言理解、图像识别、推荐系统等方面都表现出了惊人的能力,甚至在某些任务上,已经…

【JS红宝书学习笔记】第6章 集合引用类型

第6章 集合引用类型 对象 数组与定型数组 Map、WeakMap、Set 以及 WeakSet 类型 1. object 很适合存储和在应用程序间交换数据。 显式创建object的两种方式: (1)new操作符 let person new Object(); person.name "Nicholas";…

MySQL是怎么保证持久性的(redo log日志相关)

Mysql中 事务的很多实现,都是因为有日志的支撑,比如binlog、undo log、redo log等 MySQL是怎么保证持久性的 持久性是指,事务一旦提交,它对数据库的改变就应该是永久性的,接下来的其他操作或故障不能对其有影响。In…

大数据数据治理

大数据数据治理介绍 大数据数据治理是一个复杂的过程,涉及到数据的标准化、融通、关联、解析、聚合等一系列活动。其核心目标是在确保数据安全的基础上,提高大数据资源和资产的可用性、易用性和可靠性,从而显著提升大数据资源和资产的价值7。…

Ktor库的高级用法:代理服务器与JSON处理

在现代网络编程中,Ktor是一个高性能且易于使用的框架,它提供了对异步编程、WebSockets、HTTP客户端和服务器等特性的原生支持。Ktor是使用Kotlin语言编写的,充分利用了Kotlin的协程特性来简化异步编程。本文将深入探讨Ktor库的高级用法&#…

AlDente Pro for Mac(电池最大充电限制工具)v1.24激活版

AlDente Pro for Mac是一款运行在MacOS平台上专业的电池最大充电限制工具。通过 AlDente Pro 您可以设置电池的最大充电百分比设置为 20% 至 100%,然后,它将保持在所需的电池百分比,然后再次使用电源适配器进行充电。 …

安徽某高校数据挖掘作业4-5 (与一些碎碎念)

1. 编写程序求函数、、的极限。 解答: import sympy as sp# 定义符号变量 x x sp.symbols(x)# 定义函数 f1 sp.sin(20 * x) / x f2 (1 4 * x)**(2 / x) f3 (1 4 / x)**(2 * x)# 计算极限 limit1 sp.limit(f1, x, 0) limit2 sp.limit(f2, x, 0) limit3 sp…

跨域请求解决方法----不允许有多个 ‘Access-Control-Allow-Origin‘ CORS 头

后端配置了代码: spring:application:name: spzx-server-gatewaycloud:nacos:discovery:server-addr: localhost:8848gateway:discovery:locator:enabled: trueglobalcors:cors-configurations:[/**]:allowedOriginPatterns: "*"# 允许请求中携带的头信息…

连锁门面预付费电表管理系统

1.什么叫连锁门面预付费电表管理系统? 连锁门面预付费电表管理系统是一种前沿的电力管理解决方案,尤其适用于拥有众多分店的服务提供商。该系统容许用户使用电力以前预先支付花费,有效解决传统式后付模式的收支明细纠纷案件和扣费难题。 2.系统的核心…

非递归实现快排排序及归并排序(尾篇)

1.快速排序(双指针实现) 2.非递归实现快排 3.递归实现归并排序 4.非递归实现归并排序 5.总代码 1.快速排序(双指针实现) 俩有个指针一前一后的排放着,cur先走并且去找比kye对应值小的数组值,一旦找到后…

x86国产化麒麟系统上安装docker及问题解决

以前感觉安装docker没有问题,所以没有记录怎么安装的,最近在国产化系统上安装docker总是失败,经过仔细研究完全解决了该问题,特此记录。 参考链接: 在 OpenKylin 上安装 Docker 按照上面的链接可以知道整个docker安装…

EMC整改学习-笔记

EMC整改学习-笔记 来自赛盛技术的笔记 如果我拿到一个产品超标的一个频谱图的话,首先我们可以对比做一个分析。来确定你干扰源的一个分类和定义是哪些。是你这个产品类型,什么样的电路对应什么样的一个。从我们的一个大量的一个测试数据的经验来看&…

超全面,编程语言汇总,看看哪些语言适合GIS开发?

最近总有很多人关心GIS开发语言的问题,这个确实很重要,毕竟学习一门编程语言需要花费不少时间和精力,找不到合适GIS的编程语言意味着浪费时间。 首先我们来简单看一下常见的编程语言有哪些,后续再给大家介绍哪些语言适合GIS开发&a…