『 Linux 』网络层 - IP协议 (二)

文章目录

    • 路由
    • NAT技术
    • 分片与组装
      • 分片的组装
      • IP协议分片的短板


路由

通常情况路由器具备了一个非常重要的功能,即构建子网;

同时路由器需要实现跨网络通信,说明路由器必须存在两个或以上的IP地址,通常在路由器中可以看到几个接口,分别是一个WAN口和几个LAN口;

WAN口IP被称为公网IP,LAN口IP被称为私网IP;

其中WAN口对应的IP地址是作为上一层子网,如运营商子网中的其中一个子网IP,而通常一个LAN口则代表一个子网,对于LAN口IP而言,该IP将作为该子网中的第一台设备IP;

或者在一些情况下,多个LAN口可以共享同一个子网;

通常路由器在自己作为子网的第一台设备时对应的LAN口IP将作为该子网的网关IP,即子网内所有设备访问其他网络时的第一道"门";

而路由的过程实际上就是以一跳一跳(Hop by Hop)的方式,在复杂的网络结构中找出一条通往终点的路线;

所谓"一跳"就是数据链路层中的一个区间,具体在以太网中指源MAC地址到目的MAC地址之间的帧传输区间;

在网络中的主机中,无论是电脑还是路由器设备,都有路由功能,同时也都内置了一个路由表;

其中路由表的字段如下:

  • Destination

    表示网络或主机的目标地址;

    路由器查看数据包的目的IP地址并与路由表中的Destination字段进行匹配以决定数据包应当发送到哪里;

    这个字段可以是特定的网络地址或主机地址,或是以标示默认路由的0.0.0.0(代表任何地址)或是default;

  • Geteway

    表示下一跳(Next hop)的IP地址;

    在某些配置中,当目标网络是直接连接的,网关字段可能显示geteway或是IP0.0.0.0,代表数据包直接通过制定接口发出而不需要通过中间网关;

    这是路由器发送数据包到下一个网络所应通过的设备或接口的IP地址;

    如果目标是直接连接的,那么它可以是路由器自己的接口IP地址;

  • Genmask(子网掩码)

    子网掩码定义了Destination字段中网络的范围,确定了哪些IP地址属于同一个网络;

    例如255.255.255.0表示该网络中有256个IP地址(/24),所有以相同前三个八位组开始的IP地址属于这个网络;

  • Flags(标志)

    U表示接口是活跃的;

    G表示数据包需要通过另一个路由器(网关)来到达目的地;

    H表示条目是针对特定主机而不是网络的;

    D表示通过路由协议动态学习到的条目;

    M表示被修改的路由条目,特别是在重新计算路由表时;

    !表示拒绝路由到特定地址或网络;

  • Metric(度量)

    表示到达目标网络的成本或举例,可以基于跳数(hop count),宽带,延迟等因素;

    较低的度量值通常表示更优的路径;

    在选择到某个目的地的路由时,路由器会选择度量值最低的路径;

  • Ref(引用)

    这个字段通常表示当前活跃连接或进程数目引用了这条路由;

    很少被直接显示,但如果有,它可以视为一种诊断工具;

  • Use(使用)

    指示通过这条路由路径传输的数据包数量;

    这是一个统计数据,表示使用该路由的频率;

  • Iface(接口)

    指示这条路由使用的出口接口,即数据包将通过哪个物理或逻辑接口发送出去;

    通常是一个网络接口名,如eth0,wlan0,Interface 1等;

在Windows中可以在命令行中通过route print命令查看对应的路由表;

在Linux中可以使用route命令来查看路由表;

当一个数据包到来时,主机会对数据包进行解包并查看IP报头中的目的IP地址,并通过目的IP地址与Genmask子网掩码进行&按位与操作,通过按位与后的结果与该行条目中的Destination字段进行匹配,如果结果与该字段不匹配则继续计算下一行条目,若是匹配则将该报文重新封装并向Destination所指向的IP进行下一跳;

如果路由表中所有的Destination字段都不匹配则通过0.0.0.0或是default以默认网关进行下一跳;

通过这种跳一跳的方式将一个IP数据包由源IP发送到目标IP;


NAT技术

网络地址转换(Network Address Translation,NAT)是一种用于在网络中重写源IP地址或目的IP地址的技术,通常在网络边缘设备如路由器上进行实现;

最初设计用于缓解IPv4地址耗尽的问题;

在使用NAT技术时IP报文报头中的源IP地址与目的IP地址将会在到达一个路由器时进行重写;

以该图为例;

当路由器同时充当为NAT设备时将会对IP报文的报头内的源IP和目的IP进行更改;

通常分为两种情况:

  • 报文的发送
  • 报文的回程

路由器启用NAT功能时,对应的NAT功能都将生成一个属于自己的表,即NAT表或是连接表;

通常报文的发送时报文每经过一个路由器上的NAT功能时路由器将会将IP报文中的源IP修改为该路由器的公网IP,并记录源私网IP和新公网IP和端口的映射关系;

NAT表的记录主要是方便对端在进行报文返程的时候可以通过NAT表中的映射关系使得报文能够正确返回源发送端;

当报文进行返程时进入第一个路由器的NAT功能时将查询NAT表中的映射关系并将目的IP修改为改路由器对应的私网IP,最终将报文交回原发送端;


分片与组装

在网络协议栈中,在网络层中的数据,如IP数据包并不是直接通过网络层发出,而是一样的贯穿协议栈将数据包交给下一层协议,这一层即为数据链路层;

而通常情况下,数据链路层所发生的数据帧不能太大,如果数据帧太大则可能会加重数据在网络中的存活时间从而与网络中的其他数据产生碰撞;

当网络健康状态差的时候,数据链路层将进行一些碰撞避免相关的策略从而减少数据碰撞的发生;

由此看出,数据帧只要过大都会直接或者间接影响到网络的健康状态;

所以为了避免这些问题的发生,通常由网络层交付给数据链路层的数据报都不能太大;

当网络层IP协议将要把一个较大的IP报文交付给下层时,IP需要对该报文进行分片操作;

  • “谁分片,谁组装”

分片操作由IP协议提供,对应的组装操作也将是由IP协议提供,即网络层;

在IP报文的内容中存在几个对应的字段用于分片与组装操作;

  • 16位标识

    这个标识通常用来标示不同的IP报文;

    通常情况下每个IP数据包的16位标识是不同的,但相同IP数据包的几个不同分片其对应的该字段是相同的;

    同一个IP数据包的不同分片在抵达对端后需要对IP数据包的分片进行组装;

    但组装的前提是将几个分片进行聚拢,通过相同的该字段可以使得同一个IP数据包的不同分片能够聚在一起从而进行下一步的组装;

  • 3位标志

    这个标志包含以下几个子字段:

    • 第一位

      第一位通常是未使用的,暂未赋予该字段的意义;

    • 第二位

      DF(Don’t Fragment) - 不分片标志;

      如果这个位被设置为1则路由器不能分片这个数据包,如果数据包的大小超过了某个链路的MTU(最大传输单元),这个数据包将会被丢弃,并返回一个ICMP错误消息给发送方;

    • 第三位

      MF(More Fragments) - 更多分片标志;

      当一个IP数据包被分片后,除了最后一个分片外,所有分片的这个位置都会被设置为1,表示还有其他分片,以及该分片并不是最后一个分片;

      最后一个分片的该字段将被设为0,表示这是最后一个片段;

  • 13位片偏移

    这个字段是13位长度的,表示当前分片在原始数据包中的相对位置;

    具体来说,它表示该分片相对于原始数据包开始处的字节偏移,以8byte位单位(即偏移量 = 片偏移字段*8);

    这种设计是因为IP分片的大小必须是8byte的整数倍,所以此偏移量可以更节省空间的表示出整个数据包中的字节位置;

假设IP需要发送4500 byte大小的数据,但由于该数据超过了数据链路层限制的大小,对应的IP协议需要对该数据包进行分片;

对应的分片结构如下:

以该图为例,在进行分片时,IP数据包的第一个分片将保留IP报头进行分片,对应的第一个分片的三位标志为001表示这个数据包可以被分片,且该分片并不是最后一个分片,片偏移为0表示该分片为数据包分片中的第一个分片;

其次后续的分片需要为分片后的数据增加报头,所以在进行分片时需要保留对应的报头大小;

因为在数据链路层中不关心上层的数据与报头的分隔,数据链路层协议将会把上层所发的所有内容,无论报头报文都当做自己的有效载荷进行封装;

最后一个分片的三位标志为000,且片偏移不为0,因此该分片表示分片中的最后一个分片;


分片的组装

对端在接受到IP数据包的分片后需要对分片进行组装;

首先组装前需要判断所接收到的IP数据包是否为完整的数据包还是IP数据包中的分片;

通常需要判断这几个条件:

  • 接收到的几个数据包16位标识字段是否一致

    若是接收方接收到了几个IP数据包所对应的16位标识字段相同,则判断该数据包可能为分片;

    并且将多个该字段相同的数据包聚集在一起存放;

  • 3位标志字段情况是否允许被分片以及是否有更多分片标识

    该字段用来判断所接收到的IP数据包是否是被允许分片的;

    若是判断该字段为允许被分片则该IP数据包可能为分片中的其中一个;

    同时若是该字段允许被分片且该字段的最后一个子字段被标识为1,则表示该IP数据包为分片中的其中一个;

  • 片偏移字段是否为0

    若是片偏移字段不为0则表示该IP数据包一定为分片中的其中一个;

这几个条件在组装过程中缺一不可;

通常需要判断四种情况:

  • 不为分片

    当接收方接收到的几个IP数据包中其16位标识字段是唯一,且该IP数据包的3位标志中被设置了不可分片标识则表示该数据包不为分片;

    或者所接收到的IP数据包16位标识字段唯一且3位标志位中更多分片字段设为0,同时片偏移量也为0同样表示该IP数据包不为分片;

  • 第一个分片

    当所接收的IP数据包的3位标志中更多分片为1,同时片偏移为0时则表示该IP数据包为相同16位标识字段IP数据包分片中的第一个分片;

  • 中间分片

    当所接收到的IP数据包中的3位标志中更多分片被设置为1且片偏移不为0则表示该IP数据包为相同16位标识字段IP数据包分片中的中间分片;

  • 最后一个分片

    当所接收到的IP数据包中3位标志中更多分片被设置为0,且片偏移不为0则表示该IP数据包为相同16位标识字段IP数据包分片中的最后一个分片;

在分片的聚合过后根据片偏移来对数据进行排序,随后去掉分片中的IP报头对数据进行组装;


IP协议分片的短板

通常情况下在网络协议栈中是不太支持IP协议对数据进行分片的;

主要的原因是IP协议若是对一个IP数据包进行分片后交由数据链路层进行传输,若是分片在传输过程中出现丢失问题则将要把该IP数据包的所有分片,即整个完整的IP数据包进行重新传输;

这样会延长数据在网络中的存活时间,对应的一个IP数据包的传输时间将变得更长,可能更加影响网络中其他主机的网络通信;

因此为了避免IP层因分片导致的各种问题,经常需要避免IP进行分片,为了避免IP分片,上层协议,如TCP协议才指定了一些列的策略,如流量控制,滑动窗口,慢启动等;

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

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

相关文章

使用 OpenCV 进行视频中的行人检测

在计算机视觉领域,行人检测是一个重要的研究方向,它在视频监控、自动驾驶、人机交互等领域都有着广泛的应用。本文将介绍如何使用 OpenCV 库来实现视频中的行人检测。 环境准备 首先,我们需要安装 OpenCV 库。可以通过以下命令来安装&#…

javaEE初阶——多线程(1)

文章目录 一些背景知识操作系统(OS)(计算机的大管家)操作系统的基本概念:市面上常见的操作操作系统: 关于前端与后端的介绍:(针对服务的体系架构)计算机是如何工作的&…

Apple Vision Pro开发003-PolySpatial2.0新建项目

unity6.0下载链接:Unity 实时开发平台 | 3D、2D、VR 和 AR 引擎 一、新建项目 二、导入开发包 com.unity.polyspatial.visionos 输入版本号 2.0.4 com.unity.polyspatial(单独导入),或者直接安装 三、对应设置 其他的操作与之前的版本相同…

学习threejs,使用设置normalMap法向量贴图创建更加细致的凹凸和褶皱

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshPhongMaterial高…

Python办公自动化案例:将演示文稿批量导出为图片和PDF文件

案例:将演示文稿批量导出为图片和PDF文件 准备资料:准备好PPT,并起好名称,放在同一目录下。 批量的将ppt,pptx转换为pdf和图片,代码如下: import comtypes.client import osdef init_powerpoint():powerp

数据结构 ——— 直接选择排序算法的实现

目录 直接选择排序算法的思想 优化直接选择排序算法的思想 代码实现(默认升序) 直接选择排序算法的思想 直接选择排序算法的思想类似与直接插入排序 区别在于从大到小选择最小的元素或者最大的元素直接放在元素应该停留的位置每次从待排序的元素中选…

linux从0到1——shell编程9

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

selinux及防火墙

selinux说明 SELinux 是 Security-Enhanced Linux 的缩写,意思是安全强化的 linux 。 SELinux 主要由美国国家安全局( NSA )开发,当初开发的目的是为了避免资源的误用。 httpd进程标签(/usr/share/nginx/html &#…

前端:JavaScript (学习笔记)【2】

目录 一,数组的使用 1,数组的创建 [ ] 2,数组的元素和长度 3,数组的遍历方式 4,数组的常用方法 二,JavaScript中的对象 1,常用对象 (1)String和java中的Stri…

QML学习 —— 28、3种等待指示控件(附源码)

效果如下 说明 BusyIndicator应用于指示在加载内容或UI被阻止等待资源可用时的活动。BusyIndicator类似于一个不确定的ProgressBar。两者都可以用来指示背景活动。主要区别在于视觉效果,ProgressBar还可以显示具体的进度(当可以确定时)。由于视觉差异,繁忙指示器和不确定的…

Java 基于SpringBoot+Vue的家政服务管理平台

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

DataGear 5.2.0 发布,数据可视化分析平台

DataGear 企业版 1.3.0 已发布,欢迎体验! http://datagear.tech/pro/ DataGear 5.2.0 发布,图表插件支持定义依赖库、严重 BUG 修复、功能改进、安全增强,具体更新内容如下: 重构:各模块管理功能访问路径…

nature communications论文 解读

题目《Transfer learning with graph neural networks for improved molecular property prediction in the multi-fidelity setting》 这篇文章主要讨论了如何在多保真数据环境(multi-fidelity setting)下,利用图神经网络(GNNs&…

Flutter:SlideTransition位移动画,Interval动画延迟

配置vsync&#xff0c;需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationControllerlate AnimationController _controller;overridevoid initState() {super.…

svn 崩溃、 cleanup失败 怎么办

在使用svn的过程中&#xff0c;可能出现整个svn崩溃&#xff0c; 例如cleanup 失败的情况&#xff0c;类似于 这时可以下载本贴资源文件并解压。 或者直接访问网站 SQLite Download Page 进行下载 解压后得到 sqlite3.exe 放到发生问题的svn根目录的.svn路径下 右键呼出pow…

GPT系列文章

GPT系列文章 GPT1 GPT1是由OpenAI公司发表在2018年要早于我们之前介绍的所熟知的BERT系列文章。总结&#xff1a;GPT 是一种半监督学习&#xff0c;采用两阶段任务模型&#xff0c;通过使用无监督的 Pre-training 和有监督的 Fine-tuning 来实现强大的自然语言理解。在 Pre-t…

Linux线程(Linux和Windows的线程区别、Linux的线程函数、互斥、同步)

Linux线程&#xff08;Linux和Windows的线程区别、Linux的线程函数、互斥、同步&#xff09; 1. 线程介绍 线程的概念&#xff1a; 线程是 CPU 调度的基本单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流&#xff0…

Large Spatial Model:End-to-end Unposed Images to Semantic 3D 论文解读

目录 一、概述 二、相关工作 1、SfM和可微神经表示 2、端到端的Image-to-3D 三、LSM 1、密集几何预测 2、2D信息特征提取 3、点特征融合 4、可微渲染 5、损失函数 四、实验 一、概述 该论文提出一种大型空间模型&#xff08;Larget Spatial Model,LSM&#xff09;…

Leetcode207. 课程表(HOT100)

链接 题解&#xff1a;先统计入度为0的点&#xff0c;如果一个节点入度为0&#xff0c;说明没有课程指向它&#xff0c;那么你就可以学习它了。反之说明还有先修课。 注意&#xff1a;图存在拓扑排序等价于图不存在环。其实可以想出&#xff1a;如果是一个环&#xff0c;那么…

JavaScript将至

JS是什么&#xff1f; 是一种运行在客户端&#xff08;浏览器&#xff09;的编程语言&#xff0c;实现人机交互效果 作用捏&#xff1f; 网页特效 (监听用户的一些行为让网页作出对应的反馈) 表单验证 (针对表单数据的合法性进行判断) 数据交互 (获取后台的数据, 渲染到前…