[Linux][网络][数据链路层][二][MTU][ARP协议]详细讲解

news2024/10/6 6:06:27

目录

  • 1.MTU
    • 1.认识MTU
    • 2.MTU对IP协议的影响
    • 3.MTU对UDP协议的影响
    • 4.MTU对TCP协议的影响
  • 2.ARP协议
    • 0.情景铺垫
    • 1.ARP协议的作用
    • 2.能不能根据路由器 + 该报文的目标IP,确认清楚这个IP一定在它的子网当中?
    • 3.以太网协议(MAC帧)与ARP协议之间有什么关系?
    • 4.ARP协议的工作流程
    • 5.ARP协议的格式
    • 6.ARP看起来至少进行一次请求和一次应答,是不是每一次发送数据都要这么干?
    • 7.是不是只在目标主机最终的子网中进行ARP,其他地方会不会发生ARP呢?


1.MTU

1.认识MTU

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

2.MTU对IP协议的影响

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

3.MTU对UDP协议的影响

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

4.MTU对TCP协议的影响

  • 对TCP的影响和UDP是一样的,只不过TCP会重传,但是毕竟也是会消耗资源的,所以尽量还是不要分片

    • 因为MAC帧的规定而导致的网路层发生分片,就会增加丢包概率
    • 而为了减少这样的情况,那么此时就应该让IP报文将自身交付给MAC帧时(充当MAC帧的有效载荷的时候)长度不要超过1500,也就是IP报文整体大小不要超过1500
  • IP协议要发多大的数据,不由IP协议决定,IP协议就是一个跑腿的,真正的决策(一次发送多大的数据、发多少、丢包了怎么办)是由传输层决定的,所以IP协议也没有办法

  • 所以此时因该能够让TCP单次发送报文的时候,报文的大小不要超过某一个数字:MSS(Maximum segment size,最大段尺寸)

    • MTU = 1500 = IP
    • IP有效载荷 = 1500 - IP报头长度(20) = TCP + 数据 = 1480
    • 数据 = 1480 - TCP报头长度(20) = 1460
    • MSS不能大于1460
      请添加图片描述
  • TCP在建立连接的过程中,通信双方会进行MSS协商

    • 在最开始的时候,一个数据都没有发,因为这个MTU有可能会变化,其次发送方也想让接收方知道,其单次发送一个报文的大小 – MSS的大小(为了更顺畅的进行通讯)
    • 所以在进行建立链接的时候,双方就会进行MSS的协商,也就是三次握手的时候,除了会协商双方的接收能力,也会进行协商双方单个报文的大小,尽量减少数据发送体积的问题
    • 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)
    • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值
      • MSS的值就是在TCP首部的40字节变长选项中(kind = 2)
    • 然后双方得知对方的MSS值之后,选择较小的作为最终MSS
  • 总结:

    • 以上也说明了**分片不是主流,**因为当它们在建立握手的过程中的时候,交换了双方的MSS,而做了这个工作,双方在进行后续的通讯的时候,其中的数据报文的大小也就不会再出现分片问题了

2.ARP协议

  • 虽然在这里介绍ARP协议,但是需要强调,ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议

0.情景铺垫

  • 对于入口路由器只有F的目标IP地址:
    • IP = 目标网路 + 目标主机 --> 必须知道F的MAC地址 --> 如果没有MAC地址,入口路由器就没有办法在数据连路层封装MAC帧
    • 如果只知道目标主机的IP地址,而不知道对方的MAC地址,也是没办法的
    • 也就是说,需要在同一个网段中通过目标IP,得知对方的MAC地址 --> ARP协议(地址解析协议)
      • 而因为其是在同一个网段中,所以其是一个局域网协议

1.ARP协议的作用

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

2.能不能根据路由器 + 该报文的目标IP,确认清楚这个IP一定在它的子网当中?

  • 100%能做到,因为当一个报文送来的时候,它的目的IP是知道的,然后可以根据查路由表获取到目标网络,然后再和当前网络所对应的路由表目的网络做比较,来确定报文是否已经到达目标网络
  • 最终确定到达目标网络,再根据整体的IP地址,再根据ARP协议获取目标主机F所对应的MAC地址因为(前面已经确定该目标IP一定属于当前网段中),获取到之后再封装MAC帧,于是便可以将数据转给主机F了

3.以太网协议(MAC帧)与ARP协议之间有什么关系?

  • 二者属于在同一个大层(数据链路层),但是在同一个大层里面分为了不同的层次

    • **上层:**属于局域网协议,ARP协议
    • **最底层:**以太网协议,(最典型)MAC帧
      请添加图片描述
  • 这就是为什么以太网帧当中有一个帧类型,它用来表述的要么是ARP、要么是网络层中的协议
    请添加图片描述

4.ARP协议的工作流程

  • 源主机发出ARP请求,询问"IP地址是192.168.0.1的主机的硬件地址是多少",并将这个请求广播到本地网段
    • 以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播
  • 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中
  • 每台主机都维护一个ARP缓存表,可以用arp -a命令查看
    • 缓存表中的表项有过期时间(一般为20分钟)
    • 如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
  • 总结:
    • 先广播
    • 再一对一进行发送
    • 所有逻辑都是封装成MAC帧,在局域网当中完成

5.ARP协议的格式

请添加图片描述

  • **硬件类型:**这次要进行ARP时,对应的局域网的网络种类/网络的标准/网络的类型
    • 一般固定1:以太网
  • **协议类型:**要转换的地址类型
    • 如:想将IP转换为MAC地址…….
    • 一般固定0x0800:为IP地址(未来想将IP转换为MAC地址)
  • **硬件地址长度:**对于以太网地址固定为6字节
  • **协议地址长度:**对于IP地址固定为4
  • 前四个为固定写法,重点是后面的字段
  • op字段:
    • 为1表示ARP请求
    • 为2表示ARP应答
  • **发送端以太网地址:**发送主机的MAC地址
  • **发送端IP地址:**发送主机的IP地址
  • 目的以太网地址:
    • ARP请求时:因为目的就是获得目的以太网地址,所以不知道为全F(二进制全1)
    • ARP应答时:为当初发送请求的MAC地址
  • **目的IP地址:**目标主机的IP地址
  • 为什么需要OP字段?
    • 任何一个主机可能之前向目标主机发送过ARP请求,也就注定了未来会收到对应的ARP应答
    • 任何一台主机,也可能被别人发起ARP请求
    • 所以对于一台主机来讲,其在正常工作的时候即可能对外发送ARP,也可能收到ARP
    • 局域网中:
      • 任何一台主机收到ARP的时候,可能是一个应答,也可能是一个请求
      • 所以需要op进行区分

6.ARP看起来至少进行一次请求和一次应答,是不是每一次发送数据都要这么干?

  • 并不需要,因为一般ARP请求成功之后,请求方会暂时将IP和MAC的映射关系暂时保存下来,往后请求时会直接使用缓存当中的IP和MAC的映射关系,拿着MAC地址封装MAC帧,然后进行转发
  • 其中这个保存是有时间的
    • 比如说:15分钟。如果超时了,操作系统内核自动将该缓存对应的条目去掉
    • 设置时间原因:当前的目标主机,可能会重启/关机,然后又来一台主机,导致局域网分配的时候重新分配IP地址,如果此时的MAC地址不更新的话,就无法发送数据**(此IP对应了上一台主机的MAC地址)**

7.是不是只在目标主机最终的子网中进行ARP,其他地方会不会发生ARP呢?

  • ,ARP的过程随时可能在网络路径中发生,一个子网中发送主机的缓存中就有可能没有目标主机的MAC地址,这个时候需要使用ARP是再正常不过的,不过正是有缓存的存在,ARP在使用中并不是大量的
  • 其实不光是ARP随时可能在路径中发生,IP分片也是
    • 因为数据包在进行路由的时候,整个一条的链路上,每一台主机规定的MTU有可能并不是一样大的
    • 假设发送主机发送的数据大小是1500,而路径上的路由器,有可能对应的MTU比较小,最终也可能在路上进行分片(一般特别少)
    • 因为一般中间路由器都是运营商设置的,所以他们的设置也是精良减少分片,但是并不能说是被彻底的排除了

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

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

相关文章

OpenCV-android-sdk配置及使用(NDK)

opencv官网下载Android版Releases - OpenCV 下载好OpenCV-android-sdk并解压好,然后新建一个jni文件夹测试,测试项目目录结构如下: ├── jni │ ├── Android.mk │ ├── Application.mk │ └── test.cpp Application.mk: APP_STL := c++_static APP_CPP…

网络Http和Socket通讯(基于面试)

每日一句:想得到世上最好的东西,先得让世界看到最好的你 目录 面试问OSI或TCP/IP,怎么回答? 面试问HTTP? 面试问Get类型,Pot类型区别? 面试什么是Socket套接字? 面试问什么是数据粘包&…

云贝教育 |【好课上新】ITSS服务工程师与服务经理认证培训

课程前言 ITSS是中国电子技术标准化研究院推出的,包含“IT 服务工程师”和“IT 服务经理”的系列培训。有效满足GB/T 28827.1 的符合性评估要求和ITSS服务资质升级要求。 IT 服务工程师”结合 IT服务从业人员能力规范和要求,从服务技术、服务技巧和服务…

Linux入门攻坚——23、DNS和BIND基础入门1

DNS——Domain Name Service,协议(C/S,53/udp,53/tcp) BIND——Berkeley Internet Name Domain,ISC(www.isc.org) 互联网络上主机之间的通信依靠的是IP,而人或程序一般使…

C# 统计代码运行时长

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms;namespace Sci {/// <summary>/// 统计代码…

解决“电脑开机黑屏Explorer进程卡死“问题

今天&#xff0c;给台式机按电源键&#xff0c;进入windows系统时&#xff0c;发现电脑黑屏了&#xff0c;昨天还好好的&#xff0c;怎么今天电脑桌面进不去了&#xff1f;想起Windows XP、Windows 7、Windows 10 、Windows 11等系统&#xff0c;在使用多个文件拷贝时&#xff…

部署yolov5

1 创建一个yolov5的环境 conda create -n yolov5 python3.8 2 激活环境 conda activate yolov5 3 设置清华源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 4 PyTorch 网站下载pytorch 备注:也可以使用pip install 5 下载 yolov5…

嵌入式软件开发离职,准备去创业...

大家好&#xff0c;我是麦鸽&#xff0c;最近有读者提问&#xff0c;嵌入式软件开发离职去创业怎么样&#xff1f; 关于这个问题&#xff0c;我是持中立意见的&#xff0c;但是还是要慎重。下面说说我的看法。 其实咱们搞技术的人都有一个通病&#xff0c;就是把技术看得过于重…

C语言 | Leetcode C语言题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; int largestRectangleArea(int* heights, int heightsSize) {int st[heightsSize];int p[2];p[0]-1,p[1]heightsSize;int size0,result0;st[size]0;for(int i1;i<heightsSize;i){ while(size!0&&heights[i]<heights[st[size-1…

【详细介绍下Visual Studio】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

读天才与算法:人脑与AI的数学思维笔记25_涌现理论

1. 人工智能新闻 1.1. 人工智能新闻报道算法的核心是如何将未经处理的原始数据转换成新闻报道 1.2. 很少有记者为美联社决定使用机器来帮助报道这些新闻持反对意见 1.2.1. 像“Wordsmith”这样的算法&#xff0c;具有自动化的洞察力、科学的叙事能力&#xff0c;现在正被应用…

AI图书推荐:利用生成式AI实现业务流程超自动化

《利用生成式AI实现业务流程超自动化》&#xff08;Hyperautomation with Generative AI&#xff09;这本书探索了广泛的用例和示例&#xff0c;展示了超自动化在不同行业、领域和特定部门的多样化应用&#xff0c; 让您熟悉UiPath、Automation Anywhere和IBM等流行工具和平台&…

基于yolov5+streamlit目标检测演示系统设计

YOLOv5与Streamlit&#xff1a;智能目标检测可视化展示介绍 随着人工智能技术的飞速发展&#xff0c;目标检测技术已成为推动智能化社会进步的关键技术之一。在众多目标检测算法中&#xff0c;YOLOv5以其卓越的性能和实时性&#xff0c;成为了业界的佼佼者。与此同时&#xff…

docker(二):Centos安装docker

文章目录 1、安装docker2、启动docker3、验证 官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 1、安装docker 下载依赖包 yum -y install gcc yum -y install gcc-c yum install -y yum-utils设置仓库 yum-config-manager --add-repo http://mirrors…

im(即时通讯)是什么?

在当今数字化时代&#xff0c;即时通讯&#xff08;IM&#xff09;已经成为企业内部沟通与协作中不可或缺的工具。作为一种实时的即时通讯方式&#xff0c;IM能够极大提高团队成员之间的沟通效率&#xff0c;帮助企业快速响应变化&#xff0c;并增强内部协作与创新能力。 Work…

Linux提权--本地环境变量文件配合 SUID

免责声明:本文仅做技术交流与学习... 目录 背景: 前提条件: 演示: 实战中如何操作? 探针发现: 背景: 环境变量提权--------> 背景&#xff1a; 管理员编译了程序&#xff0c;给予了程序管理员运行的方案, 攻击通过对程序的运行调试反编译等得到了程序的运行大概逻辑, …

【C++11】C++11类与模板语法的完善

目录 一&#xff0c;新的类功能 1-1&#xff0c;默认成员函数 1-2&#xff0c;强制生成关键字 二&#xff0c;可变参数模板 2-1&#xff0c;模板参数包 2-2&#xff0c;STL容器empalce的相关接口 一&#xff0c;新的类功能 1-1&#xff0c;默认成员函数 C11之前的类中有…

stable diffusion WebUi本地安装

一、stable diffusion 介绍 Stable Diffusion是一种先进的文本到图像的生成模型&#xff0c;它可以根据给定的文本输入生成高度逼真的图像。 Stable Diffusion模型因其高效性和灵活性&#xff0c;在AI图像生成领域引起了广泛关注&#xff0c;并在实际应用中展示了其强大的能力…

数据结构深入理解--栈

目录 一、栈的定义 二、栈的实现 2.1 栈的结构 2.2 栈的初始化 2.3 栈的销毁 2.3 栈元素的插入 2.4 栈元素的删除 2.5 栈顶元素获取 2.6 栈元素有效个数获取 2.7 栈是否为空判断 三、代码总览 Stack.h Stack.c 测试代码:test.c 四、例题 例一&#xff1a; 例二&#xff…

【比邻智选】MF871U模组

&#x1f680;搭载国产芯&#xff0c;严苛测试&#xff0c;稳定可靠 &#x1f6e0;️R16特性加持&#xff0c;5G LAN&#xff0c;纳秒级精度 &#x1f310;超低成本&#xff0c;丰富协议&#xff0c;连接无界限