网络层协议-----IP协议

news2025/1/15 22:57:46

目录

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地址,现阶段全世界的普及程度还是比较低

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ 知识速览

文章目录 一、消息队列对比二、RocketMQ 基础1. 消息模型2. 技术架构3. 消息类型4. 消费者类型5. 消费者分组和生产者分组 三、RocketMQ 高级1. 如何解决顺序消费和重复消费2. 如何实现分布式事务3. 如何解决消息堆积问题4. 如何保证高性能读写5. 刷盘机制 (topic 模…

C++(类和对象)

C中的类 C中兼容对C语言中struct的所有用法.同时C对struct进行了语法的升级.将struct升级成了类. // c中对于struct的改进: struct Stack {int* a;int top;int capacity; } int main() { Stack s;// 这里可以直接使用Stack进行使用,而不再需要struct关键字了return 0; }注意:…

centos 8 中安装Docker

注:本次样式安装使用的是centos8 操作系统。 1、镜像下载 具体的镜像下载地址各位可以去官网下载,选择适合你们的下载即可! 1、CentOS官方下载地址:https://vault.centos.org/ 2、阿里云开源镜像站下载:centos安装包…

Sui Move:基本概览一

Module (模块) Move 代码被组织成模块, 可以把一个模块看成是区块链上的一个智能合约 可以通过调用这些模块中的函数来与模块进行交互,可以通过事务或其他 Move 代码来实现, 事务将被发送到并由Sui区块链进行处理,一旦执行完成,结果的更改将…

1/13+2

运算符重载 myString.h #ifndef MYSTRING_H #define MYSTRING_H #include <cstring> #include <iostream> using namespace std; class myString {private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度int capacity; …

GD32F470Z外部晶振不起振

亲测&#xff0c;主要的原因是因为系统配置里面选择的晶振&#xff0c;选择内部还是外部的无源晶振。 1.无源晶振 打开startup_gd32f450_470.s这个起始文件。 ​​​​​​​ ​​​​​​​ 找到SystemInit。 跳进去这个函数。 在这个函数里面最底下找到sys…

用css和html制作太极图

目录 css相关参数介绍 边距 边框 伪元素选择器 太极图案例实现、 代码 效果 css相关参数介绍 边距 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}div{width: …

【2025 Rust学习 --- 17 文本和格式化 】

字符串与文本 Rust 的主要文本类型 String、str 和 char 内容概括&#xff1a; Unicode 背景知识&#xff1f;单个 Unicode 码点的 char&#xff1f;String 类型和 str 类型都是表示拥有和借用的 Unicode 字符序列。Rust 的字符串格式化工具&#xff0c;比如 println! 宏和 …

C#中颜色的秘密

颜色的秘密: 颜色Color是一个调色板, 所有颜色都是由透明度Alpha,红Red,绿Green,蓝Blue按不同比例调色混合而成,如果不考虑透明度Alpha,颜色共有256*256*25616777216种 ColorARGB A,R,G,B都为byte型[8位],因此可以用整体的32个整数[Int32]来表示一种颜色 Color 所属命名空…

Pycharm 使用教程

一、基本配置 1. 切换Python解释器 pycharm切换解释器版本 2. pycharm虚拟环境配置 虚拟环境的目的&#xff1a;创建适用于该项目的环境&#xff0c;与系统环境隔离&#xff0c;防止污染系统环境&#xff08;包括需要的库&#xff09;虚拟环境配置存放在项目根目录下的 ven…

phpenc加密程序源码

免费扩展加密程序&#xff0c;类似于sg11加密&#xff0c;支持单个PHP&#xff08;免费&#xff09;文件以及批量PHP文件&#xff08;ZIP压缩包格式&#xff09;源码加密的保护平台&#xff0c;加密后的源码文件保持原有代码结构&#xff0c;可以跨平台运行&#xff0c;可以运行…

视频转码对画质有影响吗?视频融合平台EasyCVR支持哪些转码格式?

视频转码过程是将视频文件从一种编码格式转换为另一种格式的过程&#xff0c;这一过程在现代数字媒体中扮演着至关重要的角色。众所周知&#xff0c;视频转码不仅仅是简单的格式转换&#xff0c;它涉及多个关键参数的改变&#xff0c;例如视频编码格式、比特率、分辨率以及帧率…

LeetCode热题100(哈希篇)

题目出自Leetcode热题100&#xff1a;Leetcode热题100 文章目录 1. 两数之和思路代码CJavaPython 49. 字母异位词分组思路代码CJavaPython 128. 最长连续序列思路代码CJavaPython 总结 1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找…

python学opencv|读取图像(三十一)缩放图像的三种方法

【1】引言 前序学习进程中&#xff0c;我们至少掌握了两种方法&#xff0c;可以实现对图像实现缩放。 第一种方法是调用cv2.resize()函数实现&#xff0c;相关学习链接为&#xff1a; python学opencv|读取图像&#xff08;三&#xff09;放大和缩小图像_python opencv 读取图…

rk3568 , buildroot , qt ,使用sqlite, 动态库, 静态库

问题说明&#xff1a; 客户反馈 &#xff0c;buildroot 系统 &#xff0c;使用qt 使用sqlite &#xff0c;有报错&#xff0c;无法使用sqlite. 测试情况说明&#xff1a; 我自己测试&#xff0c;发现&#xff0c; buildroot 自己默认就是 使能了 sqlite 的。 是否解决说明&…

Windows图形界面(GUI)-QT-C/C++ - Qt图形绘制详解

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 Qt绘图基础 QPainter概述 基本工作流程 绘图事件系统 paintEvent事件 重绘机制 文字绘制技术 基本文字绘制 ​编辑 高级文字效果 基本图形绘制 线条绘制 ​编辑 形状绘制 …

OpenArk64:Windows 系统分析与逆向工程工具详解

引言 在 Windows 系统的底层操作和逆向工程领域&#xff0c;OpenArk 是一款备受推崇的开源工具集。而 OpenArk64.exe 是 OpenArk 工具的 64 位版本&#xff0c;专门用于 64 位 Windows 系统。它提供了强大的功能&#xff0c;帮助用户深入分析系统内核、进程、文件、注册表等&a…

浅谈计算机网络02 | SDN控制平面

计算机网络控制平面 一、现代计算机网络控制平面概述1.1 与数据平面、管理平面的关系1.2 控制平面的发展历程 二、控制平面的关键技术剖析2.1 网络层协议2.1.1 OSPF协议2.1.2 BGP协议 2.2 SDN控制平面技术2.2.1 SDN架构与原理2.2.2 OpenFlow协议2.2.3 SDN控制器 一、现代计算机…

【C++】PP5015 [NOIP2018 普及组] 标题统计

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示数据规模与约定 &#x1f4af;方法分析方法1&#xff1a;我的做法实…

从玩具到工业控制--51单片机的跨界传奇【2】

咱们在上一篇博客里面讲解了什么是单片机《单片机入门》&#xff0c;让大家对单片机有了初步的了解。我们今天继续讲解一些有关单片机的知识&#xff0c;顺便也讲解一下我们单片机用到的C语言知识。如果你对C语言还不太了解的话&#xff0c;可以看看博主的C语言专栏哟&#xff…