网络层协议-----IP协议
目录
1.认识IP地址
2.IP地址的分类
3.子网划分
4.公网IP和私网IP
5.IP协议
6.如何解决IP地址不够用
1.认识IP地址
IP 地址(Internet Protocol Address)是指互联网协议地址。
它是分配给连接到互联网的设备(如计算机、服务器、智能手机、物联网设备等)的数字标签,用于在网络中识别和定位这些设备。就好像是每一个接入网络的设备的 “身份证号码”,通过这个号码,数据就能准确地找到要发送的目标设备或者找到数据的来源设备。
1.IP地址是给因特网上的每个主机或路由器的每个接口分配的一个标识符
2.借助IP地址,就可以在网络中找到该IP标识的主机或路由器接口
3.IP地址分为IPv4(32位/4个字节)和IPv6版本(128位/16字节)
2的32次方大概约等于42亿多,也就是说可以给42亿多台主机和路由器接口分配IP地址,在IPv4刚出来的时候,这个数量是够用的,但是随着互联网的飞速发展,当前人们拥有多部手机以及电脑,各种网络设备,这个IP地址数量就显然不够用了。
IPv6可用的地址数大概是3.4乘以10的38次方,IPv4大概是4乘以10的9次方,所以使用IPv6在我们有生之年以及后面相当长的时间里是够用的
为什么到现在IPv6的普及率还这么低呢?
大家可以观看这个视频了解相关的原因:电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1i14y157YV/?spm_id_from=333.1391.0.0&vd_source=e397e08c048028924220be584c3a14f2https://www.bilibili.com/video/BV1i14y157YV/?spm_id_from=333.1391.0.0&vd_source=e397e08c048028924220be584c3a14f2
IP地址是由32比特构成的,这样的地址不方便人们阅读和记忆
IP地址为了方便记忆记录和使用采用点分十进制进行表示
每8比特转换为一个十进制,中间用 “ . ” 分隔开
IPv4的IP地址由两部分组成:网络号和主机号
网络号:
标识主机或路由器接口所连接到的网络
如果主机或路由器接口的IP地址的网络号相同,表示他们属于同一段网络/段
主机号:
标识网络中的主机或路由器接口
同一网络中,不同主机或路由器接口的IP地址的主机号必须不同,以便区分各主机或路由器接口
在不同网络中,不同主机或路由器接口的IP地址的主机号可以相同
1.网络号相同的主机或路由器接口处于同一网段或同一局域网中
2.局域网之间通过路由器相连,形成互联网
3.因特网是最大的互联网
2.IP地址的分类
IP地址分为下面5类:
E类地址:保留为将来用的,所以不用管他
D类地址:多播地址,对于传统的通信来说,都是一个一对一的关系,也就是给一台主机分配一个IP地址,再给另外一台主机分配一个IP地址,两台主机之间通过这两个IP地址进行通信,而多播地址是将多个主机分配到一个组里,然后再给这个组分配一个多播地址,通过这个多播地址就可以给多台主机发送同一份数据
上面两种地址了解一下就行
我们重点学习ABC三中类型的地址
1. A类IP地址的网络号占8位。它的第一个字节是网络号,范围是1 - 126(0和127有特殊用途,0表示所有网络,127用于本地软件回环测试)。例如,一个A类IP地址10.0.0.1,其中“10”就是网络号部分,后面的三个字节(0.0.1)是主机号部分。
2. B类IP地址的网络号占16位。它的前两个字节是网络号,第一个字节的范围是128 - 191。例如,一个B类IP地址130.10.0.1,其中“130.10”是网络号部分,后面的两个字节(0.1)是主机号部分。
3. C类IP地址的网络号占24位。它的前三个字节是网络号,第一个字节的范围是192 - 223。例如,一个C类IP地址192.168.1.1,其中“192.168.1”是网络号部分,最后一个字节“1”是主机号部分。
1)只有A,B,C类地址可以分配给网络中的主机或路由器接口
2)主机号全0的地址是网络地址,不能分配给主机和路由器接口
3)主机号全1的地址是广播地址,不能分配给主机或路由器接口
4)在32比特中,0开头的是A类地址,10开头的B类地址,110开头的是C类地址
列如:
IP地址为192.168.1.1,将192十进制转二进制得到11000000,是110开头,所以是C类地址,那么192.168.1为网络号,最后的1为主机号;
主机号全0或全1是指主机号对应的比特全0或全1;
主机号全0:192.168.1.0,这个地址为网络地址
主机号全1:192.168.1.255,这个地址为广播地址
5)除去网络地址和广播地址,剩下的192.168.1.1~192.168.1.254就是可以分配的地址
1.对于A类地址,网络号为8位,由于第一位固定,0和127不可分配,所以可分配的网络号数量为2^7-2,剩下的24位为主机号,网络地址和广播地址不能分配,所以可以分配的主机数量为2^24-2
2.对于B类地址,网络号为16位,由于前两位位固定,所以可分配的网络号数量为2^14,剩下的16位为主机号,网络地址和广播地址不能分配,所以可以分配的主机数量为2^16-2
3.对于C类地址,网络号为24位,由于前三位固定,所以可分配的网络号数量为2^21,剩下的8位为主机号,网络地址和广播地址不能分配,所以可以分配的主机数量为2^8-2
缺陷:对于这种ABC类型的地址,此时IP地址的网络号和主机号是固定数,就会很容易造成大量的IP地址浪费
3.子网划分
子网划分可以有效的解决地址分类造成的IP地址浪费问题
子网划分能够让IP地址的网络号和主机号位数能够根据需求变化
划分子网的方法:从主机号中借用一些比特位作为子网号来划分出不同的子网
在C类IP地址中,我们借用主机号的第一位比特来划分出子网,主机号就从原来的主机号数量减少一半了,在一定程度上缓解了IP地址浪费的问题
对于划分子网,我们就无法知道原来的主机号是多少位了,这时候我们就有了子网掩码,他就可以划分出网络号和主机号有多少位
子网掩码:左起连续的1对应IP中的网络号和子网号,之后的0对应主机号
对于上述的子网1和子网2,网络号和子网号有25位,所以对应25个1,主机号有7位,所以对应7个0,然后再将子网掩码用点分十进制表示就得到子网掩码为255.255.255.128
在cmd中输入ipconfig可以查看自己电脑的IP信息
默认子网掩码:指未划分子网的情况下使用的子网掩码
A类地址子网掩码:255.0.0.0
B类地址子网掩码:255.255.0.0
C类地址子网掩码:255.255.255.0
IP地址和子网掩码得到网络地址:将IP地址和子网掩码按位与(对应的数字都为1才为1,否则为0),就能得到IP地址所在的网络地址
对于主机号,将除去子网号的部分转化为十进制就可以得到
CIDR:使用CRID可以简化IP地址和子网掩码的表达;
格式:IP地址/子网号的位数
列如:IP:200.10.0.10
子网掩码:255.255.255.128
CIDR:200.10.0.10/25
同一网络判断:
1.通信时,发送方主机用自己的IP地址和自己的子网掩码按位与
2.发送方主机再用目的主机的IP地址和自己的子网掩码按位与
3.两个按位与的结果对比,判断是否在同一网络
如果目的主机和自己在一个网络,可以直接向目的主机发送消息
如果目的主机和自己不在同一网络,需要将消息发送到网关(路由器)
4.公网IP和私网IP
主要是为了缓解IP地址不够用的问题
公网IP:用于广域网,各不相同
私网IP:用于局域网,不同网络中可以相同
私网IP:
A类:10.0.0.0/8~10.255.255.255/8
B类:172.16.0.0/16~172.31.0.0/16
C类:192.168.0.0/24~192.168.255.0/24
NAT
NAT(Network Address Translation)即网络地址转换。它是一种在 IP 网络中用于将私有 IP 地址转换为公有 IP 地址的技术。当内部网络(如企业内部局域网)中的主机要与外部网络(如互联网)通信时,NAT 设备(通常是路由器)会对数据包中的源 IP 地址进行转换。
工作原理:
私有 IP 和公有 IP:
在一个局域网内,设备通常使用私有 IP 地址,这些地址是在特定范围内预留的,不会在互联网上直接路由。例如,IPv4 中私有 IP 地址范围包括 10.0.0.0 - 10.255.255.255、172.16.0.0 - 172.31.255.255 和 192.168.0.0 - 192.168.255.255。公有 IP 地址是由互联网服务提供商(ISP)分配的、在互联网上唯一可路由的 IP 地址。
转换过程:当内部网络中的主机(假设其 IP 地址为 192.168.1.10)向外部网络发送数据包时,NAT 设备会将数据包的源 IP 地址从私有 IP(192.168.1.10)转换为公有 IP(例如由 ISP 分配的 202.10.10.10)。同时,NAT 设备会记录这个转换关系,以便当外部网络的主机回复数据包时,能够将目的 IP 地址从公有 IP 转换回私有 IP,从而使内部网络的主机能够正确接收响应
类型:
静态 NAT:
在静态 NAT 中,内部网络中的每个私有 IP 地址都被映射到一个固定的公有 IP 地址。例如,内部网络中有一台服务器,其私有 IP 地址为 192.168.1.20,通过静态 NAT 将其映射到公有 IP 地址 202.10.10.20。这种方式适用于需要外部网络能够直接访问内部特定服务器的情况,如企业内部的 Web 服务器或邮件服务器。
动态 NAT:动态 NAT 会根据需要从一个公有 IP 地址池中动态地分配公有 IP 地址给内部网络的主机。当内部主机请求访问外部网络时,NAT 设备从公有 IP 地址池中选择一个可用的公有 IP 地址进行转换。这种方式能够更有效地利用公有 IP 地址,适用于内部网络中有大量主机需要临时访问外部网络的情况。
端口地址转换(PAT):这是最常用的一种 NAT 类型。PAT 也称为 NAT 重载(NAT Overload)。它不仅转换 IP 地址,还转换端口号。在 PAT 中,多个内部主机可以共享一个公有 IP 地址。例如,内部网络中有 3 台主机(IP 地址分别为 192.168.1.1、192.168.1.2 和 192.168.1.3)同时访问外部网络,NAT 设备可以将它们的源 IP 地址都转换为同一个公有 IP 地址(如 202.10.10.10),但通过不同的端口号(如 1024、1025、1026 等)来区分不同的内部主机,从而实现多个主机通过一个公有 IP 地址与外部网络通信。
优点:
节省公有 IP 资源:由于 IPv4 地址空间有限,通过 NAT 技术可以让多个内部私有 IP 地址的设备共享一个或少量的公有 IP 地址,从而大大节省了公有 IP 地址资源。这对于企业和家庭网络等内部网络规模较大,但只需少量对外访问的情况非常有利。
增强网络安全性:NAT 对内部网络的 IP 地址进行隐藏,外部网络无法直接看到内部网络主机的真实 IP 地址。这使得外部攻击者难以直接访问内部网络中的设备,起到了一定的安全防护作用。例如,黑客想要攻击内部网络中的一台主机,如果没有 NAT,主机的私有 IP 地址在互联网上暴露,很容易成为攻击目标;而有了 NAT,黑客只能看到 NAT 设备的公有 IP 地址,增加了攻击的难度
5.IP协议
版本:目前主要使用的是 IPv4(版本号为 4)和 IPv6(版本号为 6)
首部长度:指示IP首部的长度,IP首部包含固定部分和可变部分,固定部分每行是4个字节,所以固定部分是20个字节,可变部分最大是40个字节;如果首部长度字段的值为 5,那么首部长度就是
5*4=20字节,正常情况下,没有可选字段时,IP 首部长度为 20 字节,此时该字段的值为 5
服务类型:不需要了解
总长度:它表示整个 IP 数据包(包括首部和数据部分)的长度,单位是字节。数据部分的长度=总长度-首部长度
标识符:用于标识从源主机发送的一个 IP 数据包所属的分组。当一个 IP 数据包过大需要分片传输时,所有属于同一个原始数据包的分片都具有相同的标识符。接收方可以通过这个标识符来判断哪些分片属于同一个原始数据包,以便进行重组
标志:标志有三个标志位,第一个标志位是保留位,不用管。第二个标志位是允不允许分片(0表示允许分片,1表示不允许分片),第三个标志位是是否是最后最后一个分片(0表示是最后一片,1表示不是最后一片)
片偏移:用于指示每个分片在原始数据包中的相对位置。它是以 8 字节为单位计数的。接收方可以根据片偏移量来确定各个分片在原始数据包中的位置,从而正确地重组分片。例如,一个原始数据包被分成 3 个分片,第一个分片的片偏移量为 0,第二个分片的片偏移量可能为某个值(取决于第一个分片的长度),第三个分片的片偏移量根据前两个分片的长度来确定,接收端根据这些偏移量将分片按顺序组合。
生存时间:定义了 IP 数据包在网络中可以经过的最大路由器跳数。每经过一个路由器,TTL 的值就会减 1。当 TTL 的值减为 0 时,路由器会丢弃该数据包,并向源主机发送一个 ICMP 超时消息。这可以防止数据包在网络中无限循环,避免网络拥塞。例如,一个数据包的 TTL 初始值为 64,经过 64 个路由器后如果还没有到达目的主机,就会被丢弃。
协议:用于指示 IP 数据包中数据部分所使用的协议类型。值为 6 表示传输层协议是 TCP,值为 17 表示传输层协议是 UDP。通过这个字段,接收方的网络层可以将数据部分正确地交给相应的传输层协议进行处理。
首部校验和:用于检查 IP 首部在传输过程中是否出现错误。它是对 IP 首部进行计算得到的校验和。发送方在发送数据包时计算首部校验和,接收方在收到数据包后重新计算校验和,并与收到的校验和进行比较。如果两者不同,就表示首部在传输过程中出现了错误,接收方可以选择丢弃该数据包。
源IP地址和目的IP地址:源IP地址用于标识发送数据包的主机的 IP 地址;目的 IP 地址用于标识接收数据包的主机的 IP 地址。
可选字段和填充:如果拥有可选字段,可选字段的长度不是4字节的倍数,就需要使用填充来使整个IP协议的首部为4字节的倍数
6.如何解决IP地址不够用
1.动态分配IP地址:只给接入网络的设备分配IP地址。因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定相同
2.NAT技术:在公网和私网有介绍
3.IPV6:IPv6与IPv4彼此不兼容,IPv6用16个字节128位来表示一个IP地址,现阶段全世界的普及程度还是比较低
相关文章:

网络层协议-----IP协议
目录 1.认识IP地址 2.IP地址的分类 3.子网划分 4.公网IP和私网IP 5.IP协议 6.如何解决IP地址不够用 1.认识IP地址 IP 地址(Internet Protocol Address)是指互联网协议地址。 它是分配给连接到互联网的设备(如计算机、服务器、智能手机…...
计算机网络八股文学习笔记
总结来自于javaguide,本文章仅供个人学习复习 javaguide计算机网络八股 文章目录 计算机网络基础网络分层模型OSI七层模型TCP/IP四层模型 HTTP从输入URL到页面展示到底发生了什么?(非常重要)HTTP状态码HTTP Header中常见的字段有哪些?HTTP和HTTPS有什么区别?(重要)HTTP/1.0和…...

IntelliJ IDEA中Maven项目的配置、创建与导入全攻略
大家好,我是袁庭新。 IntelliJ IDEA是当前最流行的Java IDE(集成开发环境)之一,也是业界公认最好用的Java开发工具之一。IntelliJ IDEA支持Maven的全部功能,通过它我们可以很轻松地实现创建Maven项目、导入Maven项目、…...

如何在Jupyter中快速切换Anaconda里不同的虚拟环境
目录 介绍 操作步骤 1. 选择环境,安装内核 2. 注册内核 3. 完工。 视频教程 介绍 很多网友在使用Jupyter的时候会遇到各种各样的问题,其中一个比较麻烦的问题就是我在Anaconda有多个Python的环境里面,如何让jupyter快速切换不同的Pyt…...

stack和queue专题
文章目录 stack最小栈题目解析代码 栈的压入弹出序列题目解析代码 queue二叉树的层序遍历题目解析代码 stack stack和queue都是空间适配器 最小栈 最小栈的题目链接 题目解析 minst是空就进栈,或者是val < minst.top()就进栈 代码 class MinStack { public:M…...

【Vue】点击侧边导航栏,右侧main对应显示
需求:点击侧边导航栏,右侧main对应显示 通过v-if或v-show等指令来控制不同内容的显示隐藏来实现 注意: 使用v-if时候进行导航栏切换,右侧显示区域可能会出现样式错乱;使用v-show则不会出现此错误 <template>&…...
【Debug】django.db.utils.OperationalError: (1040, ‘Too many connections‘)
报错: django.db.utils.OperationalError: (1040, ‘Too many connections‘) 排查 可能是Mysql的连接数量超过了允许的最大连接数量; 查看Mysql允许最大连接数量: -- 查看允许连接的最大数量 SHOW VARIABLES LIKE %max_connections%;-- 查…...
如何开放2375和2376端口供Docker daemon监听
Linux (以 Ubuntu 为例) 1. 修改 Docker 配置文件 打开 Docker 的配置文件 /etc/docker/daemon.json。如果该文件不存在,则可以创建一个新的。 bash sudo nano /etc/docker/daemon.json在配置文件中添加以下内容: json {"hosts": ["un…...

RabbitMQ确保消息可靠性
消息丢失的可能性 支付服务先扣减余额和更新支付状态(这俩是同步调用),然后通过RabbitMq异步调用支付服务更新订单状态。但是有些情况下,可能订单已经支付 ,但是更新订单状态却失败了,这就出现了消息丢失。…...
前端常见的设计模式之【单例模式】
前端常见的设计模式: 单例模式观察者模式工厂模式适配器模式装饰器模式命令模式迭代器模式组合模式策略模式发布订阅模式 单例模式【创建型设计模式】: 单例模式是确保一个类只有一个实例,并提供一个全局访问点。这个模式非常适合那些需要…...

【React】脚手架进阶
目录 暴露webpack配置package.json的变化修改webpack.config.js配置less修改域名、端口号浏览器兼容处理处理跨域 暴露webpack配置 react-scripts对脚手架中的打包命令进行封装,如何暴露这些打包配置呢?上篇写到在package.json中的scripts配置项中有eje…...

win32汇编环境,窗口程序中单选框的一般操作示例
;运行效果 ;win32汇编环境,窗口程序中单选框的一般操作示例 ;比如在窗口程序中生成单选框,默认哪项选中,判断当前选中哪一项,让哪项选中,得到选中项的名称等 ;直接抄进RadAsm可编译运行。重点部分加备注。 ;以下是ASM文件 ;>&g…...
如何移除git中被跟踪的commit文件
忽略已被跟踪的文件 问题描述 如果某个文件已经被 Git 跟踪(即已被提交到仓库),即使后来将其添加到 .gitignore 文件中,Git 仍会继续跟踪它。 解决方案 更新 .gitignore 文件 将需要忽略的文件加入 .gitignore: .env…...

结合night compute分析 利用tensor core 优化K值较大的矩阵乘(超过cublas50%)
一 night compute分析 将cublas作为base line和现有的代码分析 图1.1 可以发现计算吞吐量明显偏低,能想到的就是计算单元处于空闲的概率较大,是访存密集型算子,因此可以增大数据的吞吐量,多给计算单元提供数据 二 代码 #include "common.h"//mma计算的基本尺…...

Docker 部署 Typecho
1. 官网 https://typecho.org/插件 & 主题 https://github.com/typecho-fans/plugins https://typechx.com/ https://typecho.work/2. 通过 compose 文件安装 github官网: https://github.com/typecho/Dockerfile 新建一个目录,存放 typecho 的相…...

【大数据】机器学习-----模型的评估方法
一、评估方法 留出法(Holdout Method): 将数据集划分为训练集和测试集两部分,通常按照一定比例(如 70% 训练集,30% 测试集)。训练集用于训练模型,测试集用于评估模型性能。优点&…...
【Excel笔记_3】execl的单元格是#DIV/0!,判断如果是这个,则该单元格等于空
在 Excel 中,可以使用 IF 函数来判断单元格是否是 #DIV/0! 错误,并将其替换为空值(即空字符串 "")。具体公式如下: IF(ISERROR(A1), "", A1)或者,如果只想判断 #DIV/0! 错误ÿ…...

FPGA EDA软件的位流验证
位流验证,对于芯片研发是一个非常重要的测试手段,对于纯软件开发人员,最难理解的就是位流验证。在FPGA芯片研发中,位流验证是在做什么,在哪些阶段需要做位流验证,如何做?都是问题。 我们先整体的…...

信号与系统初识---信号的分类
文章目录 0.引言1.介绍2.信号的分类3.关于周期大小的求解4.实信号和复信号5.奇信号和偶信号6.能量信号和功率信号 0.引言 学习这个自动控制原理一段时间了,但是只写了一篇博客,其实主要是因为最近在打这个华数杯,其次是因为在补这个数学知识…...
信号量机制之苹果-橘子问题
桌上有一空盘,允许存放一种水果。爸爸可向盘中放苹果,也可向盘中放橘子,儿子专等吃盘中的橘子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一个水果供吃者取用。 要求:请用信号量机制实现爸爸、儿子、女儿三个并发…...
ES海量数据更新及导入导出备份
一、根据查询条件更新字段 from elasticsearch import Elasticsearch import redis import json# 替换下面的用户名、密码和Elasticsearch服务器地址 username elastic password password es_host https://127.0.0.2:30674# 使用Elasticsearch实例化时传递用户名和密码 es…...
深入理解卷积神经网络:从原理到应用
在人工智能领域,卷积神经网络(Convolutional Neural Network, CNN)无疑是计算机视觉领域的璀璨明珠。从 1998 年 Yann LeCun 提出 LeNet-5 实现手写数字识别,到 2012 年 AlexNet 在 ImageNet 大赛上创造历史性突破,CNN…...

高性能MYSQL:复制同步的问题和解决方案
一、复制的问题和解决方案 中断MySQL的复制并不是件难事。因为实现简单,配置相当容易,但也意味着有很多方式会导致复制停止,陷入混乱并中断。 (一)数据损坏或丢失的错误 由于各种各样的原因,MySQL 的复制…...

27.【新型数据架构】-数据共享架构
27.【新型数据架构】-数据共享架构:降低数据获取成本,实时数据访问,保持数据新鲜度,促进数据经济发展,打破数据孤岛,标准化数据交换,增强数据安全性,完整审计追踪,合规性保障 一、数据共享架构的本质:打破壁垒的“数字立交桥” 传统企业或组织间的数据往往呈现“烟囱…...
数据源指的是哪里的数据,磁盘中还是内存中
在 MyDB 项目中,特别是这段缓存框架代码: T obj getForCache(key);以及它的上下文: AbstractCache 是一个抽象类,内部有两个抽象方法,留给实现类去实现具体的操作: protected abstract T getForCache(lon…...

C++定长内存块的实现
内存池 内存池是指程序预先从操作系统 申请一块足够大内存 ,此后,当程序中需要申请内存的时候,不是直接向操作系统申请,而是 直接从内存池中获取 ; 同理,当 **程序释放内存 **的时候,并不真正将…...

Hardware-Efficient Attention for Fast Decoding
TL;DR 2025 年普林斯顿大学提出的硬件友好 attention 设计,在 MQA/GQA 与 deepseek 提出的 MLA 基础之上继续优化,提出 Grouped-Tied Attention (GTA) 和 Grouped Latent Attention (GLA),实现更高推理效率的同时也能保持较好的模型效果。 …...
ArkUI-X与Android桥接通信之消息通信
平台桥接用于客户端(ArkUI)和平台(Android或iOS)之间传递消息,即用于ArkUI与平台双向数据传递、ArkUI侧调用平台的方法、平台调用ArkUI侧的方法。本文主要介绍Android平台与ArkUI交互,ArkUI侧具体用法请参考…...

CAD多面体密堆积3D插件
插件介绍 CAD多面体密堆积3D插件可在AutoCAD内建立三维随机多面体密堆积模型。 插件内置物理动力学模拟算法,通过模拟重力、碰撞等现象,使多面体在虚拟环境中发生自然堆积,进而实现真实的堆积效果。多面体堆积模拟中存在的局部穿模问题可通…...

软件更新机制的测试要点与稳定性提升
💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...