网络层详解

目录

前言

一、IP协议

1、IP协议报头

2、协议字段理解

(1)4位版本

(2)4位首部长度

(3)8位服务类型

(4)16位总长度

(5)标识、标志与片偏移

(6)8位生存时间

(7)8位协议

(8)16位首部校验和

(9)源IP地址与目的IP地址

(10)选项

3、如何封装与解包

4、如何向上交付

5、IP分片

(1)16位标识

(2)3位标志

(3)13位片偏移

(4)疑惑解答

二、网段划分

1、网络号与主机号

2、IP地址分类

3、CIDR技术

4、特殊的IP地址

5、子网划分

6、私有IP地址与公网IP地址


前言

        前面我们介绍了应用层与传输层相关协议,本文主要讲解网络层相关概念与网络层相关协议;

一、IP协议

        网络层主要的协议就是IP协议,我们经常听说的TCP/IP协议簇中便包含该协议;IP协议也是网络层中最主要的协议;

1、IP协议报头

        IP协议报头如下图所示;

2、协议字段理解

(1)4位版本

        该字段主要标识IP协议版本,一般为IPV4,因为IPV6与IPV4并不兼容,该字段可不深究,理解即可;

(2)4位首部长度

        该字段来标识IP报文首部的长度,与TCP协议中的首部长度一样,该字段的单位为4字节,由于IP报文的大小最小为20字节,因此该字段最小值应该为20 / 4 = 5,用二进制来表示就是0101;最大值应该就是60字节了;

(3)8位服务类型

        该字段也只需了解即可,该字段最高3位已经弃用,而接下来4位TOS字段,分别用来标识最小延迟,最大吞吐量,最高可靠性,最小成本;这四者互相冲突,只能选择一个;最后一位为保留位,设置为0即可;

(4)16位总长度

        该字段来表示整个IP报文的长度(包括数据部分),单位是字节,注意,这里与首部长度的不同,首部长度的单位为4字节,这里的单位为字节;

(5)标识、标志与片偏移

        这三个字段为设置IP分片所需字段,具体文章后面会专门讲解;

(6)8位生存时间

        该字段用来表示我们发送的报文在网络上最长的生存时间;该字段最开始的单位为秒,后来被改为了跳数;那么我们会有如下问题;

为什么会有生存时间呢?没有不可以吗?

        当然不可以,实际上,我们的网络上的情况非常复杂,有可能会出现路由环绕等问题,就是在转发IP报文过程中出现路由回路,若没有没有生存时间将会不断的重复转发,这种转发当然会消耗网络资源的,为了避免这种情况IP报文设置了生存时间;

        刚开始时,生存时间的单位为秒,后来随着互联网硬件的发展,路由转发的速度也越来越快,我们发现设置成秒并不合适,因此我们转发一个路由可能仅仅只需要us甚至ns级别,这时我们设置成秒明显就不合适了,因此这个参数也就被改为了跳数,所谓跳数就是经过中间路由次数,没经过一个路由,跳数加一;

(7)8位协议

        这里的8位协议也就是网络层应该向上层中的哪一个协议交付,可能上层位TCP协议,也可能位UDP协议等等,我们要讲IP报文解用后的数据交给上层的指定层;

(8)16位首部校验和

        该字段用于检测我们在进行数据传输中IP首部中的某个数据是否发生错误,用于检测IP首部的正确性;这里可能有小伙伴会有疑惑了,那数据部分不需要进行检测吗?这其实在传输层中,我们讲TCP、UDP协议中就介绍了,这里我们要清楚的是在IP协议中,IP报文中的数据部分就是一个完整的TCP报文或UDP报文等,而在传输层中的这些协议都有差错校验,这个差错校验会讲数据部分进行差错校验,因此在IP报文中的差错校验只需检验首部是否正确即可;

(9)源IP地址与目的IP地址

        源IP地址用于告诉接收端发送端的IP地址是什么?因为在网络通信过程中,往往是双向的,我们要给对端发送数据,对端也要跟我们发送数据,而目的IP是在路由转发过程中告诉中间路由我们要去的IP地址是哪个,用于定位对端主机;

(10)选项

        这个选项是附加字段,我们可加一些特殊功能,对IP协议进行拓展,这里我们仅需了解即可;

3、如何封装与解包

        学习了上面字段,这个问题对我们来说并没有多大难度,我们可以通过字段中的16位总长度 - 4 * 4位首部长度,这样就可以得到我们的有效载荷,封装就是给报文添加报头即可;

4、如何向上交付

        通过8位协议字段我们得到应该交付给上层哪个协议,我们解包后就可以直接交付了;

5、IP分片

        首先我们在了解IP分片之间我们得直到什么是IP分片,所谓IP分片就是将我们的IP报文通过分片技术将IP报文分成一片一片后再发送;

        为什么要进行IP分片呢?一整个IP报文一起发送出去不可以吗?

这里我们需要直到我们IP层的下层,也就是数据链路层,有一个规定,上层交付给我的数据不可以超过MTU,这里MTU也就是 Maximum Transmission Unit,一般为1500字节;因此若传输层给我们网络层交付的数据过大,我们需要进行分片操作;

(1)16位标识

        在分片技术中,该字段用于标识IP报文的序号,若为同一个分片,16位标识相同;

(2)3位标志

        该字段最低为记为 MF(More Fragment),若为0,要么表示该IP报文没有分片,要么表示该IP报文是IP分片后的最后一个IP分片报文;若为1,表示后面还有分片,这时该分片即可能为第一个分片,也可能为最后一个分片;

        次高位记为 DF(Don't Fragment),表示不能分片,若为1表示该IP报文不允许进行分片,若为0时则表示可以分片;

那么要是上层传输层给我们交付的数据大于MTU,而IP报文中的标识被置为1时,那该怎么办呢?

        此时,我们不用考虑别的,直接丢弃该报文即可!

(3)13位片偏移

        该字段为分片后,该分片的起始地址在原分片中的位置;注意,片偏移是以8字节为单位的!

(4)疑惑解答

如何区分是否分片,或是该分片是分片中的哪一块?

没有分片:MF=0,片偏移=0;

分片第一块:MF=1,片偏移=0;

中间分片:MF=1,片偏移>0;

最后一块分片:MF=0,片偏移>0;

中间分片有这么多块,我们怎么知道它们是否收齐?如何组装?

        我们通过16位标识找到所有属于一个IP数据报的分片,我们可以通过上述规则找到第一片与最后一片,我们接着我们可以通过第一片的总长度找到第二片片偏移的字段应该是多少,从而找到第二片,同时也可以用这个方法找到第三片,第四片等等;最终找齐所有分片,找到所有分片不就可以将其组装起来,然后向上交付吗?

我们是否推荐分片?为什么?

        实际上,我们并不推荐分片这种做法,因为我们思考一下,我们将一个IP报文分成多个IP报文然后发送出去,那么若我们丢掉其中一个IP报文,此时完整的IP报文都不可能被我们完整组装起来,此时我们就要将该IP报文丢弃,视作丢包,等待对端重传,这时效率就低很多了,因此一个报文丢失概率与若干个报文其中一个报文丢失的概率想比,低了很多,因此我们不建议进行分片;

二、网段划分

1、网络号与主机号

网络号:保证相互连接的两个网段具有不同的标识;

主机号:同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;

注意:通常在同一个网段内的主机可以直接通信,具体原理为局域网通信原理;这里记住即可;

        上述中 /24表示该IP地址中,前24个比特位表示网络号,后面8个比特位表示主机号,也就是192.168.128表示网络号,10表示主机号;

2、IP地址分类

        早期是IP地址被划分位如下几类;

        可是如此划分,很快问题就暴露出来了,我们不难看出,A类地址的可分配的主机数地址为2^24,可一般来说很少有子网可以有这么多主机,B类地址有2^16台主机地址,C类有2^8台主机地址,很多公司都申请B类地址,很快B类地址就被用完了,而申请A类的地址,实际上用不上这么多主机,都浪费了,随着互联网发展,这种情况是IP地址越来越不够用了;因此我们后面便未使用这种方法对IP进行分类,而是采用下面的方法;

3、CIDR技术

        所谓CIDR即是 Classless Interdomain Routing,就是通过引入一个网络掩码来区分网络号与主机号;子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;

例如,一个网路的IP地址为192.168.128.10,子网掩码为255.255.255.0;

        此时我们的网络号就是这两个IP地址按位与的结果,也就是192.168.128.0/24;

4、特殊的IP地址

  • 将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;

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

5、子网划分

        我们的网络是如何进行划分的呢?接下来我将带着大家一起进行一次网络划分,下面所有的划分为小编自己划分,并不为真实划分,小编只是模拟划分来带着大家一起理解子网划分的概念;

        我们假如用IP地址最高八位,来对国家进行划分,如下所示;

        上述图中,我们只划分了5个国家的IP地址,其中每个国家都有一个国家路由器,也就是该路由器能识别别的国家路由IP地址,也就是如下图所示;

        每个国家可能有多个不同地区划分,我们以中国为例,中国有34个省,我们可以用6个比特位表示这些省份,如下图所示;

        我们还可以将上述网络继续划分到每个市,甚至每个县,很显然,我们会发现这样我们的IP地址是非常不够用的,因此有了后面的NAT技术

6、私有IP地址与公网IP地址

        由于IP地址数量的不够,因此诞生了公网IP与私网IP的概念;我们规定以下地址为私网IP地址;

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

其余均为公网IP地址;私网IP地址就是为了解决公网IP数量严重不足的问题,具体就是使用NAT技术,暂不介绍;

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

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

相关文章

2024-01-11 部署Stable Diffusion遇挫记

点击 <C 语言编程核心突破> 快速C语言入门 部署Stable Diffusion遇挫记 前言一、一如既往的GitHub部署二、使用的感受总结 create by Stable Diffusion; prompt: fire water llama 前言 要解决问题: 由于近期的努力, 已经实现语音转文字模型, 通用chat迷你大模型的本地…

后端程序员开发win小工具(未完待续)

github&#xff1a;https://gitee.com/forgot940629/win-tool-demo 本地启动&#xff0c;查看http://127.0.0.1:8080/form 场景 在日常工作中可能需要后端开发者开发一些辅助工具。这些辅助工具通常希望能想其他软件一样在桌面系统运行&#xff0c;并且有一些桌面应用的基本…

dbeaver连接人大金仓报错 can‘t load driver class ‘com.kingbase8.Driver;‘

dbeaver可以连接很多数据库&#xff0c;设置dbeaver连接人大金仓&#xff0c;下载安装完成后&#xff0c;需要自行配置人大金仓的驱动&#xff0c;否则无法连接数据库。 一、dbeaver 下载 dbeaver 下载地址&#xff1a;https://dbeaver.io/download/ 二、查找人大金仓驱动 首…

【开源项目】轻量元数据管理解决方案——Marquez

大家好&#xff0c;我是独孤风。 又到了本周的开源项目推荐。最近推荐的元数据管理项目很多&#xff0c;但是很多元数据管理平台的功能复杂难用。 那么有没有轻量一点的元数据管理项目呢&#xff1f; 今天为大家推荐的开源项目&#xff0c;就是一个轻量级的元数据管理工具。虽然…

Linux动态分配IP与正向解析DNS

目录 一、DHCP分配 1. 动态分配 1.1 服务端服务安装 1.2 修改服务端dhcp配置 1.3 修改客户端dhcp&#xff0c;重启查询网卡信息 2. 根据mac固定分配 2.1 修改服务器端dhcp服务配置 2.2 客户端自动获取&#xff0c;查看网卡信息 二、时间同步 1. 手动同步 2. 自动同…

使用numpy处理图片——图片拼接

大纲 左右拼接上下拼接 在《使用numpy处理图片——图片切割》一文中&#xff0c;我们介绍了如何使用numpy将一张图片切割成4部分。本文我们将反其道而行之&#xff0c;将4张图片拼接成1张图片。 基本的思路就是先用两张图以左右结构拼接成上部&#xff0c;另外两张图也以左右拼…

Win2008R2上RedisDesktopManager 黑屏

问题&#xff1a; 运行发现右侧显示缓存信息的部分是黑屏。 解决方式&#xff1a; 管理工具->远程桌面服务->远程桌面会话主机配置->RDP-TCP->属性->客户端设置->颜色深度->限制最大颜色深度,将16位改为32位

新能源时代-电动汽车充电桩设备建设及运维平台搭建

安科瑞 崔丽洁 摘要&#xff1a;在社会经济发展的新时期&#xff0c;我国城市化的水平也在随之不断的提高&#xff0c;使我国制造业迅速崛起&#xff0c;并加剧了该行业的竞争力&#xff0c;要想使企业在竞争中占据有力的位置&#xff0c;企业就要顺应时代发展的潮流&#xff0…

Thumbnail AI:让图片处理更智能

一、产品介绍 Thumbnail AI是一款基于人工智能技术的图片处理软件&#xff0c;能够快速、准确地生成各种尺寸的缩略图。这款软件非常适合用于网站建设、广告设计、电商等领域&#xff0c;能够大大提高图片处理效率。 二、应用场景 网站建设&#xff1a;在网站建设中&#xff…

深度学习”和“多层神经网络”的区别

在讨论深度学习与多层神经网络之间的差异时&#xff0c;我们必须首先理解它们各自是什么以及它们在计算机科学和人工智能领域的角色。 深度学习是一种机器学习的子集&#xff0c;它使用了人工神经网络的架构。深度学习的核心思想是模拟人脑神经元的工作方式&#xff0c;以建立…

SpringBoot 把PageHelper分页信息返回给前端

第1步&#xff1a;定义线程容器收纳HttpHeaders和HttpStatus import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus;public class ResponseUtils {private static ThreadLocal<HttpHeaders> ThreadLocalHeaders new InheritableT…

R730服务器做了raid的硬盘,插在R720上面可以用吗?

环境 戴尔R720 戴尔R730 问题描述 R730服务器做了raid的硬盘&#xff0c;插在R720上面可以用吗&#xff1f; 解决方案 1.直接在 R730服务器做了raid的硬盘&#xff0c;卸下来在插在r720上面使用 &#xff0c;读不到硬盘 2.前往R730服务器上面&#xff0c;去清除RAID配置的…

一个完整的流程表单流转

1.写在前面 一个完整的流程表单审批&#xff08;起表单-->各环节审批-->回退-->重新审批-->完成&#xff09;&#xff0c;前端由Vue2jsElement UI升级为Vue3tsElement Plus&#xff0c;后端流程框架使用Flowable&#xff0c;项目参考了ruoyi-vue-pro(https://gite…

Hibernate实战之操作MySQL数据库(2024-1-8)

Hibernate实战之操作MySQL数据库 2024.1.8 前提环境&#xff08;JavaMySQLNavicatVS Code&#xff09;1、Hibernate简介1.1 了解HQL 2、MySQL数据库建表2.1 编写SQL脚本2.2 MySQL执行脚本 3、Java操作MySQL实例&#xff08;Hibernate&#xff09;3.1 准备依赖的第三方jar包3.2 …

UI自动化测试工具对企业具有重要意义

随着软件行业的不断发展&#xff0c;企业对高质量、高效率的软件交付有着越来越高的要求。在这个背景下&#xff0c;UI自动化测试工具成为了企业不可或缺的一部分。以下是UI自动化测试工具对企业的重要作用&#xff1a; 1. 提高软件质量 UI自动化测试工具能够模拟用户的操作&am…

FlinkAPI开发之自定义函数UDF

案例用到的测试数据请参考文章&#xff1a; Flink自定义Source模拟数据流 原文链接&#xff1a;https://blog.csdn.net/m0_52606060/article/details/135436048 概述 用户自定义函数&#xff08;user-defined function&#xff0c;UDF&#xff09;&#xff0c;即用户可以根据…

【PaperReading】4. TAP

Category Content 论文题目 Tokenize Anything via Prompting 作者 Ting Pan, Lulu Tang, Xinlong Wang, Shiguang Shan (Beijing Academy of Artificial Intelligence) 发表年份 2023 摘要 提出了一个统一的可提示模型&#xff0c;能够同时对任何事物进行分割、识别和…

【野火i.MX6ULL开发板】利用microUSB线烧入Debian镜像

0、前言 烧入Debian镜像有两种方式&#xff1a;SD卡、USB SD卡&#xff1a;需要SD卡&#xff08;不是所有型号都可以&#xff0c;建议去了解了解&#xff09;、SD卡读卡器 USB&#xff1a;需要microUSB线 由于SD卡的网上资料很多了&#xff0c;又因为所需硬件&#xff08;SD卡…

【提示学习论文六】MaPLe: Multi-modal Prompt Learning论文原理

文章目录 MaPLe: Multi-modal Prompt Learning 多模式提示学习文章介绍动机MaPLe:Multi-modal Prompt Learning 模型结构1、Deep Language Prompting 深度语言提示2、Deep Vision Prompting 深度视觉提示3、Vision Language Prompt Coupling 视觉语言提示耦合提示耦合过程 实验…

Proteus仿真stm32f103r6输出PWM/正弦波

资料下载地址&#xff1a;Proteus仿真stm32f103r6输出PWM/正弦波 一、仿真图 Proteus仿真stm32f103r6输出PWM/正弦波 二、程序 #include "pbdata.h"u16 fre; void RCC_Configuration(void); void GPIO_Configuration(void); void TIM3_Configuration();void Dela…