【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中路由表有就直接转发即可. 当目的地址路由表中没有相关信息,就会交个下一跳(一般就是它的上层路由器).

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

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

相关文章

MySQL之select查询

华子目录 SQL简介SQL语句分类SQL语句的书写规范SQL注释单行注释多行注释 select语句简单的select语句select的算数运算select 要查询的信息 from 表名;查询表字段查询常量查询表达式查询函数 查询定义别名as安全等于<>去重distinct连接字段concat 模糊查询运算符比较运算…

(免费领源码)python#flask# MySQL人口分布系统74626-计算机毕业设计项目选题推荐

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对人口分布系统等问题&#xff0c;对人口分布系…

浅析Linux追踪技术之ftrace:Event Tracing

文章目录 概述使用Event Tracing使用set_event接口使用enable接口 Event配置Event formatEvent Filtering过滤规则设置过滤器 Event TriggerTrigger语法 Trace marker相关参考 概述 Event Tracing&#xff08;事件追踪&#xff09;利用在内核代码中加入的各种Tracepoint&#…

2.18 day5 C++

以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系:比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一位讲解员&#xff0c;他会为每种动物表演…

RabbitMQ之 Fanout 交换机

&#x1f47d;System.out.println(“&#x1f44b;&#x1f3fc;嗨&#xff0c;大家好&#xff0c;我是代码不会敲的小符&#xff0c;双非大四&#xff0c;Java实习中…”); &#x1f4da;System.out.println(“&#x1f388;如果文章中有错误的地方&#xff0c;恳请大家指正&a…

Linux基础IO【文件系统】

目录 1.磁盘文件 2.磁盘概念 2.1基本结构 2.2数据存储 3磁盘信息 3.1块组信息 4.文件操作 4.1文件创建 4.2文件访问 4.3对文件增删查改 4.4大文件存储 总结&#xff1a; 1.磁盘文件 在计算机中&#xff0c;没有被打开的文件都是静静的躺在外存&#xff08;磁盘…

C语言学习day16:二维数组

二维数组格式&#xff1a; 数据类型 数组名[行][列] { {值1&#xff0c;值2}, {值3&#xff0c;值4} } 代码&#xff1a; int arr[2][3] { {1,2,3},{4,5,6} }; 那么我们怎么找它的下标呢&#xff0c;我先上一副图&#xff1a; 假如我现在要找1&#xff0c;那么它…

Python函数(一)

目录 一、定义函数 &#xff08;一&#xff09;向函数传递信息 &#xff08;二&#xff09;实参和形参 二、传递实参 &#xff08;一&#xff09;位置实参 &#xff08;二&#xff09;关键字实参 &#xff08;三&#xff09;默认值 &#xff08;四&#xff09;等效的函…

App启动优化笔记

app大致的启动流程。有Launcher进程,system_server进程,zygote进程,APP进程。 Launcher进程:启动activity来启动应用 system_server进程:(ams是其中的一个binder):发送一个socket消息给Zygote。 zygote进程:收到消息后,fork新的进程,---》app进程启动 APP进程:…

是面试官放水,还是公司实在是太缺人?,字节原来这么容易进...

字节是大企业&#xff0c;是不是很难进去啊&#xff1f;” “在华为做软件测试&#xff0c;能得到很好的发展吗&#xff1f; 一进去就有19.5K&#xff0c;其实也没有想的那么难” 直到现在&#xff0c;心情都还是无比激动&#xff01; 本人211非科班&#xff0c;之前在华为…

若依项目改造

ctrlalt l 格式化项目 alt f6 修改包和import包名 替换com.ruoyi 为 com.cj 替换若依版本为自己的版本 将ruoyi改成自己项目的英文名 修改中文名字 修改文件包名 修改有ruoyi的类名 &#xff1a; 验证码生成器包名修改&#xff1a;

【电路笔记】-感抗

感抗 文章目录 感抗1、概述2、感抗示例13、通过 LR 串联电路的交流电源4、感抗示例25、交流电感器的功率三角形线圈的感抗取决于所施加电压的频率,因为电抗与频率成正比。 1、概述 感抗是电感线圈的一种特性,它抵抗通过它的交流电 (AC) 的变化,类似于电阻中对抗直流电 (DC)…

探索设计模式的魅力:掌握命令模式-解锁软件设计的‘遥控器’

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 引言&#xff1a;探索命令模式的奥秘 软件设计领域充满挑战与机遇&#xff0c;命令模式…

12.QT文件对话框 文件的弹窗选择-QFileDialog

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面 2.信号槽 3.其他函数 参考&#xff1a; 前言&#xff1a; 通过按钮实现文件弹窗选择以及关联的操作 效果图就和平时用电脑弹出的选文件对话框一样 技能&#xff1a; QString filename QFileDialog::ge…

MATLAB | 绘图复刻(十五) | 环形聚类树状图

本期复刻效果&#xff1a; 感觉出的聚类分析树状图绘制工具也不少了&#xff0c;未来可能会统一整理为一个工具包&#xff1f;(任重道远&#xff0c;道阻且长)&#xff1a; 代码讲解 0 数据设置 写了比较多的注释应该比较易懂&#xff1a; clc; clear; close all% 样品起名s…

Linux------环境变量

目录 前言 一、环境变量 二、添加PATH环境变量 三、HOME环境变量 四、查看所有环境变量 1.指令获取 2.代码获取 2.1 getenv 2.2main函数的第三个参数 2.3 全局变量environ 五、环境变量存放地点 六、添加自命名环境变量 七、系统环境变量具有全局属性 八、环境变…

芋道---实现可退回至申请人节点(附完整代码)

现有如下需求&#xff0c;审批人在退回申请时&#xff0c;想退回至申请人节点&#xff0c;但目前芋道并不支持退回至申请人节点&#xff0c;现做如下修改&#xff0c;实现该需求&#xff1a; 步骤一&#xff1a;设计流程模型 首先&#xff0c;我们在设计流程模型时&#xff0c…

0205-2-数据链路层

第 3 章 数据链路层 使用点对点信道的数据链路层 数据链路和帧 数据链路层使用的信道主要有以下两种类型&#xff1a; 点对点信道。这种信道使用一对一的点对点通信方式。广播信道。这种信道使用一对多的广播通信方式&#xff0c;因此过程比较复杂。广播信道上连接的主机很多…

Linux——网络通信TCP通信常用的接口和tcp服务demo

文章目录 TCP通信所需要的套接字socket()bind()listen()acceptconnect() 封装TCP socket TCP通信所需要的套接字 socket() socket()函数主要作用是返回一个描述符&#xff0c;他的作用就是打开一个网络通讯端口&#xff0c;返回的这个描述符其实就可以理解为一个文件描述符&a…

c高级 函数+Makefile

一、作业 1.写一个函数&#xff0c;输出当前用户的uid和gid&#xff0c;并使用变量接收结果 #!/bin/bash function fun(){retid -uret1id -gecho $ret $ret1 } retfun echo $ret二、练习回顾 1.分文件编译&#xff08;实现冒泡排序&#xff09; 正确的&#xff1a;将数组的…