【JavaEE精炼宝库】网络原理基础——网络层 | IP协议

news2024/9/21 19:06:37

文章目录

  • 一、IP 协议的格式
  • 二、IP 地址的数量限制
  • 三、私有 IP 地址和公网 IP 地址
    • 3.1 私有 IP 地址和公网 IP 地址的基本知识:
    • 3.2 内网 IP 设备访问外网 IP 设备的过程(NAT 机制):
  • 四、地址管理
    • 4.1 网段划分:
      • 4.1.1 网段划分基本知识:
      • 4.1.2 CIDR | 子网掩码:
    • 4.2 特殊的 IP 地址:
  • 五、路由选择

网络层的作用主要有(1)路径规划(路由选择)。(2)地址管理。
在这里插入图片描述

在网络层中IP协议独自占了大壁江山。所以介绍网络层其实就是在介绍IP协议

基本概念:

  • 主机:配有 IP 地址,但是不进行路由控制的设备。

  • 路由器:即配有 IP 地址,又能进行路由控制。

  • 节点:主机和路由器的统称。

一、IP 协议的格式

下图为 IPv4 协议的格式。
在这里插入图片描述

  • 4 位版本号(version):指定 IP 协议的版本,对于 IPv4 来说,就是 4,对于 IPv6 来说,就是 6。

  • 4 位首部长度(header length):IP 头部的长度单位是 4 个字节,也就是length * 4 的字节数。4 bit 表示最大的数字是 15,因此 IP 头部最大长度是 60 字节,根据上图可知 IP 头部最短长度是 20 字节。

  • 8 位服务类型(Type Of Service):3 位优先权字段(已经弃用),4 位TOS字段,和 1 位保留字段(必须置为 0)。4 位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本这四者相互冲突,只能选择一个。 对于 ssh / telnet 这样的应用程序,最小延时比较重要,对于 ftp 这样的程序,最大吞吐量比较重要。

  • 16 位总长度(total length):IP 数据报整体占多少个字节。 总长度去掉 IP 首部长度,剩下的就是 TCP / UDP 数据包的总长度。如果是 TCP ,去掉 TCP 报头长度,剩下的就是载荷长度(TCP 报头中算不出载荷长度,所以要用这种方法)。

  • 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 位协议:表示上层协议的类型(载荷部分是 TCP 还是 UDP 还是其他的协议)。

  • 16 位首部校验和:使用 CRC 进行校验,来鉴别头部是否损坏。

  • 32 位源 IP 地址和 32 位目的 IP 地址:表示发送端和接收端。为了让我们方便观察,把 32 位的整数通常表示成 “点分十进制”的方式。例如 192.168.2.103。

  • 选项字段(不定长,最多 40 字节):略。

IP 协议数据包的总长度是 64 KB,如果载荷太长,会导致 IP 协议数据包的总长度超过 64 KB,这时 IP 协议数据包会进行拆包发送,在接收端进行组包。 通过 16 位表示 + 3 位标志 + 13 位片偏移这三个属性,实现 IP 协议的拆包组包。

二、IP 地址的数量限制

IP 地址(IPv4)是一个 4 字节 32 位的正整数。那么一共只有 2 的 32 次方个 IP 地址,大概是 43亿左右。而 TCP/IP 协议规定,每个主机都需要有一个 IP 地址。这意味着,一共只有 43 亿台主机能接入网络么?实际上,由于一些特殊的 IP 地址的存在,数量远不足 43 亿。另外 IP 地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个 IP 地址。

针对 IP 地址不够用,有三种方式来解决:

  1. 动态分配 IP 地址: 只给接入网络的设备分配 IP 地址。因此同一个 MAC 地址的设备,每次接入互联网中,得到的 IP 地址不一定是相同的。
  2. NAT 技术: 把 IP 地址,分成两个大类:(1)私网 IP(局域网内部使用)。(2)公网 IP (广域网使用)。此时约定公网 IP 唯一,私网 IP 允许在不同的局域网中重复。 虽然能上网的设备非常多,但是绝大部分都是在局域网中的。
  3. 采用 IPv6 协议: IPv6 并不是 IPv4 的简单升级版,这是互不相干的两个协议,彼此并不兼容。IPv6 用 16 字节 128 位来表示一个 IP 地址(数量非常大,足够给世界上每一粒沙子分配一个 IP 地址),但是目前 IPv6 还没有普及。

截至到 2023 年 8 月 28 日,我国 IPv6 活跃用户数达 7.67 亿(网民总数为 10.79 亿,占比 71%),世界领先。大力发展 IPv6 的原因,参考以下视频:电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅

三、私有 IP 地址和公网 IP 地址

3.1 私有 IP 地址和公网 IP 地址的基本知识:

注意:私有 IP 地址和私网 IP 地址是一个意思。

如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet 上,理论上使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址。

以下为私网 IP 的开头(*表示后续任意),这三个必须要记住。 除了这三个外,其他的基本都是公网 IP(特殊的后续有列出)

  • 10.*

  • 172.16 - 172.31.*

  • 192.168.*

在这里插入图片描述

一个路由器可以配置两个 IP 地址,一个是WAN IP,一个是LANIP(子网 IP)。路由器LAN连接的主机,都从属于当前这个路由器的子网中。不同的路由器,子网 IP 其实都是一样的(通常192.168.1.1)。子网内的主机 IP 地址不能重复,但是子网之间的 IP
地址就可以重复了。每一个家用路由器,其实又作为运营商路由器的子网中的一个节点,这样的运营商路由器可能会有很多级,最外层的运营商路由器,WAN IP 就是一个公网 IP 了。子网内的主机需要和外网进行通信时,路由器将 IP 首部中的 IP 地址进行替换(替换成WAN IP),这样逐级替换,最终数据包中的 IP 地址成为一个公网 IP。这种技术称为NAT(Network Address Translation,网络地址转换)。如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网 IP 的服务器上。这样的服务器可以在阿里云/腾讯云上进行购买。

这里涉及到一个核心问题:引入上述的公网私网 IP,如何进行通信呢?

大体分为 5 种情况:

  1. 同一个局域网内部,设备之间通信:可以通信。由于一个局域网内部的设备之间的 IP 是不能重复的,所以可以正常进行通信。
  2. 广域网设备和广域网设备之间的通信:可以通信。广域网中的设备 IP 本来就是唯一的,可以正常进行通信。
  3. 局域网 1 中的设备 A 尝试访问局域网 2 中的设备 B:这种情况不允许访问。
  4. 局域网中的设备主动访问广域网设备:可以通信。这个过程中,NAT 机制就开始发挥作用了。
  5. 广域网设备主动访问局域网设备:不允许访问。因为局域网设备 IP 地址不是唯一的。

总结:被动方的 IP 地址不是唯一的就不能进行通信。因此,如果需要进行上述的局域网设备和局域网设备之间的通信,需要搭配广域网中的服务器,进行数据转发。

3.2 内网 IP 设备访问外网 IP 设备的过程(NAT 机制):

下面利用简化版的过程来进行讲解。主机(内网)-> 路由器-> 百度(外网) 。

在这里插入图片描述
运营商路由器,可以把它当作一个 NAT 设备,它会对中间经过的数据包,进行网络地址的转化,当内网设备经过运营商路由器访问外网的时候,就会把 IP 数据包中的源 IP,替换成它自己的 IP,端口号也会变(图中没有变)。

在这里插入图片描述

到达百度服务器之后,百度就会看到有一个 IP 地址为 5.6.7.8,端口号为 1234 的设备给它发送了一个请求,百度服务器对于我的电脑真实的内网 IP 是一无所知的。

在这里插入图片描述
运营商路由器内部维护了一个“映射关系”,记录当前这个相应的请求是从哪个内网中的设备发送过来的。

以上就是内网 IP 设备访问外网 IP 设备的过程。如果有多个内网设备同时访问外网,这时运营商路由器给出的 IP 地址是相同的,端口号是不同的。可以利用端口号来进行区分。

四、地址管理

4.1 网段划分:

4.1.1 网段划分基本知识:

IP 地址分为两个部分,网络号和主机号。

  • 网络号:保证相互连接的两个网段具有不同的标识。

  • 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。

在这里插入图片描述

  • 子网其实就是把网络号相同的主机放到⼀起。

  • 如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复。

通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的 IP 地址都不相同。那么问题来了,手动管理子网内的 IP,是一个相当麻烦的事情,该如何解决呢?

答:有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配 IP 地址,避免了手动管理 IP 的不便。一般的路由器都带有DHCP功能。因此路由器也可以看做一个DHCP服务器。

过去曾经提出一种划分网络号和主机号的方案,把所有 IP 地址分为五类,如下图所示:

在这里插入图片描述

随着 Internet 的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请 B 类网络地址,导致 B 类地址很快就分配完了,而 A 类却浪费了大量地址。例如,申请了一个 B 类地址,理论上一个子网内能允许6万5千多个主机。A类地址的子网内的主机数更 多,然而实际网络架设中,不会存在一个子网内有这么多的情况。因此大量的 IP 地址都被浪费掉了。

4.1.2 CIDR | 子网掩码:

针对上面这种情况提出了新的划分方案,称为CIDR(Classless Interdomain Routing):引入一个额外的子网掩码(subnet mask)来区分网络号和主机号。子网掩码也是一个 32 位的正整数。通常用一串0来结尾。将 IP 地址和子网掩码进行按位与操作,得到的结果就是网络号。网络号和主机号的划分与这个 IP 地址是 A 类、B 类还是 C 类无关。

子网掩码:32 位整数。左半部分都是 1(网络号),右半部分都是 0(主机号),不会 01 交替出现。

在这里插入图片描述
将 IP 地址和子网掩码进行按位与操作,得到的结果就是网络号。255 说明 8 位都是 1,子网地址范围是网络号 +
主机号(最大和最小对应子网地址的范围)。

在这里插入图片描述
240 用 2 进制表示为 11110000,68 用 2 进制表示为 01000100。按位与就是 64,当 0100(网络号)0100(主机号),主机号最大和最小时就是子网地址范围。

可见,IP 地址与子网掩码做与运算可以得到网络号,主机号从全 0 到全 1 就是子网的地址范围。

IP 地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示 IP 地址为140.252.20.68,子网掩码的高 24 位是1,也就是255.255.255.0。

4.2 特殊的 IP 地址:

  • 将 IP 地址中的主机地址全部设为 0,就成为了网络号,代表这个局域网(这样的 IP 表示网段,不应该分配给具体的主机)。

  • 将 IP 地址中的主机地址全部设为 1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包(TCP 不支持广播,UDP 支持)。

  • 127.*的 IP 地址用于本机环回(loop back)测试,通常是127.0.0.1。

五、路由选择

在复杂的网络结构中,找出一条通往终点的路线。 路由的过程,是一跳一跳(Hop by Hop)"问路"的过程。所谓"一跳"就是数据链路层中的一个区间。具体在以太网中,指从源 MAC 地址到目的 MAC 地址之间的帧传输区间。
在这里插入图片描述

IP 数据包的传输过程也和问路一样:当 IP 数据包,到达路由器时,路由器会先查看目的 IP。路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器。依次反复,一直到达目标 IP 地址。

那么如何判定当前这个数据包该发送到哪里呢?

答:这个就依靠每个节点内部维护一个路由表

在这里插入图片描述
路由表可以使用 route 命令查看。如果目的 IP 命中了路由表,就直接转发即可。路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

假设某主机上的网络接口配置和路由表如下:

在这里插入图片描述
这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口,连到 192.168.56.0/24网络。路由表的 Destination 是目的网络地址,Genmask 是子网掩码,Gateway 是下一跳地址,Iface 是发送接口,Flags 中的 U 标志表示此条目有效(可以禁用某些条目),G 标志表示此条目的下一跳地址是某个路由器的地址,没有 G 标志的条目表,表示的网络地址是与本机接口直接相连的网络,不必经路由器转。

  • 转发过程例1:如果要发送的数据包的目的地址是192.168.56.3。跟第一行的子网掩码做按位与运算得到192.168.56.0,与第一行的目的网络地址不符,再跟第二行的子网掩码做按位与运算得到192.168.56.0,正是第二行的目的网络地址,因此从 eth1 接口发送出去。由于192.168.56.0/24 正是与 eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发。
  • 转发过程例2:如果要发送的数据包的目的地址是202.10.1.2。依次和路由表前几项进行对比,发现都不匹配,按缺省路由条目,从 eth0 接口发出去,发往192.168.10.1路由器,由192.168.10.1路由器根据它的路由表决定下一跳地址。

路由表可以由网络管理员手动维护(静态路由),也可以通过一些算法自动生成(动态路由)。

结语:
其实写博客不仅仅是为了教大家,同时这也有利于我巩固知识点,和做一个学习的总结,由于作者水平有限,对文章有任何问题还请指出,非常感谢。如果大家有所收获的话还请不要吝啬你们的点赞收藏和关注,这可以激励我写出更加优秀的文章。

在这里插入图片描述

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

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

相关文章

npm、cnpm、pnpm、yarn包管理工具别傻傻分不清楚了

干啥的: nodejs的包管理工具。 用于自动化处理包的安装、更新、配置和管理。它们之间的主要区别在于它们各自的实现方式、性能优化、以及一些特有的功能。 怎么用: 1、npm 1.1、描述 Node Package Manager默认包管理器从 npm 公共仓库中安装、共享…

.net framework 4.8 开发windows系统服务

ps:旧技术了,有一点局限性,但好像网上记录并不多,或是很零散,比较坑人。故自己记录一下。 项目环境: win 10、.Net framework 4.8,Visual Studio 2019,oracle 12G,ORM是SqlSugar5.…

uniapp video标签无法播放视频

当video标签路径含有中文以及特殊字符视频就会无法播放 解决方法使用encodeURIComponent对路径进行加密处理 videoSrc data.coursewareFile? ${appConfig.apiUrl encodeURIComponent(data.coursewareFile)}: "";最后效果

GHA高质量seo文章怎么写?

撰写高质量SEO文章不仅仅是文字的堆砌,更是对内容的精心打磨,而GHA文章更是如此,想写出一篇GHA文章,首先就要保证以下几点,一定要原创,谷歌对于原创内容是极其看重的,哪怕是伪原创,在…

一种导出PPT到MP4的方法

需求 导出PPT到MP4,并记录每页,每个动作的时间线。通过 MP4时间线 就可以在页面上很方便的放映PPT的内容,并支持翻页点击。 代码 保存每一页的图像信息,用做播放器的缩略图 public void SaveThumbnail(string ppt_filepath, st…

【STL】红黑树的全面探索与红黑树的实现

ps:文章最后有完整的代码 1.红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路…

如何使用IDEA搭建Mybatis框架环境

文章目录 ☕前言为什么学习框架技术Mybatis框架简介 🍹一、如何配置Mybatis框架环境1.1下载需要MyBatis的jar文件1.2部署jar文件1.3创建MyBatis核心配置文件configuration.xml1.4.创建持久类(POJO)和SQL映射文件1.5.创建测试类 🧋二、 MyBatis框架的优缺…

前端性能优化:使用Vue3+TS+Canvas对图片进行压缩后再上传,优化带宽,减小服务器存储成本,减少流量损耗

在上传图片之前,对图片进行压缩。看到这里是不是有点懵,前端怎么压缩图片呢,这不应该是后端做的吗? 但是我在开发的时候接到了这样一个需求,要求对用户上传的图片进行一定的压缩,而且并且尽量还原图片的清…

大模型如何改变世界?李彦宏:未来至少一半人要学会“提问题“

2023年爆火的大模型,对我们来说意味着什么? 百度创始人、董事长兼CEO李彦宏认为,“大模型即将改变世界。” 5月26日,李彦宏参加了在北京举办的2023中关村论坛,发表了题为《大模型改变世界》的演讲。李彦宏认为&#…

2024年新算法-基于SBOA-BP混合神经网络的数据预测(Python代码实现)

在今天的数字化时代,机器学习和人工智能领域的不断发展为数据处理和预测提供了强大的工具。其中,BP神经网络(反向传播神经网络)作为一种经典的网络模型,因其能够处理复杂的非线性问题而备受关注。然而,传统…

吴恩达机器学习课后作业-07kmeans and pca

k-均值与PCA k-均值图片颜色聚类 PCA(主成分分析)对x去均值化图像降维 k-均值 K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。 K-均值是一个迭代算法,假设我们想要将数据聚类成n个…

python-变量声明、数据类型、标识符

一.变量 1.什么是变量 为什么需要变量呢? 一个程序就是一个世界,不论使用哪种高级程序语言编写代码,变量都是其程序的基本组成单位。如下图所示的sum和sub都是变量。 变量的定义: 变量相当于内存中一个数据存储空间的表示&#…

Spring MVC常用注解及用法

目录 1.建立连接--RequestMapping 2.请求 2.1 传递单个参数 2.2 传递多个参数 2.3 传递对象 2.4 参数重命名--RequestParam 2.5 传递数组 2.6 传递集合 2.7 传递json数据--RequestBody 2.8 获取URL中参数--PathVariable 2.9 上传文件--RequestPart 2.10 获取Cookie--…

bomb 实验

GDB常用命令: GDB调试常用命令-CSDN博客 原理: 编译与反汇编过程-CSDN博客 Bomb实验实现 阶段一: 分析 分配空间:sub $0x8,%rsp 为局部变量分配栈空间。设置参数:mov $0x402400,%esi 将字符串地址加载到 %esi。…

MMsegmentation与MMdeploy简单使用

最近涉及到了图像分割的任务,于是拿来写下博客加深下使用。 MMsegmentation与MMdeploy的环境配置暂不做讲解,在官网和其他博客中有很多说明。 MMdeploy主要是把pt转为 onnx_int8的情况。 MMsegmentation环境配置可以参考 : 安装与配置MMSegmentation 目录…

【管理型文档】软件需求管理过程(原件)

软件需求管理规程应明确需求收集、分析、确认、变更控制及验证等流程,确保需求准确反映用户期望,支撑软件开发。该规程要求系统记录需求来源,通过评审确保需求完整、清晰、无歧义,实施变更控制以维护需求基线稳定,并持…

后端面试真题整理

面试问题整理 本人主要记录2024年秋招、春招过程中的疑难八股真题,参考来源:牛客网、知乎等。 八股 深拷贝与浅拷贝 浅拷贝: 浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果…

井盖丢失隐患大?智慧井盖监管系统帮你解决

在现代都市中,我们每天行走在钢筋水泥之间,却很少有人注意到脚下的小小井盖。这些不起眼的圆形铁盘不仅是城市地下管网的入口,更是维系城市生命线的重要组成部分。然而,当暴雨来袭,或是深夜无人之时,井盖的…

无线麦克风什么牌子的音质效果好?一文读懂麦克风哪个牌子的好

无线领夹麦克风哪款音质最好?在这个追求高质量音效的年代,选择一款合适的无线领夹麦克风(简称领夹麦)对于提升录音或直播的音质至关重要。随着市场的不断扩大,市面上充斥着大量信号不稳定、音质差的无线领夹麦克风&…

2024年汽车零部件企业CRM研究:服务商排名、案例分析、需求分析

最近媒体上频现各车企大佬发声,抗议某汽车企业“不要卷价格,要卷长期价值”,还有的直接批判其打破行业规则。图穷匕现,汽车行业的竞争愈发激烈了。 汽车产业作为我国国民经济的重要支柱产业、经济增长和转型的重要抓手&#xff0…