【JavaEE】IP协议
作者主页:paper jie_博客
本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。
本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将基础知识一网打尽,希望可以帮到读者们哦。
其他专栏:《MySQL》《C语言》《javaSE》《数据结构》等
内容分享:本期将会分享网络编程中的IP协议
目录
IP协议的概念
协议头格式
网段划分
特殊IP
地址管理
动态分配IP地址
IPv6
NAT技术
路由选择
IP协议的概念
想我们前面说到的UDP和TCP协议都是作用在运输层的,而我们的IP协议则是作用来网络层的.而IP协议最主要的工作就是两方面: 1. 地址管理,使用一套地址管理,来描述互联网上每个设备所在的位置. 2. 路由选择, 也就是规划通信中的路线. 如果从互联网中某个地址到另一个地址.
主机: 这里主机一般是配有一个IP地址,但是它不能进行路由控制.
路由器: 配有IP地址,还可以进行路由控制.
节点: 主机和路由器的统称.
协议头格式
4位版本: 这里主流的版本就是IPv4(当前主流的版本)和IPv6.
4位首部长度: 这里单位是4字节.IP头部长度最长为 16 * 4 个字节.
8位服务类型: 这里实际上只有4位有效,且这4位彼此间是冲突的.(最小延时,最大吞吐量,最高可靠性,最小成本).
16位总长度(单位字节数): 描述了一个IP数据报的长度.(包含报头 + 载荷) 这里如果传输的TCP数据报超过64k它就会进行拆包传输,变成多个IP数据报.
16位标识: 唯一标识主机发送的报文. 如果IP报文在数据链路层被切片了.那这里的每一片里面的标识都是相同的.
3位标志: 这里只有后两位有效.第二位表示是否拆包了. 第三位表示结束标识,如果分片了,就会将最后一片为1,其他为0来表示结束.
13位片偏移: 这里是分片相当于原始IP报文开始处的偏移量. 描述了这些包之间的先后顺序.
8位生存时间: 这里表示每经过一个路由器转发,它就会-1,但这个数值减到0了,就会进行丢包.这是为了防止这个数据包在网络上无限的转发下去.
8位协议: 表示在传输层使用的是哪一种协议.
16位首部校验和: 只针对IP的首部校验,载荷部分TCP/UDP都有自带的校验和.
32位源IP和32位目的IP地址: 表示发送端主机和接收端主机
网段划分
我们的IP地址一般都分为两部分: 网络号和主机号. 网络号就是用来保证相互连接的两个网段具有不同的标识. 主机号就是同一网段内,主机之间具有相同的网络号,但主机号是不同的. 不同的子网就是将网络号相同的主机放在一起.一般来说,我们家用宽带中默认就是前三个字节就是网络号,主机号的范围就表示了局域网中可以有多少个设备.
在一个局域网中,网络号和主机号都相同的话,这个时候就无法上网.
如果局域网中的设备,网络号和路由器的网络号不相同,也是不能上网的(因为这个主机不能通过路由器访问到外网,也不能访问局域网中的其他设备)
两个相邻的局域网,网络号不能相同(一个路由器连接的两个网络,就是相邻的)
我们通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的IP地址都不同了. 这里有一种技术jiaozuoDHCP,可以自动给子网内新增主机节点分配IP地址,可以避免手动管理IP的不变.
特殊IP
这里还会有一些特殊的IP.
127.0.0.1: 环回IP,表示本机,一般是在测试中使用,这里127*都是环回IP.
如果将IP地址中的主机地址全部设置成0,就成为了网络号,代表这个局域网.
将IP地址中的主机地址全部设置成1, 就成为了广播地址,用来给同一个链路中相互连接的主机发送数据包.(往广播地址上发消息,局域网中的所有设备都可以收到(连接的同一个WiFi)).
地址管理
IP地址本质上就是一个32位的整数.为了方便,使用点分十进制的方式来区分,每一部分的范围都是0 - 255.IP地址的存在就是为了可以区分网络上的不同的设备.希望每个设备都有唯一的IP地址. 但是随着互联网的发展,32位的这个整数开始捉襟见肘了.为了解决IP地址不够用的情况,就需要相出解决方法.主要就是有三种.
动态分配IP地址
这里主要的做法就是只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每一次接入互联网,得到的IP地址就可能不同.但是这种做法只是简单的缓解了当前的情况,治标不治本.
IPv6
IPv6和IPv4有这本质的区别,并不是它的简单升级版,这是两个互不相关的两个协议,并不兼容. IPv6用16个字节128位来表示一个IP地址.这就相当于就算是地球上的每一粒沙子都可以分配到一个IP地址.但是IPv6的普及度并不高,最高的还是我们中国,普及度有70%.
NAT技术
这里会先将IP地址分为两个大类:
1. 私网IP/局域网IP
IP地址是10.*, 172.16 - 172.31*, 192.168* 这三类都是私网IP.
2. 公网IP
除了上面这些,其他的IP都是公网IP了.
这里要求公网上的设备对应的公网的IP,都是唯一的. 但是私网上的设备的IP只要保证局域网内部的IP不重复即可.不同的局域网的IP是允许重复的.
由于上面这种规定,就有一些限制:
1. 公网设备访问公网设备,没有任何问题,可以直接访问.
2. 局域网设备访问局域网设备(同一个局域网),也没问题.
3. 但是局域设备访问局域设备(不同的局域网),就不允许访问了.
4. 公网设备不允许主动访问局域网设备.
5. 局域网设备访问公网设备,就需要对局域网设备的IP进行地址转换.
一般来说,带有公网IP的路由器都是运营商的路由器. 它一般就连着几个局域网的路由器. 这里注意: 一般一个路由器都会有两个IP地址. LANIP, 是一个局域网IP. WANIP,可能是局域网IP,也可能是公网IP, 而路由器的核心就是将这两个网连起来.
而这里NAT技术起到的作用就是: 局域网设备在进行数据传输到路由器后,路由器就会将源IP改成自己的IP,一直替换到这个数据报源IP变成了公网IP,就不会进行替换了. 经过这种替换,本质上就是让一个公网IP可以对应多个设备.
而这里就会有一个问题了: 那这个数据的响应怎么返回,源IP都替换掉了. 这里在路由器内部会将这次通信的相关信息记录下来,记录这次通信过程中的 替换前的源IP 替换后的源IP 目的IP. 返回时就将源IP和目的IP反过来. 这里如果是同一个局域网多个设备访问同一个服务器, 那它这里就会多出一个源端口和目的端口来区分. 如果恰好这里端口也相同,它就会对端口号也使用映射,再变成不同的端口号就行了.
路由选择
路由选择就是在网络结构中规划出一条路线. 这里因为网络结构太复杂了,每个路由器都无法掌握全局的信息,只能掌握一部分局部信息,就属于(走一步看一步).
路由器转发数据包就和我们生活中通过问路来找地方一样.数据报中包含了目的IP,就是问路的目标. 每个路由器对于网络环境(附近的设备情况)有一定的了解.此时就可以根据路由器的了解来进行下一步. 这里的了解,路由器内部有一个路由表来存储. 里面存储了目的IP的网段,对应的网络接口(从路由器哪个口出). 如果目的IP中路由表有就直接转发即可. 当目的地址路由表中没有相关信息,就会交个下一跳(一般就是它的上层路由器).
相关文章:

【JavaEE】IP协议
作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…...
计算机网络-数据通信基础
目录 前言 一、数据通信基本概念 二、数据通信相关知识1 总结 前言 正在学习计算机网络体系,把每日所学的知识梳理出来,既能够当作读书笔记,又能分享出来和大家一同学习讨论。 一、数据通信基本概念 基本概念:信源、信道、信宿&…...

【lesson53】线程控制
文章目录 线程控制 线程控制 线程创建 代码: 运行代码: 强调一点,线程和进程不一样,进程有父进程的概念,但在线程组里面,所有的线程都是对等关系。 错误检查: 传统的一些函数是,成功返回0&…...

TypeScript(一):TypeScript基本理解
TypeScript基本理解 为什么使用TS JavaScript发展至今,没有进行数据类型的验证而我们知道,在编程阶段,错误发现的越早越好而TS就解决了JS的这个问题 认识TypeScript TypeScript是拥有类型的JavaScript超级,它可以编译成普通、…...

C语言—指针
碎碎念:做指针题的时候我仿佛回到了原点,总觉得目的是为了把框架搭建起来,我胡说的哈31 1.利用指针变量将一个数组中的数据反向输出。 /*1.利用指针变量将一个数组中的数据反向输出。*/#include <stdio.h> #include <time.h> #include <…...

c++作业
Shell中的函数(先调用后使用的原则)(没有申明) (Function) 函数名(有没有参数根据调用格式)(不能写任何内容) { 函数体 Return 返回值 } 函数名 ----》…...
什么是tomcat?tomcat是干什么用的?
前言 Tomcat是一个开源的、轻量级的应用服务器,是Apache软件基金会的一个项目。它实现了Java Servlet、JavaServer Pages(JSP)和Java Expression Language(EL)等Java技术,用于支持在Java平台上运行的动态W…...

中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码...
本期文章复现一篇发表于2024年来自中科院一区TOP顶刊《Energy》的改进蜣螂算法。 论文引用如下: Li Y, Sun K, Yao Q, et al. A dual-optimization wind speed forecasting model based on deep learning and improved dung beetle optimization algorithm[J]. Ener…...
C# 如何实现一个事件总线
EventBus(事件总线)是一种用于在应用程序内部或跨应用程序组件之间进行事件通信的机制。 它允许不同的组件通过发布和订阅事件来进行解耦和通信。在给定的代码片段中,我们可以看到一个使用C#实现的Event Bus。它定义了一些接口和类来实现事件…...

Python学习路线图
防止忘记,温故知新 进阶路线...
作业2.14
chgrp: 只能修改文件的所属组 chgrp 新的组 文件名 要求:修改的目标组已经存在 chown: chown 新的用户名 文件名 sudo chown root :1 将文件1的所属组用户和所属组用户都改为root sudo chown root:ubuntu 1 将文件1的所属用户…...
基于python+django+mysql的小区物业管理系统
该系统是基于pythondjango开发的小区物业管理系统。适用场景:大学生、课程作业、毕业设计。学习过程中,如遇问题可以在github给作者留言。主要功能有:业主管理、报修管理、停车管理、资产管理、小区管理、用户管理、日志管理、系统信息。 演示…...
控制与状态机算法
控制与状态机算法是计算机科学、电子工程和自动化领域中常用的一种设计工具,它用来描述一个系统的行为,该系统在不同时间点可以处于不同的状态,并且其行为取决于当前状态以及输入的信号或事件。状态机算法的核心概念包括: 状态(State):系统的任何可能配置。每个状态代表…...
sql常用语句小结
创建表: create table 表名( 字段1 字段类型 【约束】【comment 字段1注释】, //【】里面的东西可以不用加上去 字段2 字段类型 【约束】【comment 字段2注释】 )【comment 表注释】 约束:作用于表中字段上的规则…...

云计算基础-虚拟机迁移原理
什么是虚拟机迁移 虚拟机迁移是指将正在运行的虚拟机实例从一个物理服务器(或主机)迁移到另一个物理服务器(或主机)的过程,而不会中断虚拟机的运行。 虚拟机拟机迁移分类虚 热迁移:开机状态下迁移 冷迁…...

云计算基础-云计算概念
云计算定义 云计算是一种基于互联网的计算方式,通过这种计算方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。云计算依赖资源共享以达成规模经济,类似基础设置(如电力网)。 云计算最基本的概念就是云加端,我们有一个…...

如何将阿里云服务器迁移
📑前言 本文主要是如何将阿里云服务器迁移实现数据转移的文章,如果有什么需要改进的地方还请大佬指出⛺️** 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日…...

如何将本地的python项目部署到linux服务器中
大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 。 前言 本地写好的python项目,如何部署在服务器上运行呢?今天,我们就来抽一点点时间来看看。(网上找的资料,大部分都囫囵吞枣的…...

每日五道java面试题之java基础篇(五)
目录: 第一题. final、finally、finalize 的区别?第二题. 和 equals 的区别?第三题.hashCode 与 equals?第四题. Java 是值传递,还是引⽤传递?第五题 深拷贝和浅拷贝? 第一题. final、finally、finalize 的…...
HiveSQL——用户行为路径分析
注:参考文档: SQL之用户行为路径分析--HQL面试题46【拼多多面试题】_路径分析 sql-CSDN博客文章浏览阅读2k次,点赞6次,收藏19次。目录0 问题描述1 数据分析2 小结0 问题描述已知用户行为表 tracking_log, 大概字段有&…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...