网络原理之IP协议

news2024/11/28 20:42:50

在这里插入图片描述

文章目录

  • 前言
  • IP 协议的协议头格式
  • 地址管理
    • 1. 动态分配 IP
    • 2. NAT机制(网络地址转换)
      • NAT 机制是如何工作的
    • 3. IPv6
  • 网段划分
  • 子网掩码
  • 路由选择

前言

前面我们学习了关于 UDP 协议和 TCP 协议方面的内容,这些都是网络传输中传输层方面的协议,今天我将为大家分享网络传输层中网络层中主要的协议——IP协议。

IP 协议的协议头格式

在这里插入图片描述

  • 4位版本:表示该 IP 协议是哪个版本的,4表示是 IPV4 ,6 表示是 IPV6
  • 4位首部长度:跟TCP中的4位首部长度是一样的,这里表示IP头部的长度最长为15*4=60字节
  • 8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要
  • 16位总长度(total length):IP数据报整体占多少个字节
  • 16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的
  • 3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记
  • 13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)
  • 8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数。一般是64。每次经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环
  • 8位协议:表示上层协议的类型,也就是传输层用的是 UDP 协议还是 TCP 协议
  • 16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏(IP报头中的校验和检验的是IP报头是否损坏,而不需要判断 IP 载荷中的数据,因为 IP 载荷中的数据是从传输层传来的数据包,其中的校验在传输层就已经实现了)
  • 32位源地址和32位目标地址:表示发送端和接收端
  • 选项字段(不定长,最多40字节)

16位总长度

IP 协议协议头中的16位总长度就说明了 IP 数据包的最大长度为 64 kb,这不就跟 UDP 一样出现问题呢吗?虽然 IP 能传输的数据最大为 64 kb,但是 IP 数据包支持拆包和组包的操作,也就是说可以将一个很大的数据拆分成一个个较小的小于 64 kb的数据包。

16位标识、3位标志、13位片偏移

而这些被拆分的数据包是通过 IP 协议头中的 16 位标识来辨别哪些数据包是由一个数据包拆分的,由同一个数据包拆分的 IP 数据包的 16 位标识是相同的。这个 IP 协议头中的 3 位标志中的第一位保留,现在还没用,第二位标识当前数据包是否可以拆分,1表示该数据包不可以被拆分,0表示可以被拆包。第三位是用来判断该数据包是否是拆分的数据包中的最后一个数据包,类似一个结束标志。13 位片偏移就是用来判断将一个数据包拆分成许多数据包之后每个数据包的相对位置。

8位生存时间

8位生存时间(TTL)表示该数据包可以在网络上的生存时间,单位是次,就是这个数据包每经过一个路由器,TTL 就会 -1 ,当 TTL 等于 0 的时候,这个数据包就 会在网络中消失。通过这个机制可以防止某个数据包的目的 IP 不存在而一直存在于网络上。那么有人就会问了,如果在我这个数据包到达目的 IP 之前,这个 TTL 变为 0 了该怎么办呢?其实不会的,只要这个目的 IP 是正确的,他经过最多 255 次的传输之后是一定能到达目的 IP 的,因为不知道大家有没有听过“6度空间”这个理论,就是世界上的任何一个人通过 6 层关系是能接触到任何一个人的,因为一个人的关系网复杂的,那么这个人的其他朋友关系网也是很复杂的,那么通过 6 个人就可以知道世界上的任何一个人。所以在网络中 255 次传输也是一定能到达正确的目的 IP 的。

IP 协议头中的源 IP 和目的 IP 是 IP 协议头中最关键的内容。而这个32位的源 IP 和目的 IP 通常是 8 位为一个部分,中间用 . 来分割开,比如1.2.3.4

地址管理

IP 协议头中 IP 地址是 32 位,能表示的最大值大约是 40 多亿,这个数据虽然看起来很大,但是它现在已经不能满足现在世界上人口的需要了,如今世界上人口数已经超过 40 亿了,而且一个人还不止一个网络设备,像什么电脑、手机和其他的联网设备,都需要使用到 IP 地址。那么该如何解决这个 IP 地址不够分配的问题呢?

1. 动态分配 IP

在这种方式中,每当一个设备连接到网络时,它会被分配一个临时的IP地址。这个IP地址是与设备在网上的会话相对应的,当设备断开连接时,该IP地址会被释放回IP地址池,以便其他人可以使用。

动态分配IP地址的好处包括能够更有效地利用IP地址资源,因为即使设备不经常连接到网络,也可以避免为每个设备分配一个永久的IP地址。此外,动态分配IP地址还可以提供更好的安全性,因为每次分配的IP地址可能都不同,这使得追踪设备在网上的活动更加困难。

动态分配IP地址的过程通常由网络中的DHCP(动态主机配置协议)服务器完成。DHCP服务器维护一个IP地址池,当设备连接到网络并请求IP地址时,DHCP服务器会从池中分配一个可用的IP地址,并将其配置到设备的网络接口上。

但是这个方案,治标不治本,并不能从根本上解决 IP 地址不够的问题,它只是一个过度的方案,但是这个方案在目前仍然是广泛使用的。

2. NAT机制(网络地址转换)

NAT(Network Address Translation,网络地址转换)是一种在传输层面上实现IP地址转换的技术。在NAT中,路由器通过修改传输数据包中的源IP地址和目的IP地址来实现地址转换。这种转换在不同的网络中常用于解决IP地址冲突、扩大私有网络数量并增强安全性等问题。简而言之,NAT的工作原理是类似于将一个私人地址转换为公共地址,通过这种方式来实现内部网络与外部公共网络的通信。

NAT 机制将 IP 地址分为两类:内网和外网。如果一个 IP 地址是以10.* 或者172.16.* - 172.31.* 或者 192.168.*,符合上面一个条件的都是内网 IP ,其他的 IP 就是公网 IP。

在同一个局域网内部 IP 地址不可以重复,但是不在同一个局域网内部的主机 IP 地址可以相同,但是外网 IP 无论什么时候都不可以相同。大家可以在自己电脑的命令行中敲入 ipconfig 来查看自己电脑的 IP 地址。

在这里插入图片描述
通过 NAT 这个机制因为只有外网以及同一个局域网中的主机 IP 地址不能重复,所以就类似于在大学中购物的时候,地址就填的是这个学校的地址,然后这个学校的所有学生在填写地址的时候填写的都是该学校的地址,再然后每个人凭电话号来取得自己的快递,这样就没必要每个学生都填一个属于自己的专属地址了,大大节省了地址的数量。

NAT 机制是如何工作的

在这里插入图片描述
假设我的电脑要向 IP 为 1.2.3.4 (经过路由器的映射)发送一个数据,那么机会形成以下的数据包。

在这里插入图片描述
当内网主机生成的这个数据包传输到该局域网中的路由器当中时,路由器首先会通过映射关系将源 IP 映射为自己路由器的 IP 并且记住这个映射关系。

在这里插入图片描述

当这个经过路由器的数据包经过广域网传输到达目的 IP 之后该怎么办呢?这个目的 IP 也是一个外网 IP ,那么这个路由器该如何知道传给哪个主机呢?其实这里就用到了前面路由器记住的映射关系,根据这个映射关系知道这个目的公网 IP 和端口号对应内网中的哪一个主机。其实主要区分的是端口号,因为从另一个局域网发送来的数据包的目的 IP 都是相等的,所以主要就是根据不同主机的不同端口号来区分数据包发送给哪个主机。

那么这里就会有人问了,如果就是同一个局域网当中的不同主机的同一个进程向另一个相同的局域网当中的同一个主机的同一个进程发送消息的时候,路由器该如何判断接收到的数据包发送给哪个主机呢?

在这里插入图片描述
当同一个局域网中的不同主机的同一个进程向另一个局域网当中的同一个主机的同一个进程发送消息的时候,当两个主机生成的数据包经过路由器之后,路由器会判断出这两个数据包的源端口号相同,所以就会通过映射关系在更换源 IP 的时候,将两个相同的端口号映射为不同的端口号,这样相同的接收数据的路由器也就知道了将这个数据包发送给哪个主机了。

NAT机制的优势包括:

  1. 安全性:通过将内部网络的IP地址隐藏,NAT机制可以增强网络的安全性,防止来自外部网络的攻击。也
  2. 节省IP地址:NAT机制允许一个公网IP地址对应多个私有IP地址,可以节省IP地址的使用。
  3. 简化网络管理:通过NAT机制,可以将多个私有网络通过一个公网IP地址进行连接,简化了网络管理。
  4. 提高网络性能:NAT机制可以减少IP地址冲突,从而提高网络性能。
  5. 纯软件操作:无需更换硬件设备,只需要安装了 NAT 就可以使用。

NAT 机制能承载的访问数量非常大,除非是局域网内部的超过 65535 个设备同时访问提供一个服务器,从而导致出现端口号出现重复的时候才会引发问题。

虽然 NAT 机制可以很好的解决 IP 地址不够的的情况,但终究是治标不治本,IPv6 才是解决 IP 地址不够用的最终解。

3. IPv6

IPv6 是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议。IPv6的使用不仅能解决网络地址资源数量的问题,也解决了多种接入设备连入互联网的障碍。IPv6的地址空间是IPv4的约8×10^28倍,其号称可以为全世界的每一粒沙子编上一个地址。

IPv6所能表示的字节是 16 个字节,可以表示 2^128 个 IP 地址,这个数 4 个字节所能表示的范围大了很多很多,不夸长的讲,16个字节所能表示的 IP 地址可以给世界上的每一粒沙子都给编上号,也就是说:在人类开始星际殖民之前,IPv6 所能分配的地址是不可能用完的。

但是由于 IPv4 与 IPv6 是两种不同的协议,两个协议之间不能进行直接的通信,所以要想使用 IPv6 就需要重新更换设备,但是更换设备不仅需要花费额外的价钱,网速也没有提升多少,对于用户来说:使用 IPv4 和 IPv6 效果是一样的,并且当时与 IPv6 一起出现的还有 NAT 机制,NAT 机制就是纯软件设施,也解决的 IP 分配不足的麻烦,所以 IPv6 在全世界的普及率还是比较低的。但是 IPv6 在中国的普及率是全世界最高的,那么为什么中国如此重视 IPv6 的使用呢?

其实之前的 IPv4 和 NAT 都是由美国的一个民间组织掌管的,也就是说 IP 的分配都是美国说了算的,美国要想让你这个国家的互联网消失只是一句话的事,虽然很多国家反映了害怕美国将这件事兵器化的事情,美国将对 IPv4 和 NAT 大部分职责都交给了 IANA 这个组织,这个组织也不是完全听由美国的命令,但是美国保留了 IPv4 的最终解释权,也就是说美国还是掐着我们中国人的脖子。后来美国就通过这个职权做出了一系列的违反国际法的事情,例如前几年影响很大的美国棱镜门事件

发生这件事之后,中国就意识到了不能让美国独自掌握 IP 地址的分配,于是当 IPv4 问世的时候,中国就积极投入到 IPv6 的研发与测试当中,并且逐渐开始在中国普及开来。

网段划分

网段划分也是 IP 协议中比较重要的一部分。一个 IP 地址通常会被分为两部分:网络号和主机号。网络号表示该局域网在网络中的部分,而主机号则表示该主机在局域网中的位置。

在这里插入图片描述

这里的 192.168.1 就表示的是网络号,而10、11、12则表示的是主机号。两个相邻的局域网的网络号不能相同,同一个局域网中的设备的网络号必须相同,主机号必须不同

而我们如何区分一个 IP 地址中哪些部分是网络号,哪些部分是主机号呢?这就需要用到我们的子网掩码了。

子网掩码

子网掩码又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

子网掩码也是用 4 个字节来表示的,同样也是跟 IP 一样,1 个字节分为一个部分。子网掩码有一个要求就是:子网掩码的前部分的数字必须全是 1 ,后边部分必须全都是 0,不允许出现 0 和 1 交替出现的情况。

假如一个主机的 IP 是192.168.1.10,子网掩码是 255.255.255.0,那么 192.168.0 就代表的是网络号,10就表示的是主机号。

下面是一个“上古时期”的网段划分方式,现在很少使用这种划分方式了。
在这里插入图片描述
当然也有一些特殊的网段划分。如果主机号全是 0 的话,表示这个 IP 是一个网络号,这个 IP 是不能分配给一个具体的主机的;如果一个 IP 地址的主机号全是 1,则表示这个 IP 是一个广播地址,通过这个 IP 发送的数据,该局域网中的所有主机都能接收到这个数据,同样的,这个 IP 地址也是不能分配给一个具体的主机的,我们前面说的 UDP 能天然的支持广播,就是和这个 IP 地址是有关系的。如果一个 IP 是以 127 开头的话,表示这个 IP 是一个环回 IP,操作系统提供了一个虚拟的“网卡”关联到这个 IP 上,使用环回 IP 发送的数据,最终还会回到当前主机,这个 IP 的主要用途就是做一些测试工作,通过这个环回 IP 可以避免网络不通等干扰因素。

路由选择

IP路由选择是指互联网协议(IP)在确定数据包在网络中传输的最佳路径的过程。在IP网络中,每个数据包包含源IP地址和目标IP地址。当一个设备接收到一个数据包时,它需要决定将数据包发送到哪个网络接口,以便将数据包路由到目标地址。但是由于网络中的每个路由并不能知道网络中的所有路线的全貌,而是只知道与自己相连的路由器,所以传输的路线只是尽可能的最优。

IP路由选择主要基于目标IP地址和路由表进行。路由表是存储在每个路由器中的表,它记录了目标网络与下一个路由器之间的映射关系。当路由器接收到一个数据包时,它会查看目标IP地址,然后在路由表中进行查找,以确定最佳的路径将数据包转发到目标地址。如果该路由表中没有存储与目的 IP 相关的路由位置,那么就会走向默认的路由位置。

在IP路由选择中,有多种算法可用,例如最短路径算法、最少跳数算法等。这些算法根据不同的因素,如路径长度、网络拥塞等,来确定最佳的路径。

此外,IP路由选择还支持多种路由协议,例如动态路由协议(如OSPF、BGP)和静态路由协议。动态路由协议根据网络拓扑的变化自动更新路由表,而静态路由协议需要手动配置路由表。

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

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

相关文章

WebGIS瓦片地图添加水印(矢量瓦片、栅格瓦片)

水印技术 水印能为收到版权信息产品归属提供有力的证据, 并能够监视被保护数据的传播, 真伪鉴别以及非法拷贝控制等.在现今流行的线上地图同样需要水印技术, 保护地图数据.本文将介绍如何实现瓦片地图水印添加, 包括栅格瓦片、矢量瓦片. 在探索过程中, 参考了《前端水印生成方案…

NTRU 加密方案

参考文献: [Rivest97] Rivest R L. All-or-nothing encryption and the package transform[C]//Fast Software Encryption: 4th International Workshop, FSE’97 Haifa, Israel, January 20–22 1997 Proceedings 4. Springer Berlin Heidelberg, 1997: 210-218.[…

云安全-云原生技术架构(Docker逃逸技术-特权与危险挂载)

0x00 云原生技术-docker docker容器和虚拟机的对比:前者是将运行环境打包,封装一个环境。后者是将整个系统打包,封装一个系统。在操作使用上来说各有利弊。 0x01 docker容器的三种逃逸类型 特权模式启动(不安全的启动方式&…

Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法

文章目录 0 代码仓库1 环境以及条件说明2 准备一:下载Oracle 19c驱动,需要下载两个包,注意分x86和x642.1 32位2.2 64位2.3 新建目录并解压缩2.4 记录路径2.4.1 x86需要的路径2.4.2 x64需要的路径 3 准备二:下载Sources源代码的两种…

毅速丨金属3D打印能替代传统制造吗?

金属3D打印技术已经逐渐被很多行业认可和应用,但是目前,金属3D打印多数被作为传统制造技术的一种补充,暂时还不能完全替代传统制造。 金属3D打印使用的是金属粉末进行选择性激光烧结,打印时在成型缸里铺上金属粉末,打印…

【刷题宝典NO.1】

Nim游戏 https://leetcode.cn/problems/nim-game/description/ 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合,轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人…

替换所有的问号

这篇也是凑数的 哈哈.... 稍后会整合到算法通关第三关白银挑战 . 描述 : 给你一个仅包含小写英文字母和 ? 字符的字符串 s,请你将所有的 ? 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。 注意 : 不能 修改非 ? 字符 . 题目 : …

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测

分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双…

【计算机视觉】3D视觉

文章目录 一、基本问题二、三个坐标系 X w \boldsymbol{X}_w Xw​到 X c \boldsymbol{X}_c Xc​的转换 X c \boldsymbol{X}_c Xc​到 x i \boldsymbol{x}_i xi​的转换投影矩阵尺度模糊问题 三、相机标定四、立体视觉 我的《计算机视觉》系列参考UC Berkeley的CS180课程&#x…

JDK21下载和安装

说明 本文介绍 JDK21(Oracle版)的下载和安装。 下载 Oracle官网JDK21下载页面 根据操作系统的类型,下载相应的版本。本文下载的是Windows64位的安装版。 下载页面示例 安装包示例 安装 双击安装包,开始安装。 把路径改为自定…

【数据结构】数组和字符串(八):稀疏矩阵的链接存储:十字链表的创建、插入元素、遍历打印(按行、按列、打印矩阵)、销毁

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表4.2.3三元组表的转置、加法、乘法、操作4.2.4十字链表0. 十字链表结构1. 创建2. 销毁3. 插入4. 打印矩阵形式5. 按行打印6.按列打…

京东平台数据分析(京东销量):2023年9月京东吸尘器行业品牌销售排行榜

鲸参谋监测的京东平台9月份吸尘器市场销售数据已出炉! 根据鲸参谋电商数据分析平台的相关数据显示,今年9月,京东吸尘器的销量为19万,环比下滑约12%,同比下滑约25%;销售额为1.2亿,环比下滑约11%&…

刀具磨损状态识别(Python代码,MSCNN_LSTM_Attention模型,初期磨损、正常磨损和急剧磨损分类,解压缩直接运行)

1.运行效果:刀具磨损状态识别(Python代码,MSCNN_LSTM_Attention模型,初期磨损、正常磨损和急剧磨损)_哔哩哔哩_bilibili 环境库: NumPy 版本: 1.19.4 Pandas 版本: 0.23.4 Matplotlib 版本: 2.2.3 Keras …

【Qt之控件QTreeView】设置单元格高度、设置图标尺寸

设置列宽 设置高度 自定义代理 继承QItemDelegate,实现sizeHint ()方法,设置自定义委托。 class itemDelegate : public QItemDelegate {Q_OBJECTpublic:explicit itemDelegate(QObject *parent 0) : QItemDelegate(parent){}~itemDelegate(){}virtua…

策略路由和路由策略

目录 策略路由 路由策略 策略路由和路由策略 策略路由 Step1:配置ACL,匹配流量 acl number 2010 rule 10 permit source 192.168.10.0 0.0.0.255 acl number 2020 rule 10 permit source 192.168.20.0 0.0.0.255 Step2:流分类traffic classifier jiaoxue //匹配…

Navicat for MySQL 视图创建使用方法

创建视图步骤: 点击新建;选择视图;点击视图创建工具;可以在左侧拖拽表到工作区;选择表字段进行连线

二维码智慧门牌管理系统升级,解决地址要素挂接难题!

文章目录 前言一、传统问题和新解决方案二、多样化应用三、实际案例 前言 随着科技的不断发展,智能化管理已经深入到各行各业。在地址要素采集过程中,如何实现要素之间的挂接关系,是智慧门牌管理系统面临的重要挑战。本文将为您揭秘一种升级…

【错误解决方案】ModuleNotFoundError: No module named ‘cPickle‘

1. 错误提示 在python程序中试图导入一个名为cPickle的模块,但Python提示找不到这个模块。 错误提示:ModuleNotFoundError: No module named cPickle 2. 解决方案 实际上,cPickle是Python的pickle模块的一个C语言实现,通常用于…

【ROS入门】机器人导航(仿真)——导航实现

文章结构 建图 SLAM编写gmapping节点相关launch文件执行 地图服务 map_server地图保存节点 map_server地图服务 map_server 定位 amcl编写amcl节点相关的launch文件编写测试launch文件执行 路径规划 move_basemove_base与代价地图碰撞算法 move_base使用launch文件配置文件laun…

Selenium自动测试框架

selenium3 selenium元素的定位css 选择器Xpath 操作测试对象 API添加等待浏览器的操作键盘操作鼠标操作定位一组元素下拉框弹窗上传文件 <dependencies><!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --><dependency><…