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

网络层 IP协议【计算机网络】【协议格式 || 分片 || 网段划分 || 子网掩码】

  博客主页:花果山~程序猿-CSDN博客

文章分栏:Linux_花果山~程序猿的博客-CSDN博客

关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长!

在这里插入图片描述

目录

一,前提

二,IP协议格式

三,IP数据包分片 

三,网段划分

1.子网掩码

网段的理解

例子

2. NAT技术

私有IP与公有IP

NAT工作原理示例

私有ip访问外部网站(内部到外部)

外部网站响应(外部到内部)

3. 路由


嗨!收到一张超美的图,愿你每天都能顺心!

一,前提

        在学习网络层之前,我们可以回顾一下上一层——传输层,这里以TCP协议为例,TCP业绩叫传输控制协议,需要保证报文传递的可靠性,将应用层下达的数据进行拆分,形成一个个TCP段(通过序列号保证可靠传输和有序接收,通过确认,检测,重传等机制),然后再向网络层进行交付,而在接收机器上传输层等待下层向上交付,这个中间的过程传输层则不关心。

        传输层保证的是数据的可靠性,以及数据丢失重传等策略,网络层功能又什么? (为了避免误导,这里用AI回答)

        网络层,主要职责是负责数据包在网络中的传输路由选择,它是实现不同网络之间互联的基础。

二,IP协议格式

属性讲解

4位版本号 (version): 指定 IP 协议的版本 , 对于 IPv4 来说 , 就是 4。
4位头部长度 (header length): IP 头部的长度是多少个 32bit, 也就是 length * 4 的字节数 。4bit 表示最大的数字是15, 因此 IP 头部最大长度是 60 字节。(通过这个我们可以获取选项长度
8 位服务类型 (Type Of Service): 3 位优先权字段 ( 已经弃用 ), 4 TOS 字段 , 1 位保留字段 ( 必须置为 0)。4 位 TOS分别表示 : 最小延时, 最大吞吐量, 最高可靠性, 最小成本 . 这四者相互冲突 , 只能选择一个。 对于ssh/telnet这样的应用程序 , 最小延时比较重要 ; 对于 ftp 这样的程序 , 最大吞吐量比较重要。
16位总长度 (total length): IP 数据报整体占多少个字节。(一个IP数据报最大是6.5w字节
8位生存时间 (Time To Live, TTL): 数据报到达目的地的最大报文跳数。 一般是 64. 每次经过一个路由 , TTL == 1, 一直减到 0 还没到达 , 那么就丢弃了 . 这个字段主要是用来防止出现路由循环。(本质是一个计数器,每经过一个路由器则--

三,IP数据包分片 

第二层属性比较特殊,在了解这些之前,我们首先理解一下分片概念

我们知道一个IP数据包支持6.5w字节,这里提前透露数据链路层的知识,数据链路层每次传输字节数是有限制的,假设只支持1500字节,那么IP数据包就需要分片,同时需要多次传递。(对于分片的策略有这个功能,但并不推荐,原因可以查查资料)

进行分片后就容易出现问题,如下面问题:

1. 在接收方网络层进行组装时,如何保证数据片的是同一份IP报文,顺序,以及完整性?

首先我们先认识一下这三个属性信息: 

  • 16位标识(id): 标识唯一主机发送的报文。如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的。——保证分片为同一份IP数据包
  • 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了)。
  • 3位标志字段:
  • 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到)。
  • 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文.
  • 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为1, 其他是0。类似于一个结束标记。

三,网段划分

        我们知道IPv4最大可以容纳42亿台主机,同时我们知道IPv4也即将面临地址不够用的情况,面对不够用的情况,人们想出了子网掩码,私有IP&公网IP的方式来缓解IP地址的枯竭。

        首先我们得有一个全球的视角,IP地址有32位,每个国家也都需要IP地址资源,从左侧开始(255.255.255.255),假设美国拿1开头的IP,中国拿2开头的IP资源,国家以这样的方式来划分IP资源,然后在国内再进行划分(以中国为例),河北省拿21...开头的ip,河南拿22...开头的ip,通过这样的方式将IP地址划分,知道单个主机,这样就会形成两个部分,也就是要说的 IP 地址有两个部分:网络号 + 主机号

网络号 : 保证相互连接的两个网段具有不同的标识 ;
主机号 : 同一网段内 , 主机之间具有相同的网络号 , 但是必须有不同的主机号 ;
关于网段定义,我们后面聊完私有IP,公网IP后说。
通过合理设置主机号和网络号 , 就可以保证在相互连接的网络中 , 每台主机的 IP 地址都不相同。
那么问题来了 , 手动管理子网内的 IP, 是一个相当麻烦的事情 .
  • 有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.
  • 一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器.

 在曾经也有一些如何设置主机号和网络号方案,如下:

但这方案的弊端也很明显,大部分的企业或者组织更愿意选择B类的方案,导致B类方案地址缺乏,更重要的是并不是所有企业分配到的IP地址都能被使用,因此缺少一种动态分配网络号与主机号的占比的方案,称为CIDR(Classless Interdomain Routing),由此子网掩码出现。 

1.子网掩码

网段的理解

这些IP地址共享相同的网络部分,意味着它们位于同一个逻辑网络或者可以无需通过路由器直接相互通信的网络部分。

更具体地说,当一个大的IP地址空间被划分为若干小的、可管理的部分时,每一个这样的部分就称为一个网段。这个划分过程通常是通过应用一个子网掩码来实现的,子网掩码决定哪些位表示网络部分,哪些位表示主机部分

例子

假设我们有一个IP地址 192.168.1.10 和子网掩码 255.255.255.0

  • IP地址 192.168.1.10 转换为二进制是 11000000.10101000.00000001.00001010
  • 子网掩码 255.255.255.0 转换为二进制是 11111111.11111111.11111111.00000000

通过与运算,我们可以确定网络部分:

  • 11000000.10101000.00000001.00000000 (即 192.168.1.0

所以,网段指的是所有具有相同前三部分(网络部分)的IP地址集合,也就是所有形如 192.168.1.x 的地址(其中x代表可能的主机号部分,范围通常是1到254)。在这个例子中,192.168.1.0192.168.1.255 就构成了一个网段,所有这些地址都在同一个逻辑网络中,理论上可以直接互相通信,不需要路由器来进行跨网段的路由。

 可IPv4的地址仍旧不够用,CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然

不是很够用 . 这时候有三种方式来解决 :
  • 动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;(上限没有提高,只是提高了利用率)
  • IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及(有一部分原因是NAT技术大大缓解了IPv4的地址缺失);
  • NAT技术(后面会重点介绍);

2. NAT技术

NAT(Network Address Translation,网络地址转换)技术通过允许一个私有网络内的多个设备共享一个或少数几个公有IP地址访问互联网,从而有效缓解了IPv4地址的紧缺问题。这里通过一个简化例子来说明NAT的工作原理:

私有IP与公有IP

首先,了解一下概念:

  • 私有IP地址(局域网):这些地址在RFC 1918中定义,用于内部网络,不能直接在互联网上路由。常见的私有IP地址段包括:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。
  • 公有IP地址(全球级的广域网):全球唯一的IP地址,可以直接在互联网上路由,但数量有限(多为一些大型跨国企业)。

NAT工作原理示例

假设有一个小型企业网络,内部有三台电脑,它们的私有IP地址分别为:

  1. 电脑A: 192.168.1.10
  2. 电脑B: 192.168.1.11
  3. 电脑C: 192.168.1.12

这个企业只有一个公有IP地址,例如:203.0.113.42,由路由器管理并用于外部通信。

私有ip访问外部网站(内部到外部)
  1. 电脑A请求访问互联网:电脑A想要访问一个外部网站,它发送的数据包源IP是其私有IP(192.168.1.10)。
  2. 路由器进行NAT转换:路由器接收到这个数据包后,使用NAPT(Network Address Port Translation,网络地址端口转换)技术,将数据包的源IP地址替换为公有IP地址(203.0.113.42),同时记录下这个转换关系(源私有IP、源端口到公有IP、新的端口号)。
  3. 数据包转发:修改后的数据包,现在拥有公有IP地址和一个新的端口号,被路由器转发到互联网上。(这里我们可以联想在学习mysql时,云服务器向公网开放时,要选择接收任一源IP的请求连接,你不会知道那个路由器会为你转发)
外部网站响应(外部到内部)
  1. 外部响应:当外部服务器响应时,它将数据包发送到公有IP地址(203.0.113.42)和之前路由器分配的新端口号。
  2. 路由器转换回私有IP:路由器根据之前的转换记录,识别出这个数据包是给电脑A的,然后将目标IP地址和端口号转换回电脑A的私有IP地址(192.168.1.10)和原来的端口号,再将数据包转发给电脑A。

通过这种方式,NAT技术使得企业网络内的多台设备可以共享同一个公有IP地址访问互联网,极大地节省了公有IP地址的消耗,缓解了IPv4地址的紧缺问题。同时,由于私有IP地址对互联网是隐藏的,这也增加了网络的安全性。

3. 路由

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

路由的过程 , 就是这样一跳一跳 (Hop by Hop) " 问路 " 的过程 .
所谓 " 一跳 " 就是数据链路层中的一个区间 . 具体在以太网中指从源 MAC 地址到目的 MAC 地址之间的帧传输区间

本质上是数据结构上图论部分,感谢兴趣的可以订阅我的高阶数据结构专栏,这里就了解一下。 

高阶数据结构_花果山~程序猿的博客-CSDN博客

结语

   本小节就到这里了,感谢小伙伴的浏览,如果有什么建议,欢迎在评论区评论,如果给小伙伴带来一些收获,请动动你发财的小手点个免费的赞,你的点赞和关注永远是博主创作的动力源泉。

相关文章:

网络层 IP协议【计算机网络】【协议格式 || 分片 || 网段划分 || 子网掩码】

博客主页:花果山~程序猿-CSDN博客 文章分栏:Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 一,前提 二&…...

Python学习笔记14:进阶篇(三)。类的终结篇,类的导入和模块的导入。

前言 这篇文章属于类知识的最后一篇,带一点点其他知识,学习内容来自于Python crash course。 关注我私信发送Python crash course,分享一份中文版PDF。 类的导入 在学习的时候,包括之前,我都是在一个文件中把所有代…...

C++ lambda表达式举例

C lambda表达式 Lambda表达式是一种简洁的方式来创建匿名函数,可以直接在函数调用的地方定义,主要用于简化代码。 Lambda表达式的基本语法如下: [capture](parameters) -> return_type {// function body };示例1:基本用法 …...

持续总结中!2024年面试必问 20 道设计模式面试题(五)

上一篇地址:持续总结中!2024年面试必问 20 道设计模式面试题(四)-CSDN博客 九、请解释代理模式(Proxy Pattern)及其类型。 代理模式(Proxy Pattern)是一种结构设计模式&#xff0c…...

嵌入式面经111题答案汇总(含技术答疑)_嵌入式项目源码分享

111道嵌入式面试题答案汇总专栏链接(承诺免费技术答疑) --> 《嵌入式/C面试题解析大全》 1、简介 本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业工作经验,整理超全面111道嵌入式面试…...

鸿蒙开发通信与连接:【@ohos.connectedTag (有源标签)】

有源标签 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import connectedTag from ohos.connectedTag;connectedTag.init init(): boolean 初始化有源标签芯片。 需要权限&#…...

在线编程工具

1.C语言在线编程 https://www.jyshare.com/compile/11/ 2.java在线编程 https://www.w3cschool.cn/tryrun/runcode1?langjava 3.Python在线编程 https://www.python123.io/index/playground/python?ivk_sa1024320u...

NSSCTF中的[WUSTCTF 2020]朴实无华、[FSCTF 2023]源码!启动! 、[LitCTF 2023]Flag点击就送! 以及相关知识点

目录 [WUSTCTF 2020]朴实无华 [FSCTF 2023]源码!启动! [LitCTF 2023]Flag点击就送! 相关知识点 1.intval 绕过 绕过的方式: 2.session伪造攻击 [WUSTCTF 2020]朴实无华 1.进入页面几乎没什么可用的信息,所以想到使用dis…...

Vue49-props属性

一、当同一个组件标签被使用多次 因为data属性写的是函数形式&#xff01; 二、需求&#xff1a;老王也想用<Student>组件&#xff0c;但是需要动态把老王想要的值传进来。 2-1、使用props属性接收参数 使用props属性&#xff0c;接收的这三个参数&#xff0c;是被保存在…...

CVE-2020-1957 漏洞复现

先声明一下&#xff0c;免杀还是会更的&#xff0c;不过中间可能会穿插一下渗透的内容&#xff01;&#xff01;&#xff01; 踩坑点&#xff1a; 在一开始翻阅了CSDN之后&#xff0c;发现不同文章之间存在出入&#xff0c;于是最后去了CVE的官方文档&#xff0c;和参考一些国…...

网工内推 | 中国电信、香港宽频系统工程师,CCIE认证优先,最高年薪25w

01 中国电信股份有限公司浙江分公司 &#x1f537;招聘岗位&#xff1a;系统架构师 &#x1f537;岗位职责&#xff1a; 1、做好客户网络和信息安全产品的解决方案支撑、交付及后续运营维护&#xff0c;做好相关产数项目的支撑。 2、根据信息安全管理要求&#xff0c;负责客户…...

LLVM后端 td文件 tablegen 模式匹配 寄存器 指令集 calling convention

目录 一、寄存器 1.1 寄存器定义 1.2 寄存器分类 二、指令集 2.1 指令集定义 2.2 模式匹配 2.2.1 PatFrags与PatFrag 2.2.2 OutPatFrag 2.2.3 PatLeaf 2.2.4 ImmLeaf 2.2.5 IntImmLeaf和FPImmLeaf 2.2.6 Pat 2.2.7 ComplexPattern 2.3 指令合法化 2.3.1 Promote…...

嵌入式交叉编译:frp

参考 LINUX FRP下载编译_linux编译frpc-CSDN博客 编译 make -f Makefile.cross-compiles 检查 $ make -f Makefile.cross-compiles Build darwin-amd64... Build darwin-amd64 done Build darwin-arm64... Build darwin-arm64 done Build freebsd-amd64... Build freebsd-…...

SpringBoot实现的大文件上传

前言 大文件分片上传和断点续传是为了解决在网络传输过程中可能遇到的问题&#xff0c;以提高文件传输的效率和稳定性。 首先&#xff0c;大文件分片上传是将大文件分割成较小的片段进行上传。这样做的好处是可以减少单个文件的传输时间&#xff0c;因为较小的文件片段更容易快…...

【Python高级编程】用 Matplotlib 绘制迷人的图表

用 Matplotlib 绘制迷人的图表 引言 Matplotlib 是 Python 中广泛使用的绘图库&#xff0c;用于创建各种图表和可视化。本文将逐步指导您使用 Matplotlib 绘制基本图表&#xff0c;包括折线图、条形图和散点图。 安装 Matplotlib 使用 pip 安装 Matplotlib&#xff1a; pi…...

【UML用户指南】-19-对基本行为建模-用例图

目录 1、组成结构 2、表示法 3、一般用法 3.1、对主题的语境建模 3.2、对主题的需求建模 4、常用建模技术 4.1、对系统的语境建模 4.1.1、设计过程 4.2、对系统的需求建模 4.2.1、设计过程&#xff1a; 5、正向工程 UML 中的用例图是对系统的动态方面建模的 5 种图之…...

mysql密码过期的修改(Your password has expired. ..)

参考文章&#xff1a;mysql密码过期的修改方法&#xff08;your password has expired&#xff09;_我是知青-RuoYi 若依 (csdn.net) 问题&#xff1a;Your password has expired. To log inyou must change it using a clientthat supports expired passwords. 解决方式&…...

vivado SLR

描述 超级逻辑区&#xff08;SLR&#xff09;是包含在堆叠硅中的单个FPGA芯片 互连&#xff08;SSI&#xff09;设备。堆叠式硅互连&#xff08;SSI&#xff09;技术使用无源硅 具有微凸块和硅通孔&#xff08;TSV&#xff09;的内插器&#xff0c;用于组合多个FPGA管芯 切片&a…...

【CSS】深入了解圆角属性border-radius

border-radius 是 CSS 中的一个非常有用的属性&#xff0c;它允许你创建具有圆角边框的元素。这个属性可以应用于一个元素的四个角&#xff0c;或者分别应用于每个角。下面我们将深入了解 border-radius 的使用方法和一些高级技巧。 基本用法 你可以通过为 border-radius 指定…...

LabVIEW与C#的区别及重新开发自动测试程序的可行性分析

LabVIEW和C#是两种广泛使用的编程语言&#xff0c;各自有不同的应用领域和特点。本文将详细比较LabVIEW与C#在自动测试程序开发中的区别&#xff0c;并分析将已完成的LabVIEW自动测试程序重新用C#开发的合理性。本文帮助评估这种转换的必要性和潜在影响。 LabVIEW与C#的区别 开…...

人工智能—美国加利福尼亚州房价预测实战

引言 在当今快速发展的房地产市场中&#xff0c;房价预测已成为一个至关重要的领域。它不仅关系到投资者的决策&#xff0c;也直接影响到普通购房者的生活质量。特别是在美国加利福尼亚州&#xff0c;这个以其高房价和房地产市场的波动性而闻名的地方&#xff0c;准确的房价预…...

python pandas处理股票量化数据:笔记2

有一个同学用我的推荐链接注册了tushare社区帐号https://tushare.pro/register?reg671815&#xff0c;现在有了170分积分。目前使用数据的频率受限制。不过可以在调试期间通过python控制台获取数据&#xff0c;将数据保存在本地以后使用不用高频率访问tushare数据接口&#xf…...

enum库

Python enum 模块教程 enum 是 Python 3.4 引入的一个模块&#xff0c;用于定义枚举类型。枚举类型是一种特殊的数据类型&#xff0c;由一组命名的值组成&#xff0c;这些值称为枚举成员。使用 enum 可以提高代码的可读性和可维护性&#xff0c;特别是在处理一组相关的常量值时…...

【CT】LeetCode手撕—141. 环形链表

目录 题目1- 思路2- 实现⭐141. 环形链表——题解思路 3- ACM实现 题目 原题连接&#xff1a;141. 环形链表 1- 思路 模式识别 模式1&#xff1a;判断链表的环 ——> 快慢指针 思路 快指针 ——> 走两步慢指针 ——> 走一步判断环&#xff1a;若快慢相遇则有环&a…...

python,自定义token生成

1、使用的包PyJWT来实现token生成 安装&#xff1a;pip install PyJWT2.8.0 2、使用例子&#xff1a; import jwt import time pip install pyJWT2.8.0 SECRET_KEY %^ES*E&Ryurehuie9*7^%$#$EDFGHUYTRE#$%^&%$##$RTYGHIK DEFAULT_EXP 7 * 24 * 60def create_token(…...

小米SU7遇冷,下一代全新车型被官方意外曝光

不知道大伙儿有没有发现&#xff0c;最近小米 SU7 热度好像突然之间就淡了不少&#xff1f; 作为小米首款车型&#xff0c;SU7 自上市以来一直承载着新能源轿车领域流量标杆这样一个存在。 发售 24 小时订单量破 8 万&#xff0c;2 个月后累计交付破 2 万台。 看得出来限制它…...

JavaScript 函数与事件

1. JavaScript自定义函数 语法&#xff1a; function 函数名&#xff08;参数列表&#xff09;{ 方法体; } 在函数被调用时&#xff0c;一个 arguments 对象就会被创建&#xff0c;它只能使用在函数体中&#xff0c;以数组的形式来管理函数的实际…...

Qt 焦点系统关键点总结

1.1 焦点窗口 指的是当前时刻拥有键盘输入的窗口。 Qt提供了如下接口&#xff0c;用于设置窗口是否是”可获取焦点“窗口&#xff1a; void QWidget::setFocusPolicy(Qt::FocusPolicy policy); Qt::FocusPolicy Qt::TabFocus 与焦点链相关&#xff0c;详解见下一…...

SpringBoot+Maven项目的配置构建

文章目录 1、application.properties2、pom.xml 1、application.properties 也可使用yml yaml #静态资源 spring.mvc.static-path-pattern/images/** #上传文件大小设置 spring.http.multipart.max-file-size10MB spring.http.multipart.max-request-size10MBspring.mvc.path…...

c#调用c++dll方法

添加dll文件到debug目录&#xff0c;c#生成的exe的相同目录 就可以直接使用了&#xff0c;放在构造函数里面测试...

余姚网站建设哪家好/seo网页优化公司

信号量信号量信号量的同步与互斥实现信号量与条件变量实现同步的区别&#xff1a;信号量的接口函数&#xff1a;信号量如何实现同步与互斥信号量实现同步信号量实现互斥使用信号量实现生产者与消费者模型(代码实现&#xff09;信号量 信号量的同步与互斥实现 作用&#xff1a…...

佛山正规网站建设哪家好/网站推广app下载

我已经阅读了this问题和一些类似的问题,我想知道是否有任何情况我应该在单例模式上使用静态类&#xff1f;解决方法:当您使用“只是代码”方法时,使用静态“实用程序”类(只有静态方法的类) – 您不需要任何特定的基类或接口实现的方法.关键指标是代码是无状态的 – 即类中没有…...

西安网站建设系统开发/百度搜索电话

背景 在做性能测试的时候,传统方式都是用并发虚拟用户数来衡量系统的性能(站在客户端视角),一般适用于一些网页站点例如首页、H5的压测;而RPS(Requests per second)模式主要是为了方便直接衡量系统的吞吐能力TPS(Transaction Per Second,每秒事务数)而设计的(站在服务端视角…...

网站淘宝客怎么做/网站设计与建设的公司

DMA的基本定义DMA&#xff0c;全称Direct Memory Access&#xff0c;即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间&#xff0c;提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个传输动作&#xff0c;传输动作本身是由DMA控…...

无锡企业如何建网站/网络优化排名培训

沪江CCtalk视频地址&#xff1a;https://www.cctalk.com/v/15114923887518 处理错误请求 爱能遮掩一切过错。当我们在访问一个站点的时候&#xff0c;如果访问的地址不存在(404)&#xff0c;或服务器内部发生了错误(500)&#xff0c;站点会展示出某个特定的页面&#xff0c;比如…...

超链接到网站怎么做视频文件下载/互联网推广方式有哪些

这两天要在阿里云日志中操作UI&#xff0c;以输入关键字搜索日志。 在send_keys时报错element not interactable。 iframe 第一个问题是iframe&#xff0c;通过切换iframe解决&#xff1a; driver.switch_to.frame(0) # 索引从0开始 span 第二个问题是span。 F12查看html长这样…...