【JavaEE初阶系列】——网络层IP协议(地址管理和路由选择)

目录

🚩网络层

🎈IP协议

👩🏻‍💻IP协议"拆包组包"功能

🎈地址管理

👩🏻‍💻IP地址的分类

👩🏻‍💻NAT机制如何工作的

👩🏻‍💻网段划分

🎈路由选择


🚩网络层

上一篇主要是传输层的UDP和TCP以及应用层是用什么格式来传输数据的。

接下来我们要讲网络层,网络层主要做的事情有两个方面:

  • 地址管理:制定一系列的规则,通过地址,描述出网络上一个设备的位置
  • 路由选择:网络环境比较复杂的,从一个节点到另一个节点之间,存在很多条不同的路径,就需要通过这种方式 筛选/规划出更合适的路径进行数据传输 (就是寄快递,传输层只用知道起点和终点,而网络层更细分成起点和终点之间各节点是如何传输的)

🎈IP协议

其中4位TOS字段。

这四个位,彼此之间是冲突的,只有一位设为1,不同的位设为1,表示IP协议的不同的形态。

最小延时1000,最大吞吐量0100,最高可靠性0010,最小成本0010,一般服务0000


👩🏻‍💻IP协议"拆包组包"功能

IP协议,确实也存在64KB这样的限制,但是IP协议自身支持“拆包组包”功能。

  • 16标识:如果一个大的IP数据包需要拆成多个小的,此时拆出来的这多个小包,16标识就是相同的数值
  • 13位片偏移:描述当前每个小的数据包(分片)相对位置。
  •  3位标志:一位表示是否允许拆包,一位表示是否是最后一个包 

如果后面遇到了,需要针对UDP拆包组包,可以参考IP这里的实现思路,来完成UDP这里的实现。(将大的包拆分成各个小的包,并且需要用3位标志来确定是否允许拆包是否是最后一个包,然后描述每个小的包相对位置即可。)


 

TTL的单位 是次数,数据包构造出来的时候,TTL会被设置成一个初始值(32,64,128....)

机制:数据包在转发过程中,每次经过一个路由器转发,TTL就会-1。

如果这个数据包,已经把TTL耗尽了,还没有顺利的到达对方,就会被丢弃掉。

这个机制,还是很有用的,给网络能够进行兜底

假设构造一个数据包,目的IP写作不存在IP,这个数据包不可能达到目标,显然这样的包,也不可能允许在网络上一直存在。

如果TTL设置成32,是否够用?

明明是合法的IP,还没到ttl就消耗完了,这个情况是可能存在的,概率不大,因为还有64,128.....,一般来说TTL是充裕的。



🎈地址管理

IP协议是一个32位的整数,2^32——》42亿9千万

地址,理论上是不会重复的,互联网发展到现在,能上网的设备,非常非常多,其实早就超过了42亿9千万这个数字了,最近还有物联网,就是汽车,空调,冰箱等等都需要上网来完成操作。一个需要上网的设备就需要一个IP地址。

如何解决这个IP地址不够用的问题呢?

  • 动态分配IP

这个方案,治标不治本,提高了IP地址的利用率,并没有增加IP地址的数目。

  • NAT机制(网络地址转换)

本质上 让一个IP地址,代表一批设备。(就比如我们大学生,在一个大学里,我们在淘宝上购物,买了的东西寄的都是一个地方,所以一个地方由一个大学里面几万同学使用)


👩🏻‍💻IP地址的分类

  • 内网IP(局域网IP)

如果一个IP地址,是以 10.* 或者 172.16.*-172.31.* 或者 192.168.* (符合上述条件之一,IP就是内网IP)

  1. 在同一个局域网内部,内网IP之间,不能重复的(A和B电脑连的是同一个路由器,她们电脑的IP地址肯定是不能重复的)
  2. 在不同的局域网中,内网IP之间,可以重复的(A连的是手机热点,B连的是校园网,A和B电脑的IP是可以相同的)
  • 外网IP(广域网IP)

除了内网IP,剩下的就是外网IP了,外网IP则始终都不允许重复,务必唯一。

当前情况下,通常是一个小区/一个学校/一个公司,都是构成一个大的局域网(这个局域网中可能有几千、几万个设备),这样的一个局域网就是用一个外网IP即可)

(一个外网IP就代表了几千个几万个这样的设备)

这个外网IP就是在我所在的这一大片区,共用一个外网IP。


👩🏻‍💻NAT机制如何工作的

NAT是一种网络技术,通常用于将局域网内部的设备连接到互联网。它通过将局域网内部设备的私有IP地址转换为路由器(NAT设备)的公共IP地址来实现,从而允许这些设备通过路由器访问互联网。(在局域网到广域网的时候,我们需要通过NAT机制,来将ip进行转换)

运营商路由器其实就是一个NAT设备,能够对这里的源ip进行替换。

但是内网Ip不能在广域网中使用,所以我们在连接到广域网之前,就进行交换IP。

所以最后站在服务器角度,源ip是117.158.220.9.4,我这个电脑替换后的ip。(因为我的电脑ip内网不能再外网上使用)

客户端发出请求->局域网->广域网->服务器 ,那么服务器怎么将响应报文传回去呢?

此时服务器就有个ip数据包,源ip是1.2.3.4,目的ip 117.158.220.9.4,此时经过运营商路由器的时候,运营商路由器是NAT里面有映射关系192.168.0.200->117.158.220.9.4,此时服务器返回响应的时候,我们就将117.158.220.9.4->192.168.0.200,然后返回到客户端。

经历的过程都是靠NAT设备来进行ip替换。

如果当前局域网内,有多个主机,都访问同一个网站服务器,此时服务器返回的响应经过当前的路由器之后,要交还给哪个主机呢?——端口号(比如快递小哥,把包裹放到一个大学门口,这里就可以借助电话号码(端口号)来区分。

端口可是分成同一主机的不同进程,也可以区分成不同主机的不同进程。

虽然ip一样,但是这两个请求来自于不同的端口,返回的响应数据,自然也会带有不同的目的端口。

服务器返回的两条数据:一个目的端口是10001,另一个目的端口是8000,路由器就知道了,10001的这个,就需要把ip替换回第一个主机的ip(192.168.0.100),10001,这个,就需要把ip替换回第二个主机的ip(192.168.0.200),8000

路由器可以主动的把相同的端口,替换成不同的端口

当前的网络环境 NAT+动态分配的方式 来解决IP地址不够用的问题的

NAT机制,最大的优势"纯软件的方案”

也正是因为这个机制,局域网内部的设备,能够主动访问外网的设备,外网的设备无法主动访问局域网内部的设备。(咱们之前写的UDP echo server必须部署到云服务器上才能执行了)

在一个NAT网络中,局域网内的设备可以主动发起连接到互联网上的服务器或服务,因为它们的请求会经过NAT设备,并且NAT设备会对源IP地址进行转换,使得互联网上的服务器能够正确地返回响应。但是,由于NAT设备会修改传出数据包中的源IP地址和端口信息,外部设备无法直接向局域网内的设备发起连接,因为外部设备无法识别和路由到局域网内部设备的私有IP地址。

因此,如果你想在局域网内部搭建一个UDP echo server,并且希望从互联网上的其他设备访问它,确实需要将该服务器部署到公共云服务器上,这样外部设备才能通过云服务器与局域网内的设备进行通信


👩🏻‍💻网段划分

把一个IP地址,会分成两个部分

网络号(标识了一个局域网)+主机号(表示了局域网中的一个设备)

同一个局域网中的设备,网络号必须相同,主机号必须不同。

这两个相邻的局域网,网络号不能相同。

通过一个路由器,连接两个局域网。


192.168.1.10

一个IP地址,哪个部分是网络号,哪个部分是主机号,不一定的。

子网掩码,就是用来确定网络号的。 

32位整数,左侧都是1,右侧都是0,不会出现1 0交替出现

1111 1111 1111 1111 0000 0000 0000 0000  (16个1,16个0)

网络号就是 255.255.0

这里的1也不一定是16个,可以根据实际的网络环境,灵活配置的。一般家用路由器,子网掩码是255.255.255.0


  • 如果一个IP地址,主机号全是0,当前这个IP就表示 “网络号“

192.168.100.0 

255.255.255.0

代表一个局域网的,给一个具体的主机,是不能分配这个IP的

  • 如果一个IP地址,主机号全是1,表示当前这个IP就是一个”广播Ip“

192.168.100.255

255.255.255.0

也不能给具体的主机分配这个IP的

  • 如果一个IP是127开头的,此时这个IP就是”环回IP"

127.0.0.1(最常用的)都表示”设备自身“,自己发给自己,操作系统提供了一个特殊的”虚拟网卡“,关联到了这个IP上,这里的环回IP主要的用途就是进行一些测试性的工作,环回IP能够排除网络不通干扰因素,更好的排查代码中的问题。


🎈路由选择

路由选择,就是描述IP协议(IP数据报)转发的过程。

从A->B,中间可能有很多条可行的路径,具体怎么走,平时使用地图软件,一搜索,就会出现很多条路径。(地图软件能够做出这样的路径规划,主要是因为,开了全图的,整个地图的信息,路径信息,都是在地图的服务器上全都存储的,给出”最优解“。

而进行IP数据报转发的时候每个路由器,都是无法知道,网络的”全貌“的,只知道一些局部的信息(一个路由器能知道哪些设备和它自己相连的),这就意味着IP数据在转发的过程中,是一个”探索式“”启发式“过程。

路由器转发数据报的过程比较复杂。只能通过一个简单的例子,即可得到一个认识。

一个网络层的数据报,每次到达一个路由器,也会进行上述”问路“过程。

每个路由器内部都有一个数据结构”路由表“,根据数据报种的目的IP,查路由表

如果查到了(问的人,恰好知道咋走),就直接按照路由表给定的方向(从哪个网络接口进行转发),继续转发就行了

如果 没有查到(问的人,不知道咋走),路由表里有一个”默认的表项“(下一跳地址),按照默认的表项转发即可。

路由表的数据结构:1.手动配置(网管可以根据需要手动配置) 2.自动获取(背后还有一系列的,路由表生成算法,有点复杂)


是不是狠心点对你我都好?

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

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

相关文章

[阅读笔记20][BTX]Branch-Train-MiX: Mixing Expert LLMs into a Mixture-of-Experts LLM

这篇论文是meta在24年3月发表的,它提出的BTX结构融合了BTM和MoE的优点,既能保证各专家模型训练时的高度并行,又是一个统一的单个模型,可以进一步微调。 这篇论文研究了以高效方法训练LLM使其获得各领域专家的能力,例如…

VBA技术资料MF144:将PDF首页作为对象插入工作表

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

【办公类-21-16】 20240410三级育婴师 344多选题(题目与答案合并word)

作品展示 背景需求: 前文将APP题库里的育婴师题目下载到EXCEL,并进行手动整理【办公类-21-14】 20240406三级育婴师 344道多选题 UIBOT下载整理-CSDN博客文章浏览阅读287次,点赞8次,收藏9次。【办公类-21-14】 20240406三级育婴师…

OpenHarmony鸿蒙南向开发案例:【智能猫眼(基于3518开发板)】

样例简介 本Demo是基于Hi3518开发板,使用开源OpenHarmony开发的RTSP协议流媒体应用。达到将Hi3518开发板中摄像头获取的数据通过RTSP协议传输到手机并显示 。 rtsp实现可参考文档:openharmony_1.0.1实现RTSPServer 运行效果 样例原理 如上图所示&…

【编程Tool】VS code安装与使用配置保姆级教程

目录 1.软件介绍 2.软件下载: 3.安装 3.1. 双击可执行文件 3.2. 同意协议 3.3. 选择安装路径,默认在C盘 3.4. 点击下一步 3.5. 可选择所有附加任务 3.6. 点击安装 3.7. 等待安装 3.8. 点击完成 3.9. 安装成功 4.下载MinGW64 4.1. MinGW-64下载地址 &…

【UnityShader】图片圆角

1.需求 我们在开发的时候,有时候一些按钮或者菜单栏的边角是直角的需要改成圆角,但是让美术重新绘制耽误时间不说也确实没必要,这个时候我们不妨使用一个简单的shader去解决这个问题,下面我们就讲讲这个shader要如何实现。 需求1…

QoS流量整形

流量整形是一种带宽技术形式,它延迟某些类型的网络数据包的流动,以确保更高优先级应用程序的网络性能,它主要涉及调整数据传输速率,以确保网络资源以最佳容量得到利用。流量整形的目的是防止网络拥塞并提高网络的整体性能&#xf…

【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域应用

随着航空、航天、近地空间遥感平台的持续发展,遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升,呈现出大数据特征。这为相关研究带来了新机遇,但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域…

JavaEE 初阶篇-深入了解 I/O 流(FileInputStream 与 FileOutputStream 、Reader 与 Writer)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 I/O 流概述 2.0 文件字节输入流(FileInputStream) 2.1 创建 FileInputStream 对象 2.2 读取数据 2.3 关闭流 3.0 文件字节输出流(FileOutputStream) 3.1 创建 Fi…

初识C++·类和对象(中)(3)

前言,最难的已经结束了,来点轻松了放松一下。 目录 1 流重载 2 const成员 3 取地址及const取地址操作符重载 1 流重载 C语言中printf和scanf是有局限性,只能直接打印内置类型,对于自定义类型就哦豁了,所以在C中就…

Linux——(grep指令及zip/tar压缩指令)

1.grep指令 语法: grep【选项】查找字符串 文件 功能: 在文件中搜索字符串,将找到的行打印出来 常用选项: -i :忽略大小写,所以大小写视为相同 -n : 顺便输出行号 -v :反向选择&…

MyBatis 从入门到精通:分页在MyBatis中使用

MyBatis 从入门到精通:分页在MyBatis中使用 先欣赏下美女🚀分页在MyBatis中使用👩‍💻摘要🎯引言💡正文内容😕 为什么要分页?🚀 使用Limit分页介绍📄 使用Li…

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(TcpServer板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现⾼并发服务器(TcpServer板块) 一、思路图二、模式关系图三、定时器的设计1、Linux本身给我们的定时器2、我们自己实现的定时器(1)代码部分(2)思…

Linux华硕笔记本安装ROG Asusctl

基础环境 适用系统: linux mint 21ubuntu 22.04 安装版本: asusctl-5.0.10rust 1.77.2 构建 安装编译环境 sudo apt-get update sudo apt-get install -y \libasound2-dev \libfreetype6-dev \libexpat1-dev \libxcb-composite0-dev \libssl-dev …

数字谐振器设计

数字谐振器设计 电路里的谐振:当电路中激励的频率等于电路的固有频率时,电路电磁振荡的振幅也将达到峰值。 形式一 形式二 例子

4.21java聊天室项目小结

基本完成了用户的登录注册功能,可以实现用户账号登录和邮箱登录功能,忘记密码通过邮箱发送验证码找回,注册账号功能,并传递给客户端更新数据库的表内容 注册功能: 注册成功后密码进行MD5加密并通过服务器保存到数据库…

springboot结合elasticJob

先说一说什么是elasticJob。 ElasticJob是一个分布式任务调度的解决方案,它由俩个相互独立的子项目Elastic-job-lite和Elastic- job-cloud组成。 任务调度:是指系统为了自动完成特定任务,在任务的特定时刻去执行任务的过程。 分布式&#xf…

剑指offer剪绳子;leetcode:LCR 131. 砍竹子 I

现需要将一根长为正整数 bamboo_len 的竹子砍为若干段&#xff0c;每段长度均为正整数。请返回每段竹子长度的最大乘积是多少。 示例 1&#xff1a; 输入: bamboo_len 12 输出: 81提示&#xff1a; 2 < bamboo_len < 58 注意&#xff1a;本题与主站 343 题相同&#…

SQLite导出数据库至sql文件

SQLite是一款实现了自包含、无服务器、零配置、事务性SQL数据库引擎的软件库。SQLite是世界上部署最广泛的SQL数据库引擎。 SQLite 是非常小的&#xff0c;是轻量级的&#xff0c;完全配置时小于 400KiB&#xff0c;省略可选功能配置时小于250KiB。 SQLite 源代码不受版权限制。…

Ubuntu 20.04.06 PCL C++学习记录(二十六)

[TOC]PCL中点云配准模块的学习 学习背景 参考书籍&#xff1a;《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,&#xff0c;PCL版本为1.10.0&#xff0c;CMake版本为3.16&#xff0c;可用点云下载地址 学习内容 在代码中使用ICP迭代最近点算法&#xff0c;程序随机…