(学习笔记-IP)IP基础知识
基本认识
IP在TCP/IP参考模型中处于第三层,也就是网络层。
网络层的主要作用是:实现主机与主机之间的通信,也叫点对点的通信。
网络层与数据链路层的关系:
MAC的作用是实现直连的两个设备之间通信,而IP负责没有直连的两个网络之间进行通信传输
因此计算机网络中需要数据链路层和网络层这个分层才能实现向最终目标地址的通信
在TCP/IP网络通信时,为了保证能够正常通信,每个设备都需要配置IP地址,否则无法实现正常的通信。
IP地址(IPV4)有32位正整数表示,IP地址在计算机中是以二进制方式处理的。
为了方便记忆人们采用了点分十进制的标记方式,也就是将32位IP地址以每8位为一组,共分为4组,每组以 . 隔开,再将每组转换为十进制。
所以,IP地址的最大值也就是:
即最大允许约43亿台计算机连接到网络。
实际上,IP地址并不是根据主机台数来配置的,而是以网卡。像服务器、路由器等设备都是有2个以上的网卡,也就是它们会有2个以上的IP地址。
因此,让43亿台计算机全部连网其实是不可能的,更何况IP地址是由 [网络标识] 和 [主机标识] 这两个部分组成的,所以实际能够连接到网络的计算机个数更是少了很多。
但是现在不仅电脑配备了IP,手机等电子设备都配备了IP,早就超过了43亿,是如何支持这么多IP的呢?
根据一种可以更换IP地址的技术:NAT
IP地址的分类
IP地址分类主要有五种类型,分别是A类、B类、C类、D类、E类。
图中的黄色为分类号,用以区分IP地址类别。其中A,B,C类主要分为两个部分:网络号和主机号。
A、B、C分类对应的地址范围、最大主机个数如下表:
A、B、C分类地址最大主机个数是如何计算的?
最大主机个数。就是要看主机号的位数,如C类地址的主机号占8位,那么C类地址的最大主机个数:
为什么要减2呢?
因为在IP地址中,有两个IP是特殊的,分别是主机号为全1和全0的地址。
- 主机号全为1指定某个网络下的所有主机,用于广播
- 主机号全为0指定某个网络
广播地址用于什么?
广播地址用于在同一个链路中相互连接的主机之间发送数据包。
广播地址可以分为本地广播和直接广播两种:
- 在本网络内广播的叫做本地广播。例如网络地址为192.168.0.0/24的情况下,广播地址是192.168.0.255.因为这个广播地址的IP包会被路由器屏蔽,所以不会到达192.168.0.0/24以外的其他链路上。
- 在不同网络之间的广播叫做直接广播。例如网络地址为192.168.0.0/24的主机向192.168.1.255/24的目标地址发送IP包。收到这个包的路由器,将数据转发给192.168.1.0/24,从而使得所有的192.168.1.1-192.168.1.254的主机都能收到这个包(直接广播有一定的安全问题,多数情况下会在路由器上设置不转发)
什么是D、E类地址?
D类和E类地址是没有主机号的,所以不可用于主机IP,D类常被用于多播,E类是预留的分类,暂时未使用。
多播地址由于什么?
多播用于将包发送给特定组内的所有主机。
由于广播无法穿透路由,若想给其他网段发送同样的包,就可以使用穿透路由的多播。
多播使用的D类地址,前四位是1110表示多播地址,而剩下的28位是多播的组编号。
从 224.0.0.0 ~ 239.255.255.255 都是多播的可用范围,其划分为以下三类:
- 224.0.0.0 ~ 224.0.0.255 为预留的组播地址,只能在局域网中,路由器是不会进行转发的。
- 224.0.1.0 ~ 238.255.255.255 为用户可用的组播地址,可以用于 Internet 上。
- 239.0.0.0 ~ 239.255.255.255 为本地管理组播地址,可供内部网在内部使用,仅在特定的本地范围内有效。
IP地址分类的优点
不管是路由器还是主机解析到一个IP地址的时候,我们判断其IP地址的首位是否为0,为0则为A类地址,那么就能很快的找出网络地址和主机地址。
所以,这种分类地址的优点就是简单明了、选路(基于网络地址)简单。
IP地址分类的缺点
缺点一:
同一网络下没有地址层次,比如一个公司用了B类地址,但是可能需要根据生产环境、测试环境、开发环境来划分地址层次,而这种IP分类是没有地址层次划分的功能,所以缺少地址的灵活性。
缺点二:
A、B、C类地址不能很好的与现实网络匹配。
- C类地址能包含的主机数量实在是太少了,只有254个。
- 而B类地址包含的最大主机量又太多了,6万多台机器放在一个网络下面,一般的企业基本达不到这个规模。
这两个缺点,都可以在CIDR无分类地址解决。
无分类地址CIDR
正因为IP分类存在许多缺点,所以后面提出了无分类地址的方案:CIDR
这种方式不再有分类地址的概念。32比特的IP地址被划分为两部分,前面是网络号,后面是主机号。
怎么划分网络号和主机号
表示形式:a.b.c.d/x,其中/x表示前x位属于网络号,x的范围是0~32,这就使得IP地址更加具有灵活性。
比如 10.100.122.2/24,这种地址表示形式就是 CIDR,/24 表示前 24 位是网络号,剩余的 8 位是主机号。
还有另一种划分网络号与主机号形式,就是子网掩码,掩码的意思就是掩盖掉主机号,剩余的就是网络号。
将子网掩码与IP地址按位计算AND,就可得到网络号.
为什么要分离网络号与主机号?
因为两台计算机要通讯,首先要判断是否处于一个广播域内,即网络地址是否相同。如果网络地址相同,表明接收方在本网络上,那么可以吧数据包直接发送到目标主机。
路由器寻址工作中,也是通过这样的方式来找到对应的网络号的,进而把数据包转发给对应的网络内。
怎么进行子网划分
子网掩码不仅可以划分出网络号和主机号,实际上子网掩码还有一个作用,就是划分子网。
子网划分实际上是将主机地址分为两个部分:子网网络地址和子网主机地址。
- 未做子网划分的IP地址:网络地址+主机地址
- 做子网划分后的IP地址:网络地址+(子网网络地址+子网主机地址)
假设对C类地址进行子网划分,网络地址192.168.1.0,使用子网掩码255.255.255.192对其进行子网划分。
C类地址中前24位是网络号,最后8位是主机号,根据子网掩码可知从8位主机号中借用2位作为子网号。
由于子网网络地址被划分为2位,那么子网地址就有4个,分别是00,01,10,11,具体划分如下:
划分后的4个子网如下表:
公有IP地址与私有IP地址
在A、B、C类地址中,实际上分公有IP地址和私有IP地址。
平时办公室、家里、学校的IP,一般都是私有IP地址。因为这些地址允许组织内部的IT人员自己管理、自己分配,而且可以重复。因此,多个学校的私有IP地址可以是一样的。
就像是每个小区都有自己的楼编号和门牌号,可以一样。但一但出了小区,就需要带上中山路666号(公网IP地址),是国家统一分配的,不能两个公网IP地址相同。
所以,公共IP地址是有一个组织统一分配的,假设你要开一个博客网站,那么就需要申请购买一个公有IP,这样全世界的人才能访问。并且公有IP地址基本上要在整个互联网范围内保持唯一。
公有IP地址由谁管理?
私有IP地址通常是内部的IT人员管理,公有IP地址是由ICANN组织管理,中文叫[互联网名称与数字地址分配机构]。
IANA 是 ICANN 的其中一个机构,它负责分配互联网 IP 地址,是按洲的方式层层分配。
- ARIN 北美地区
- LACNIC 拉丁美洲和一些加勒比群岛
- RIPE NCC 欧洲、中东和中亚
- AfriNIC 非洲地区
- APNIC 亚太地区
其中,在中国是由 CNNIC 的机构进行管理,它是中国国内唯一指定的全局 IP 地址管理的组织。
IP地址与路由控制
IP地址的网络地址这一部分是用于进行路由控制。
路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在主机和路由器上都会有各自的路由器控制表。
在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址,也就是最长匹配。
- 主机A要发送一个IP包,其源地址是10.1.1.30和目标地址是10.1.2.10,由于没有在主机A的路由表找到与目标地址10.1.2.10相同的网络地址,于是包被转发到默认路由(路由器1)
- 路由器1收到IP包后,也在路由器1的路由表匹配与目标地址相同的网络地址记录,发现匹配到了,于是就把IP数据包转发到了10.1.0.2这台路由器2
- 路由器2收到后,同样对比自身的路由表,发现匹配到了,于是把IP包从路由器2的10.1.2.1这个接口发出去,最终经过交换机把IP数据包转发到了目标主机。
环回地址是不是会流向网络
环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。
计算机在使用一个特殊的IP地址127.0.0.1作为环回地址。改地址具有相同意义的是一个叫做localhost的主机名。使用这个IP或主机名时,数据包不会流向网络。
IP分片与重组
每种数据链路的最大传输单元MTU都是不相同的,如FDDI数据链路 MTU 4352、以太网的MTU是1500字节等。
每种数据链路的MTU之所以不同,是因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的MTU也就不同。
其中,最常见的数据链路就是以太网,其MTU是1500字节。
当IP数据包大于MTU时,IP数据包就会被分片。
经过分片之后的IP数据包在被重组的时候,只能由目标主机进行,路由器是不会进行重组的。
在分片传输中,一旦某个分片丢失,则会造成整个IP数据包报废,所以TCP引入了MSS也就是在TCP层进行分片不由IP层分片(可参见),那么对于UDP尽量不要发送一个大于MTU的报文。
IPV6基本认识
IPV4的地址是32位的,大约可以提供42亿个地址,但是早在2011年IPV4地址就已经被分配完了。
但是IPv6的地址是128位的,这可分配的地址数量是巨大的,IPv6 可以保证地球上的每粒沙子都能被分配到一个 IP 地址。
但IPv6除了有更多的地址之外,还有更好的安全性和扩展性,简单点就是IPv6相比于IPv4能带来更好的网络体验。
但是因为IPv4和IPv6不能互相兼容,所以我们不但要我们电脑、手机之类的设别支持,还需要网络运营商对现有的设备进行升级,这也是IPv6普及较慢的一个原因。
IPv6的亮点
IPv6不仅仅只是可分配地址变多了,它还有非常多的亮点:
- IPv6可自动配置,即使没有DHCP服务器也可以实现自动分配IP地址,即插即用
- IPv6包头包首部长度采用固定的值40字节,去掉了包头校验和,简化了首部结构,减轻了路由器负荷,大大提高了传输的性能
- IPv6有应对伪造IP地址的网络安全功能以及防止线路窃听的功能,大大提升了安全性。
IPv6地址的标识方法
IPv4地址长度共32位,是以每8位作为一组,并用点分十进制的表示方式。
IPv6地址长度是128位,是以每16位作为一组,每组用[ : ]隔开
如果出现连续的0时还可以将这些0省略,并用两个冒号[ :: ]隔开。但是,一个IP地址中只允许出现一次两个连续的冒号。
IPv6地址结构
IPv6类似IPv4,也是通过IP地址的前几位标识IP地址的种类。
IPv6地址主要有以下类型的地址:
- 单播地址,用于一对一的通信
- 组播地址,用于一对多的通信
- 任播地址,用于通信最近的节点,最近的节点是由路由协议决定的
- 没有广播地址。
IPv6单播地址类型
对于一对一通信的IPv6地址,主要划分了三类单播地址,每类地址的有效范围都不同。
- 在同一链路单播通信,不经过路由器,可以使用链路本地单播地址,IPv4无此类型
- 在内网里单播通信,可以使用唯一本地地址,相当于IPv4的私有IP
- 在互联网通信,可以使用全局单播地址,相当于IPv4的公有IP
IPv4首部与IPv6首部
IPv4 首部与 IPv6 首部的差异如下图:
IPv6相比IPv4的改进:
- 取消了首部校验和字段。因为在数据链路层和传输层都会校验,因此IPv6直接取消了IP的校验
- 取消了分片/重新组装相关字段。分片和重组是耗时的过程,IPv6不允许在中间路由器进行分片和重组,这种操作只能在源与目标主机,大大提高了路由器的转发速度。
- 取消选项字段。选项字段不再是标准IP首部的一部分了,但它并没有消失,而是可能出现在IPv6首部中的[下一个首部]指出的位置上。删除该字段IPv6的首部成为固定的40字节。
相关文章:

(学习笔记-IP)IP基础知识
基本认识 IP在TCP/IP参考模型中处于第三层,也就是网络层。 网络层的主要作用是:实现主机与主机之间的通信,也叫点对点的通信。 网络层与数据链路层的关系: MAC的作用是实现直连的两个设备之间通信,而IP负责没有直连的…...

神经数据库:用于使用 ChatGPT 构建专用 AI 代理的下一代上下文检索系统 — (第 2/3 部分)
书接上回理解构建LLM驱动的聊天机器人时的向量数据库检索的局限性 - (第1/3部分)_阿尔法旺旺的博客-CSDN博客 其中我们强调了(1)嵌入生成,然后(2)使用近似近邻(ANN)搜索…...

一文6个概念从0到1带你成功入门自动化测试【0基础也能看懂系列】
自动化测试有以下几个概念: 单元测试集成测试E2E 测试快照测试测试覆盖率TDD 以及 BDD 等 简述 项目开发过程中会有几个经历。 版本发布上线之前,会有好几个小时甚至是更长时间对应用进行测试,这个过程非常枯燥而痛苦代码的复杂度达到了一…...

C++OpenCV(5):图像模糊操作(四种滤波方法)
🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 🔆 OpenCV项目地址及源代码:点击这里 文章目录 图像模糊操作均值滤波高斯滤波中值滤波双边滤波 图像模糊操作 关于图片的噪声:指的是图片中存在的不必要或者多余的干扰数…...

关于质数筛——数论
埃式筛法 #include <bits/stdc.h> using namespace std; bool vis[100000010]; //标记数组 int n; int main(){scanf("%d",&n);vis[0]vis[1]1;for(int i2;i*i<n;i){ //优化1 if(vis[i]!1){for(int ji*i;j<n;ji){ //优化2 vis[j]1; //0是质数&#…...

Spring Boot 应用程序生命周期扩展点妙用
文章目录 前言1. 应用程序生命周期扩展点2. 使用场景示例2.1 SpringApplicationRunListener2.2 ApplicationEnvironmentPreparedEvent2.3 ApplicationPreparedEvent2.4 ApplicationStartedEvent2.5 ApplicationReadyEvent2.6 ApplicationFailedEvent2.7 ApplicationRunner 3. 参…...

【Nodejs】操作mongodb数据库
1.简介 Mongoose是一个让我们可以通过Node来操作MongoDB的模块。Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。在大多数情况下,它被用来把结构化的模式应用到一个MongoDB集合,并…...

SQL-每日一题【619.只出现一次的最大数字】
题目 MyNumbers 表: 单一数字 是在 MyNumbers 表中只出现一次的数字。 请你编写一个 SQL 查询来报告最大的 单一数字 。如果不存在 单一数字 ,查询需报告 null 。 查询结果如下例所示。 示例 1: 示例 2: 解题思路 1.题目要求我…...

紫光FPGA试用--软件篇
目录 一 软件安装启动 二 如何打开IP核?查看/修改现有IP核参数? 三 如何定义引脚? 四 如何下载code进入FPGA? 1. 下载到FPGA芯片内: 2.下载到外部FLASH中 五 如何进入在线调试模式,调试步骤 操作步骤ÿ…...

PDF添加水印以及防止被删除、防止编辑与打印
方法记录如下: 1、添加水印; 2、打印输出成一个新的pdf; 3、将pdf页面输出成一张张的图片:(福昕pdf操作步骤如下) 4、将图片组装成一个新的pdf:(福昕pdf操作步骤如下)…...

el-tree转换为表格样式的记录2
上一篇文章记录的是自己将树状数据转换为表格形式。但是出现了一个小bug,点击子节点时候会选中父节点,这个是正常需求没问题。但是我点击父节点时候取消所有子节点,父节点 选择也会失去,这是我不想要执行的。例如一个页面里面有主…...

MS1826B HDMI 1进4出 视频拼接芯片
MS1826B 是一款多功能视频处理器,包含 4 路独立 HDMI 音视频输出通道、1 路 HDMI 音视 频输入通道以及 1 路独立可配置为输入或者输出的 SPDIF、I2S 音频信号。支持 4 个独立的字库定 制型 OSD;可处理隔行和逐行视频或者图形输入信号;有四路独…...

Spring之注解
SpringIOC注解 组件添加标记注解: Component:该注解标记类表示该类为一个普通类,表示为IOC中的一个组件bean Repository:该注解用于将数据访问层(Dao层)的类标识为Spring中的Bean Service&…...

【UniApp开发小程序】悬浮按钮+出售闲置商品+商品分类选择【基于若依管理系统开发】
文章目录 界面效果界面实现悬浮按钮实现商品分类选择界面使元素均匀分布 闲置商品描述信息填写界面价格校验 界面效果 【悬浮按钮】 【闲置商品描述信息填写界面】 【商品分类选择界面】 【分类选择完成】 界面实现 悬浮按钮实现 悬浮按钮漂浮于页面之上,等页面…...

一百三十三、Hive——Hive外部表加载含有JSON格式字段的CSV文件数据
一、目标 在Hive的ODS层建外部表,然后加载HDFS中的CSV文件数据 注意:CSV文件中含有未解析的JSON格式的字段数据,并且JSON字段中还有逗号 二、第一次建外部表,直接以,分隔行字段,结果JSON数据只显示一部分…...

rust gtk 桌面应用 demo
《精通Rust》里介绍了 GTK框架的开发,这篇博客记录并扩展一下。rust 可以用于桌面应用开发,我还挺惊讶的,大学的时候也有学习过 VC,对桌面编程一直都很感兴趣,而且一直有一种妄念,总觉得自己能开发一款很好…...

《嵌入式 - 工具》J-link读写MCU内部Flash
1 J-Link简介 J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9/ARM11,Cortex M0/M1/M3/M4, Cortex A5/A8/A9等内核芯片的仿真,是学…...

算法练习-LeetCode1071. Greatest Common Divisor of Strings
题目地址:LeetCode - The Worlds Leading Online Programming Learning Platform Description: For two strings s and t, we say "t divides s" if and only if s t ... t (i.e., t is concatenated with itself one or more times). Given two strin…...

Nuget不小心用sudo下载后怎么在user里使用
问题发生 协同开发的过程中,同时在dotnet里面添加了nuget的grpc包,在不清楚的情况下执行自动生成脚本,下载nuget包失败,说是权限不足,于是就使用了sudo进行自动生成,结果在下一次重新打包的过程中ÿ…...

软件测试技能大赛环境搭建及系统部署报告
环境搭建及系统部署报告 环境搭建与配置过程(附图) JDK环境变量配置截图 【截取JDK环境变量配置截图】 查看JDK版本信息截图 【截取使用命令查看JDK版本信息截图,必须截取查看信息成功截图】 root账号成功登录MySQL截图 【截取使用root账…...

浅谈现代通信技术
目录 1.传统通信方法 2.传统通信方式的缺点 3.现代通信技术 4.现代通信技术给人类带来的福利 1.传统通信方法 传统通信方法指的是在数字化通信之前使用的传统的通信方式。以下是一些常见的传统通信方法: 1. 书信:通过邮件或快递等方式发送纸质信件。这…...

windows环境下adb 下载和配置,连接手机。
ADB下载地址: https://adbdownload.com/ 选择下载windows系统的。 下载后解压,查看adb.exe所在的目录,如下 这里将路径复制下来:D:\ADB 配置到系统环境变量中。 然后再打开cmd,输入adb version查看版本。 出现…...

[STL]list使用介绍
[STL]list使用 注:本文测试环境是visual studio2019。 文章目录 [STL]list使用1. list介绍2. 构造函数3. 迭代器相关函数begin函数和end函数rbegin函数和rend函数 4. 容量相关函数empty函数size函数 5. 数据修改函数push_back函数和pop_back函数push_front函数和pop…...

k8s服务发现之第五弹--使用 Service 连接到应用
Kubernetes 的网络模型 通过前面教程的学习,我们已经可以将容器化的应用程序在 Kubernetes 中运行起来,并且发布到 Kubernetes 内/外的网络上。 通常,Docker 使用一种 host-private 的联网方式,在此情况下,只有两个容…...

SAP ABAP 自定义表数据导入
一:效果展示: 读取 Excel 数据到 SAP 数据库表。 二:源码: *&---------------------------------------------------------------------* *& Report ZTEST_DRW02 *&----------------------------------------------------------…...

目标检测识别——大恒(DaHeng)相机操作与控制编程
文章目录 引言正文相关开发库的介绍编程准备配置引用头文件GalaxyIncludes.h配置lib文件 具体编程过程初始化和反初始化枚举设备开关设备 属性控制属性控制器种类 图像采集控制和图像处理采单帧回调采集 总结 引言 在做老师的横向项目时,需要用大恒相机,…...

国标GB28181视频监控平台EasyGBS视频无法播放,抓包返回ICMP是什么原因?
国标GB28181视频平台EasyGBS是基于国标GB/T28181协议的行业内安防视频流媒体能力平台,可实现的视频功能包括:实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。国标GB28181视频监控平台部署简单、可拓展性强,支持将…...

如何正确使用npm常用命令
npm常用命令: 官方文档:CLI Commands | npm Docs 1. npm -v:查看 npm 版本 2. npm init:初始化后会出现一个 Package.json 配置文件,可以在后面加上 -y,快速跳到问答界面 3. npm install:会…...

无人机影像配准并发布(共线方程)
无人机影像 DEM 计算四个角点坐标(刚性变换) 像空间坐标(x,y,-f) 像空间坐标畸变纠正 deltax,deltay 已知(x,y),求解(X,Y, Z)或者(Lat,Lon) 这里的Z是DEM上获取的坐标和Zs为相机坐标的高程,如果均为已…...

openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符
文章目录 openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符23.1 时间日期操作符23.2 时间/日期函数23.3 TIMESTAMPDIFF23.4 EXTRACT23.5 date_part openGauss学习笔记-23 openGauss 简单数据管理-时间/日期函数和操作符 23.1 时间日期操作符 用户在使用时…...