【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, 大概字段有&…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...