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

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地址在实际网络通信都具有各自重要的意义……

相关文章:

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报文…...

企业估值的三种方法

估值模型三剑客—DCF、P/E、EV /EBITDA 三种主要估值模型的优缺点: DCF 优点:通过对自由现金流的折现计算,反映了公司内在价值的本质,是最重要与最合理的估值方法。 缺点:未来自由现金流的估计不准确,受折现率影响…...

比亚迪正式签约国际皮划艇联合会和中国皮划艇协会,助推龙舟入奥新阶段

6月5日,比亚迪与国际皮划艇联合会、中国皮划艇协会在深圳共同签署合作协议,国际皮划艇联合会主席托马斯科涅茨科,国际皮划艇联合会秘书长理查德派蒂特,中国皮划艇协会秘书长张茵,比亚迪品牌及公关处总经理李云飞&#…...

宏集Panorama SCADA:个性化定制,满足多元角色需求

前言 在考虑不同人员在企业中的职能和职责时,他们对于SCADA系统的需求可能因其角色和工作职责的不同而有所差异。在SCADA系统的设计和实施过程中,必须充分考虑和解决这种差异性。 为了满足不同人员的需求, 宏集Panorama SCADA平台具备灵活的功能和定制…...

聪明人社交的基本顺序:千万别搞反了,越早明白越好

聪明人社交的基本顺序:千万别搞反了,越早明白越好 国学文化 德鲁克博雅管理 2024-03-27 17:00 作者:方小格 来源:国学文化(gxwh001) 导语 比一个好的圈子更重要的,是自己优质的能力。 唐诗宋…...

图片和PDF展示预览、并支持下载

需求 展示图片和PDF类型&#xff0c;并且点击图片或者PDF可以预览 第一步&#xff1a;遍历所有的图片和PDF列表 <div v-for"(data,index) in parerFont(item.fileInfo)" :key"index" class"data-list-item"><downloadCard :file-inf…...

图论第5天

127.单词接龙 需要cout看一下过程。 #include <iostream> #include <queue> #include <stack> #include <unordered_map> #include <unordered_set> #include <vector> using namespace ::std;class Solution { public:int ladderLength(…...

Java开发-面试题-0004-HashMap 和 Hashtable的区别

Java开发-面试题-0004-HashMap 和 Hashtable的区别 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&#xff09; 生活…...

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(一)

概览 在任何语言中对序列(或集合)元素的排序无疑是一种司空见惯的常规操作,在 Swift 语言里自然也不例外。序列排序看似简单,实则“暗藏玄机”。 要想真正掌握 Swift 语言中对排序的“各种姿势”,我们还得从长计议。不如就先从最简单的排序基本功开始聊起吧。 在本篇博…...

redis 04 redis结构

1.客户端...

【原创】springboot+mysql农业园区管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…...

web前端 孙俏:深度探索与实战之路

web前端 孙俏&#xff1a;深度探索与实战之路 在这个数字化、信息化的时代&#xff0c;web前端技术以其独特的魅力&#xff0c;吸引着越来越多的开发者投身其中。今天&#xff0c;我们将跟随孙俏的脚步&#xff0c;一同探索web前端的深度与广度&#xff0c;揭开其神秘的面纱。…...

opencv实战小结-银行卡号识别

实战1-银行卡号识别 项目来源&#xff1a;opencv入门 项目目的&#xff1a;识别传入的银行卡照片中的卡号 难点&#xff1a;银行卡上会有一些干扰项&#xff0c;如何排除这些干扰项&#xff0c;并且打印正确的号码是一个问题 最终效果如上图 实现这样的功能需要以下几个步骤…...

Windows API 开发桌面应用程序,在窗口按下鼠标左键不放可以拖图,并且拖图期间鼠标图标变成手掌

在Windows API中&#xff0c;要实现鼠标左键按下并拖动以移动窗口中的某个图形&#xff0c;并且同时改变鼠标图标为“手掌”形状&#xff08;这通常指的是“拖动”或“移动”的图标&#xff09;&#xff0c;你需要执行几个步骤。 以下是一个基本的步骤指南&#xff0c;用于在W…...

Docker的网络管理

文章目录 一、Docker容器之间的通信1、直接互联&#xff08;默认Bridge网络&#xff09;1.1、Docker安装后默认的网络配置1.2、创建容器后的网络配置1.2.1、首先创建一个容器1.2.2、ip a 列出网卡变化信息1.2.3、查看新建容器后的桥接状态 1.3、容器内安装常见的工具1.4、容器间…...

【数据结构】平衡二叉树左旋右旋与红黑树

平衡二叉树左旋右旋与红黑树 平衡二叉树 定义 平衡二叉树是二叉搜索树的一种特殊形式。二叉搜索树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一种具有以下性质的二叉树&#xff1a; 对于树中的每个节点&#xff0c;其左子树中的所有节点都小于该节点的值…...

2024蓝桥杯初赛决赛pwn题全解

蓝桥杯初赛决赛pwn题解 初赛第一题第二题 决赛getting_startedbabyheap 初赛 第一题 有system函数&#xff0c;并且能在bss上读入字符 而且存在栈溢出&#xff0c;只要过掉check函数即可 check函数中&#xff0c;主要是对system常规获取权限的参数&#xff0c;进行了过滤&…...

大模型多轮问答的两种方式

前言 大模型的多轮问答难点就是在于如何精确识别用户最新的提问的真实意图&#xff0c;而在常见的使用大模型进行多轮对话方式中&#xff0c;我接触到的只有两种方式&#xff1a; 一种是简单地直接使用 user 和 assistant 两个角色将一问一答的会话内容喂给大模型&#xff0c…...

【无标题】1877A

足球锦标赛中有 n支球队。每对队伍匹配一次。每场比赛结束后&#xff0c;Pak Chanek收到两个整数作为比赛结果&#xff0c;即两队在比赛中得分的数量。一支球队的效率等于本队每场比赛的总进球数减去对手每场比赛的总进球数。 比赛结束后&#xff0c;Pak Dengklek会计算每支球…...

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

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

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...