Linux网络——网络层

网络层的作用:在复杂的网络环境中确定一个合适的路径。


一.IP协议

IP存在的意义:IP地址提供一种能力,使得数据能够从主机B跨网络、可靠的送至主机A。


1.协议头格式

能够看出IP协议的格式与TCP协议存在很多相似之处,同样拥有4为首部长度和选项字段,更重要的是IP协议拥有16位总长度,表示整个IP数据报的大小,因此可以轻松将IP协议头进行分离。

8 位服务类型(Type Of Service): 3 位优先权字段(已经弃用), 4 位 TOS 字段, 和 1 位保留字段(必须置为 0). 4 位 TOS 分别表示: 最小延时, 最大吞吐量, 最高可靠性,最小成本. 这四者相互冲突, 只能选择一个. 对于 ssh/telnet 这样的应用程序, 最小延时比较重要; 对于 ftp 这样的程序, 最大吞吐量比较重要。


二.网段划分

IP 地址分为两个部分, 网络号和主机号:

  • 网络号: 保证相互连接的两个网段具有不同的标识。
  • 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号。

IP地址是有用且有限的资源,所以需要经过合理的划分来进行分发,并通过精心的设计来快速高效的使用。 

过去曾经提出一种划分网络号和主机号的方案, 把所有 IP 地址分为五类, 如下图所示:

  • A 0.0.0.0 127.255.255.255
  • B 128.0.0.0 191.255.255.255
  • C 192.0.0.0 223.255.255.255
  • D 224.0.0.0 239.255.255.255
  • E 240.0.0.0 247.255.255.255

但是这种划分方法,导致了大量的地址浪费,于是又提出了新的划分方案CIDR:

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  • 子网掩码也是一个 32 位的正整数. 通常用一串 "0" 来结尾;
  • IP 地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;
  • 网络号和主机号的划分与这个 IP 地址是 A 类、B 类还是 C 类无关;

来看一个划分子网的例子:

其中子网掩码是一个32位,前边连续一部分全1,剩余连续部分全0的正整数,子网掩码全为1的部分,即为网络号部分,全为0的部分为主机号部分

通过IP地址与子网掩码按位与,得到的即为网络号,不难看出,上图所示的IP地址的主机号只有最后四位,因此其子网的地址范围即为:网络号+主机号从全0到全1之内的范围,但不包含全0和全1两个地址,因为这两个地址是特殊地址。

  • 将 IP 地址中的主机地址全部设为 0, 就成为了网络号, 代表这个局域网;
  • IP 地址中的主机地址全部设为 1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
  • 127.*IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1

IP 地址和子网掩码还有一种更简洁的表示方法,例如 140.252.20.68/28,表示 IP 地址140.252.20.68, 子网掩码的高 28 位是 1,也就是 255.255.255.240


三.私有和公网IP地址

如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet 上,理论上使用任意的 IP 地址都可以,但是网络中规定了用于组建局域网的私有 IP 地址格式为:

  • 10.*,8 位是网络号,16,777,216 个地址
  • 172.16.*172.31.*,12 位是网络号,1,048,576 个地址
  • 192.168.*,16 位是网络号,65,536 个地址

包含在这个范围中的, 都成为私有 IP, 其余的则称为全局 IP(或公网 IP);

私有IP不能出现在公网上,但是其可以在不同的私网中被重复使用,我们想要上网,都必须先接入指定的一个私网。

路由器能够构建子网,整个网络世界 = 公网 + 私网。 

  • 一个路由器可以配置两个 IP 地址, 一个是 WAN IP, 一个是 LAN IP(子网 IP).
  • 路由器 LAN 口连接的主机, 都属于当前这个路由器的子网中.
  • 不同的路由器, 子网 IP 其实都是一样的(通常都是 192.168.1.1),子网内的主机IP 地址不能重复. 但是子网之间的 IP 地址就可以重复了。
  • 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN IP 就是一个公网 IP .
  • 子网内的主机需要和外网进行通信时, 路由器将 IP 首部中的 IP 地址进行替换(替换成 WAN IP), 这样逐级替换, 最终数据包中的 IP 地址成为一个公网 IP. 这种技术称为 NAT(Network Address Translation,网络地址转换).

四.路由

在复杂的网络结构中, 找出一条通往终点的路线,称为路由。

路由的过程, 就是一跳一跳(Hop by Hop) "问路" 的过程.

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

IP 数据包的传输过程也和问路一样:

  • IP 数据包, 到达路由器时, 路由器会先查看目的 IP;
  • 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
  • 依次反复, 一直到达目标 IP 地址;

那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表:

  • Destination :目的网络地址;
  • Genmask :子网掩码;
  • Gateway :是下一跳地址,
  • Iface :发送接口;
  • Flags:U 标志表示此条目有效(可以禁用某些条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有 G 标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;

路由表可以使用 route 命令查看;

如果目的 IP 命中了路由表, 就直接转发即可;

路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,什么该路由器中不存在你要发送的目的IP,就按缺省路由条目规定的接口发送到下一跳地址,也就是下一个路由器。


五.数据分片

在数据链路层中规定一个MTU长度,表示网络层传下来的数据必须是在MTU长度的大小之内的,这就导致如果数据过大,网络层必须将整个数据进行分片,才能传给数据链路层。

将数据分片,就代表着数据丢失的可能性大幅提升,在分片中,一个片丢失,就代表着整个报文的丢失,需要传输层重新发送数据。所以将数据分片,并不是网络转发的主流。但是分片又是必不可少的应用,下面就来看看,分片到底是如何进行的。

报头中的这三项,来为分片做服务:

  • 16 位标识(id): 唯一的标识主机发送的报文. 如果 IP 报文在数据链路层被分片了, 那么每一个片里面的这个 id 都是相同的.
  • 3 位标志字段: 第一位保留(保留的意思是现在不用)。第二位置为 1 表示禁止分片, 这时候如果报文长度超过 MTU, IP 模块就会丢弃报文。第三位表示"更多分片", 如果分片了的话, 最后一个分片置为 0, 其他是 1, 是一个结束标记。
  • 13位片偏移:表示各分片中有效载荷,相较于原始数据中有效载荷开头处的偏移量。除此之外,由于13位片偏移小于16位总长度,所以并不能完全表示分片的偏移量,实际偏移的字节数是这个值乘8得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是 8 的整数倍(否则报文就不连续了).

下面举个例子,来分享究竟是如何进行分片的:

通常情况下,MTU长度规定为1500字节,假如现有一个全长为3000字节的IP报文要进行分片:

  • 第一片,是从IP报文开头,向后截取1500字节,该片包含20字节IP报头,1480字节有效载荷;
  • 第二片,则是继续从原IP报文的1501字节开始,向后截取,此时需注意,每一个分片都必须包含IP报头部分的20字节长度,因为后续要进行拼接,所以第二片也必须由20字节IP报头,加1480字节有效载荷组成。
  • 此时对于整个原IP报文,还剩余20字节的有效载荷,所以还需要第三片,即20字节IP报头,加20字节有效载荷组成。

当一串分片到来时,数据链路层收到头部分片即尾部分片,即判定收到了全部的IP报文,随后按照分片的偏移量进行升序排序,再判断其偏移量是否连续,进行二次判定,确认无误后,便进行组装,最终得到完整数据。


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

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

相关文章

Shiro-550反序列化漏洞分析

🌸 环境配置 代码下载地址:https://codeload.github.com/apache/shiro/zip/refs/tags/shiro-root-1.2.4 下载完成之后,需要修改一下pom文件: 修改一下红色框中的配置。然后配置一下tomcat: 点击部署,然后…

【Rhino】【Python】Create a series of Blocks according to Value of object Property

文章目录 1. Complete Code Display2. Detailed Code Analysis2.1 Import and Setup2.2 Function Structure and Initial Setup2.3 Object Collection and Filtering2.4 Story Management System2.5 Locating Point Processing2.6 Object Organization by Story2.7 Block Creat…

CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes

CSP/信奥赛C语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes 题目描述 因为 151 151 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 151 …

【探寻密码的奥秘】-001:解开密码的神秘面纱

目录 1、密码学概述1.1、概念1.2、目的1.3、应用场景 2、密码学的历史2.1、第一时期:古代密码时代2.2、第二时期:机械密码时代2.3、第三时期:信息密码时代2.4、第四时期:现代密码时代 3、密码学的基本概念3.1、一般通信系统3.2、保…

文件操作详解(1)

1.文件,文件与流,文件指针 2.文件的打开与关闭 3.文件的读写 文件的顺序读写: (1)fgetc 和 fputc (2)fgets 和 fputs (3)fscanf 和 fprintf (4&#x…

基于YOLOv8深度学习的人体姿态摔倒检测与语音报警系统(PyQt5界面+数据集+训练代码)

随着人口老龄化进程的加速,摔倒事故逐渐成为威胁老年人健康和安全的主要问题之一。研究表明,摔倒不仅可能导致老年人骨折、头部受伤等严重的身体损伤,还可能引发心理恐惧和行动能力下降,从而降低其生活质量和独立性。如何快速、准…

jmeter5.6.3安装教程

一、官网下载 需要提前配置好jdk的环境变量 jmeter官网:https://jmeter.apache.org/download_jmeter.cgi 选择点击二进制的zip文件 下载成功后,默认解压下一步,更改安装路径就行(我安装在D盘) 实用jmeter的bin目录作为系统变量 然后把这…

差分进化算法原理与复现

目录 摘要1、算法原理1.1、种群初始化1.2、变异1.3、交叉1.4、选择 2、算法实现2.1、种群初始化2.2、变异2.3、交叉2.4、选择2.5、选取终代种群中最优秀个体 摘要 如何选取一组最佳的参数,使得代价函数值最优?这是优化算法做的事,一个直觉的…

搜索引擎中广泛使用的文档排序算法——BM25(Best Matching 25)

在搜索场景中,BM25能计算每个文档与查询的匹配度,从中找出最相关的文档,并按相关性高低排序展示。 要理解BM25,需要掌握以下几个关键概念: 1. 词频(Term Frequency, TF):某关键词在文…

C语言笔记(自定义类型:结构体、枚举、联合体 )

前言 本文对自定义类型的结构体创建、使用、结构体的存储方式和对齐方式,枚举的定义、使用方式以及联合体的定义、使用和存储方式展开叙述,如有错误,请各位指正。 目录 前言 1 结构体 1.1 结构体的声明 1.2 结构体的自引用 1.3 结构体变…

【C++】list模拟实现(详解)

本篇来详细说一下list的模拟实现,list的大体框架实现会比较简单,难的是list的iterator的实现。我们模拟实现的是带哨兵位头结点的list。 1.准备工作 为了不和C库里面的list冲突,我们在实现的时候用命名空间隔开。 //list.h #pragma once #…

数字化工厂 MES试点方案全解析(三)

目 录 三、试点实施步骤 需求分析与方案设计阶段 系统开发与测试阶段 系统部署与培训阶段 试点运行与优化阶段 总结与评估阶段 三、试点实施步骤 需求分析与方案设计阶段 1、成立由企业生产、工艺、质量、设备、IT 等多部门人员组成的项目团队,与 MES 供应商共…

ShuffleNet V2:高效卷积神经网络架构设计的实用指南

摘要 https://arxiv.org/pdf/1807.11164 当前,神经网络架构设计大多以计算复杂度的间接指标,即浮点运算数(FLOPs)为指导。然而,直接指标(例如速度)还取决于其他因素,如内存访问成本…

【Opencv学习】PART1-图像基础处理

目录 一、图像的读入、显示和保存 1、读入图像 imread函数 范例 显示控制参数 2、显示图像 imshow函数 范例 tips waitkey函数 含义 delay参数: tips destoryAllWindows函数 3、保存图像 imwrite函数 范例 实操 01-读入显示保存 代码 结果 二、图像处理入…

硬中断关闭后的堆栈抓取方法

一、背景 性能和稳定性是一个计算机工程里的一个永恒的主题。其中尤其稳定性这块的问题发现和问题分析及问题解决就依赖合适的对系统的观测的手段,帮助我们发现问题,识别问题原因最后才能解决问题。稳定性问题里尤其底层问题里,除了panic问题…

MT8768/MTK8768安卓核心板性能参数_联发科安卓智能模块开发方案

MT8768安卓核心板 是一款采用台积电12nm FinFET制程工艺的智能手机芯片。MT8768核心板不仅提供所有高级功能和出色体验,同时确保智能终端具备长电池寿命。该芯片提供了一个1600x720高清(20:9比例)分辨率显示屏,排除了清晰度和功耗之间的平衡问题。该芯片…

NVR管理平台EasyNVR多个NVR同时管理:全方位安防监控视频融合云平台方案

EasyNVR是基于端-边-云一体化架构的安防监控视频融合云平台,具有简单轻量的部署方式与多样的功能,支持多种协议(如GB28181、RTSP、Onvif、RTMP)和设备类型(IPC、NVR等),提供视频直播、录像、回放…

ETAS工具导入DBC生成Com协议栈

文章目录 前言DBC配置关键属性Cobra参数配置Cobra使用isolar工程配置总结前言 ETAS工具导入DBC主要也是生成arxml用的,ETAS推荐使用Cobra导入,本文介绍导入过程及注意事项 DBC配置关键属性 对于普通Com报文,配置为周期发送,及其周期,NmMessage配置为No,示例如下: 对…

图形化界面MySQL(MySQL)(超级详细)

1.官网地址 MySQL :: Download MySQL Workbench 1.1在Linux直接点击NO thanks..... 下载完后是这个页面 1.2任何远端登录,再把jj数据库给授权 1.3建立新用户 进行连接 点击这个就运行了 只执行show tables;要先选中 圆圈处支持自己输入 点击这个就执…

vulhub靶场与pikachu靶场

一、搭建vulhub 环境:kaildocker 1.1 提权: :::color4 sudo su #权限升级为root ::: 1.2更新软件: :::color4 apt-get update ::: (此处我已更新过) 1.3安装HTTPS协议和CA证书: :::color4 apt-get install -y apt-transpo…