【JavaEE】IP协议 应用层协议

 🔥个人主页: 中草药

🔥专栏:【Java】登神长阶 史诗般的Java成神之路


🕶️一.IP地址

         IP协议(Internet Protocol)是TCP/IP协议族中最核心的协议之一,它定义了数据包在网络中传输的标准和规则。IP协议的设计初衷是为了实现大规模、异构网络的互联互通,并且分割了顶层网络应用和底层网络技术之间的耦合关系,以促进两者的独立发展 

我们这里研究的是IPv4 

  • 主机:配有IP地址
  • 路由器 :配有IP地址,并能进行路由选择
  • 节点:主机和路由器的统称

🥽二.报头格式

IPv4报头结构如下所示:

  1. 版本(Version, 4位) - 指定使用的IP协议版本。只有两个取值,4和6,对于IPv4,这部分值为4。
  2. 首部长度(Header Length, 4位) - 指明 报头的长度,以32位字(4字节)为单位。
  3. 服务类型(Type of Service, TOS, 8位) IP协议以那种模式进行工作,包含区分服务字段,用于描述数据包的优先级和其他服务质量要求。
  4. 总长度(Total Length, 16位) - 表示整个IP数据报的长度,以字节为单位。
  5. 标识(Identification, 16位) - 用于识别属于同一数据报的所有分片。涉及到组包拆包。
  6. 标志(Flags, 3位) - 主要用来控制分片行为。
    • 最高位(保留未使用)
    • 中间位(Don't Fragment, DF):表示当前是否是拆包/组包
    • 最低位(More Fragments, MF):表示当前包,是否是组包中的最后一个。
  7. 分片偏移(Fragment Offset, 13位) - 决定组包时候的先后顺序。
  8. 生存时间(Time to Live, TTL, 8位) - 数据报在网络中可以存在的最长时间,每经过一个路由器 TTL(不是s或者min,而是次数) 减一,当TTL为0时数据报将被丢弃。假设构造的一个IP数据报,目的IP不存在,如果让这样的数据报,无限传输,会消耗很多网络资源。
  9. 协议(Protocol, 8位) - 指明上层使用的协议类型,是传输给TCP还是UDP等。
  10. 头部校验和(Header Checksum, 16位) - 用于检测数据在传输中是否出错。
  11. 源IP地址(Source IP Address, 32位) - 发送方的IP地址。
  12. 目标IP地址(Destination IP Address, 32位) - 接收方的IP地址。
  13. 选项(Options) - 可选字段,用于携带特定的控制信息或实验用途。
  14. 填充(Padding) - 如果需要的话,用来确保报头的长度为32位的整数倍。

🥼三.版本

IP协议有两个主要版本:IPv4和IPv6。

  • IPv4 使用32位地址,这种地址空间随着互联网的扩张而逐渐耗尽
  • IPv6 采用128位地址,极大地扩展了地址空间,并引入了一些新的特性,如内置的安全性(如IPsec)和支持即插即用的自动配置

🦺四.主要功能

  • 地址管理:为网络上的每一个设备分配一个唯一的地址(即IP地址),从而使得数据可以在网络中被路由到正确的接收者
  • 路由选择:IP协议决定了数据包在网络中传输的最佳路径。这涉及到根据网络拓扑选择合适的路径,以确保数据包能够高效地到达目的地

👔五.IP地址

        IP地址,用来标识网络上的一个设备,期望的IP地址应该是唯一的,32位表示的数据范围是,0->42亿9千万,这样的数字在如今“移动互联网” “物联网” 时代已经不够用了,因此解决IP地址不够用的问题我们有三个方案

1.动态分配IP地址

         若设备上网就分配IP地址,不上网就不分配地址

2.NAT 网络地址转换

        NAT的核心思想是在一个网络边界路由器上维护一个地址转换表,这个表记录了内部私有IP地址与外部公有IP地址之间的映射关系。当内部网络中的设备需要与外部网络通信时,NAT会将数据包的源IP地址替换为公共IP地址,并且可能会改变源端口号来区分不同的会话。

  • 同一个局域网内,主机A访问主机B,不会涉及到NAT
  • 公网上的设备A,访问公网上的设备B,不会涉及到NAT
  • 一个局域网的主机A访问另一个局域网的主机B,NAT机制不允许
  • 局域网上的设备A,访问到公网上的设备B,主要涉及到NAT机制

当内部网络中的设备发送请求到外部网络时:

  1. 数据包到达NAT设备。
  2. NAT设备检查其转换表以找到相应的条目。
  3. 如果没有找到,则创建一个新的条目,并将内部私有IP地址和端口号替换为NAT设备上的公共IP地址和一个新的端口号。
  4. 修改后的数据包被转发到互联网。

对于从外部网络到内部网络的数据包,NAT设备会根据其转换表逆向操作,将公共IP地址和端口号转换回内部私有IP地址和端口号。

优点

  • 节约IP地址:通过使用私有IP地址范围(如10.x.x.x, 172.16.x.x - 172.31.x.x, 192.168.x.x),可以大大减少对全球唯一IP地址的需求。
  • 安全性:NAT可以隐藏内部网络结构,从而增加了一定程度的安全性。
  • 灵活性:可以轻松地添加新的内部主机而不需要重新配置它们的IP地址。

缺点

  • 性能开销:NAT需要处理额外的数据包头部修改工作,这可能会带来一些性能上的影响。
  • 协议支持:某些协议可能依赖于特定的端口行为或者需要透明地传输IP地址信息,这些情况下NAT可能会导致问题。
  • 复杂性:在NAT机制的网络环境是非常复杂的,随着网络规模的增长,管理NAT表可能会变得复杂。

 3.IPv6

该方法从根本原因解决了 IP地址不够分配的原因

IPv4用32位4个字节表示IP地址

IPv6用128位16个字节表示IP地址

除非未来人类的文明急速发展走向宇宙,否则只要人类困到地球上,IPv6足够人类用一辈子

IPv6与IPv4并不兼容,现如今IPv6在国内的普及程度非常高,已经超过70%

公网IP(Public IP)与私有IP(Private IP)

他们的主要区别在于它们的应用场景以及是否可以在互联网上直接访问。

  1. 公网IP

    • 公网IP地址是全球唯一的,用于标识互联网上的设备或网络接口。
    • 这些地址可以在全球范围内路由,这意味着数据包可以从世界任何地方发送到该地址。
    • 公网IP地址由互联网号码分配机构(Internet Assigned Numbers Authority, IANA)及其下属的区域互联网注册管理机构(Regional Internet Registries, RIRs)分配给互联网服务提供商(ISPs)或其他大型组织。
    • 例子包括 A 类地址的一部分(如 1-126)、B 类地址的一部分(如 128-191)、C 类地址的一部分(如 192-223),以及 IPv6 地址空间中的大部分。
  2. 私有IP

    • 私有IP地址是在特定的内部网络中使用的,这些地址不是全局唯一的。
    • 它们通常用于局域网(LAN)内,通过网络地址转换(NAT)技术来实现与外部互联网的通信。
    • 私有IP地址不会在互联网上直接路由,而是通过NAT设备将内部私有地址转换为一个或多个全局唯一的公网IP地址来进行通信。
    • 私有IP地址范围包括:
      • 10.0.0.0 到 10.255.255.255
      • 172.16.0.0 到 172.31.255.255
      • 192.168.0.0 到 192.168.255.255

特殊的IP地址

1.主机号全为0

此时这个IP就表示当前网段(相当于网络号)

因此,再给局域网某个设备分配IP地址的时候,不能把主机号设置为全为0

2.主机号全为1

如果将主机号全设置为1,就成为了广播地址,用于给同一个链路中相互链接的所有主机发送数据包

3.127.*  环回IP(lookback)

自发自收,给这个ip发一个数据,使用环回Ip用于测试,网络程序大多是跨主机通信,往往先自行测试,一台主机的测试客户端和服务器之间鞥否正常交互

🍇六.分包组包

为什么要分包

        当一个较大的数据报(Datagram)需要通过最大传输单元(Maximum Transmission Unit, MTU)较小的链路进行传输时,就需要将其拆分成更小的数据片段(Fragment)。这是因为不同的网络层协议和支持这些协议的物理介质可能有不同的MTU限制,如果数据报超过这个限制,就无法直接转发。

分包过程

当数据报的大小超过了MTU时,路由器会执行以下步骤:

  1. 分片:将原始数据报分割成若干个更小的数据片段。
  2. 添加片段信息:在每个数据片段的IP头中添加必要的信息,以便于在目的端进行重组。这些信息包括:
    • 标识符(Identification):用来标记属于同一个原始数据报的所有片段。
    • 标志位(Flags):DF(Don't Fragment)标志位,如果设置为1则不允许分片;MF(More Fragments)标志位,如果设置为1表示还有后续片段,如果是0则表示是最后一个片段。
    • 片段偏移(Fragment Offset):表示该片段在原始数据报中的相对位置,以8字节为单位。

组包过程

当数据片段到达目的地时,接收端会根据以下信息进行重组:

  1. 标识符(Identification):确认哪些片段属于同一个原始数据报。
  2. 片段偏移(Fragment Offset):用来确定各个片段在原始数据报中的正确位置。
  3. 总长度(Total Length):用来验证所有片段是否完整地组成了原始数据报。
  4. 校验和(Checksum):用来检测数据报是否在传输过程中出现损坏。

如何保证数据的顺序和完整性

为了确保数据的顺序性和完整性,接收方会执行如下操作:

  • 顺序性:通过“片段偏移”字段来确定片段的顺序,接收方可以根据该字段将接收到的片段按照正确的顺序排序。
  • 完整性:通过“标识符”字段来识别属于同一个数据报的所有片段,并通过“总长度”字段来检查所有片段的总和是否等于原始数据报的长度。另外,“校验和”字段可以帮助检测数据报是否在传输过程中发生了损坏。

如果在重组过程中发现缺少片段或者是片段已经损坏,接收端可能会丢弃整个数据报或向源主机发送一个错误消息,要求重新传输。需要注意的是,分片重组的过程在目的端进行,中间节点仅负责传递这些分片。

🎒七.网段划分

        IP地址的网段划分指的是将一个大的IP地址范围细分为多个小的子网的过程,也叫组网(组建网络)。这样做可以提高网络效率,简化网络管理,并有助于更好地控制网络流量。

组网的时候,需要我们针对每个上网的设备的IP地址进行设置,对于家庭网络这种相对简单的网络结构都有自动分配IP地址,针对如同商场,学校这种更复杂的网络环境,需要手动设置

子网掩码

为了确定一个IP地址的哪一部分是网络号,哪一部分是主机号,我们使用子网掩码(subnet mask)。子网掩码也是一个32位的二进制数,同样表示为点分十进制形式。它与IP地址进行按位与运算(AND operation),以确定网络号和主机号。

例如,对于IP地址192.168.1.1,如果子网掩码是255.255.255.0,则网络号是前三个八位字节192.168.1,而主机号是最后一个八位字节1。网络掩码也是32位的整数,左半部分都是1,右半部分都是0,不能0 1穿插出现

网络中规定:

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

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

过去提过一种花粉网络号和主机号的方案,把所有的IP地址划分为五类

  • A类 0.0.0.0到127.255.255.255
  • B类 128.0.0.0到191.255.255.255
  • C类 192.0.0.0到223.255.255.255
  • D类 224.0.0.0到239.255.255.255
  • E类 240.0.0.0到247.255.255.255

其中AB类的主机号太多了,实际上一般没有这么大的局域网,这属于上古网络时期的网络划分时代,现在基本上已经没有了

CIDR(无类别域间路由)

        CIDR(Classless Inter-Domain Routing)是一种用于替代传统分类网络的IP地址分配方式。它允许管理员使用斜杠表示法(如192.168.1.0/24),其中斜杠后面的数字代表子网掩码中的网络位数。例如,/24意味着前24位用于网络号,剩下的8位用于主机号。主要用途如下:

引入一个额外的子网掩码类区分网络号和主机号

将IP地址和子网掩码进行“按位与”操作得到的是网络号

        通过使用CIDR,可以更加有效地利用IP地址空间。例如,一个/24的子网可以进一步划分为两个/25的子网,或者四个/26的子网等等,直到满足所需的主机数量为止。

🧢七.路由选择

        IP地址的路由选择是指在网络中决定数据包从源地址到目的地址的最佳路径的过程。路由选择涉及到路由器如何决定数据包应该通过哪个接口转发,以及如何将数据包发送到最终的目的地。下面是关于IP地址路由选择的一些详细信息:

        路由选择的核心是路由器如何选择合适的路径将数据包从源地址传递到目的地址。路由器使用路由表来存储关于可达网络的信息,包括下一跳地址、出站接口、度量值等。当路由器接收到数据包时,它会查找路由表来确定如何转发数据包。

路由表的组成

路由表是路由器内部维护的重要数据,可以类似理解为hash表,key相当于IP地址(网络号),value相当于对应的网络接口(往哪个方向走)

路由表通常包含以下几个要素:

  • 前缀(Prefix):目标网络的地址及其子网掩码。
  • 下一跳(Next Hop):路由器应该将数据包转发到的下一个路由器的IP地址。
  • 出站接口(Interface):路由器上用来转发数据包的物理接口。
  • 度量值(Metric):用于评估路径优劣的标准,不同路由协议使用不同的度量值,如跳数、带宽、延迟等。
  • 路由来源(Source):路由信息的来源,可能是直连网络、静态路由或动态路由协议

路由的过程,是“跳一跳”的问路过程

所谓的一跳,就是在数据链路层的中的一个区间,具体在以太网从源MAC地址到目的MAC地址之间的帧传输空间

IP数据包的传输过程也和问路一般

  • 当IP数据包到达路由器时,路由器先会查看目的IP
  • 路由器决定这个数据包是能够直接发送给目标主机,还是需要发送给下一个路由器
  • 依次反复,一直到达目标 IP 地址

💎八.总结与反思

我从来不知道什么是苦闷,失败了再来,前途是自己努力创造出来的。——徐特立

简介

IP协议是一种无连接、尽最大努力交付的协议,它负责将数据从源主机传输到目的主机。IP协议定义了数据包的格式,并规定了如何将数据包发送到目的地。IP协议有两个主要版本:IPv4和IPv6,两者都在当今的网络环境中发挥着重要作用。

IPv4

IPv4是最早的IP协议版本,它使用32位地址,可以提供大约43亿个唯一的地址。尽管IPv4在互联网发展的早期阶段表现良好,但随着互联网用户的快速增长,IPv4地址资源逐渐耗尽。

IPv6

为了解决IPv4地址短缺的问题,IPv6应运而生。IPv6使用128位地址,提供了几乎无限的地址空间。此外,IPv6还引入了一些新的特性,如内置的安全性和自动配置能力。

IP数据报格式

无论是IPv4还是IPv6,数据报(Datagram)都是IP协议处理的基本单位。数据报包含头部信息和用户数据两部分。

IPv4数据报

  • 版本(Version):指明所使用的IP协议版本。
  • 头部长度(IHL):指示头部的长度。
  • 服务类型(TOS):现在通常用于区分服务等级。
  • 总长度(Total Length):整个数据报的长度。
  • 标识符(Identification):用于标识数据报。
  • 标志(Flags):指示是否允许分片。
  • 片段偏移(Fragment Offset):如果数据报被分片,指示各片段的相对位置。
  • 生存时间(TTL):数据报在网络中的存活时间。
  • 协议(Protocol):指示高层协议类型。
  • 头部校验和(Header Checksum):用于检测头部中的错误。
  • 源IP地址(Source IP Address):发送数据报的源地址。
  • 目的IP地址(Destination IP Address):接收数据报的目的地址。
  • 选项(Options):可选字段,用于实验或特殊用途。
  • 填充(Padding):使头部长度为32比特的整数倍。

IPv4是最早的IP协议版本,它使用32位地址,可以提供大约43亿个唯一的地址。尽管IPv4在互联网发展的早期阶段表现良好,但随着互联网用户的快速增长,IPv4地址资源逐渐耗尽。

IPv6

为了解决IPv4地址短缺的问题,IPv6应运而生。IPv6使用128位地址,提供了几乎无限的地址空间。此外,IPv6还引入了一些新的特性,如内置的安全性和自动配置能力。

        IP协议作为TCP/IP模型中的网络层协议,是互联网技术的基石之一。它定义了数据在网络中的传输方式,使得世界各地的设备能够相互通信。随着IPv6的普及,IP协议将继续支撑着互联网的持续发展。


🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀

以上,就是本期的全部内容啦,若有错误疏忽希望各位大佬及时指出💐

  制作不易,希望能对各位提供微小的帮助,可否留下你免费的赞呢🌸

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

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

相关文章

应用层协议HTTP介绍

一、HTTP协议介绍 HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本。 超文本:视频,音…

24年蓝桥杯及攻防世界赛题-MISC-1

2 What-is-this AZADI TOWER 3 Avatar 题目 一个恐怖份子上传了这张照片到社交网络。里面藏了什么信息?隐藏内容即flag 解题 ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc/outguess] └─$ outguess -r 035bfaa85410429495786d8ea6ecd296.jpg flag1.txt Reading 035bf…

如何使用命令行快速下载Google Drive/OneDrive大文件

OneDrive OneDrive使用wget下载会出现403 forbidden,可通过下面方法下载。 浏览器右键进入检查界面,选择netowork,搜索download.aspx,然后在待下载文件处点击下载,即可出现下载链接,复制为cURL即可下载。…

日志收集工具 Fluentd vs Fluent Bit 的区别

参考链接: FluentdFluentd BitFluentd & Fluent Bit | Fluent Bit: Official Manual Fluentd 与 Fluent Bit 两者都是生产级遥测生态系统! 遥测数据处理可能很复杂,尤其是在大规模处理时。这就是创建 Fluentd 的原因。 Fluentd 不仅仅是…

jenkins声明式流水线语法详解

最基本的语法包含 pipeline:所有有效的声明式流水线必须包含在一个 pipeline 块中stages:包含一系列一个或多个stage指令stage:stage包含在stages中进行,比如某个阶段steps:在阶段中具体得执行操作,一个或…

React js Router 路由 2, (把写过的几个 app 组合起来)

完整的项目,我已经上传了,资源链接. 起因, 目的: 每次都是新建一个 react 项目,有点繁琐。 刚刚学了路由,不如写一个 大一点的 app ,把前面写过的几个 app, 都包含进去。 这部分感觉就像是, …

[ IDE ] SEGGER Embedded Studio for RISC-V

一、FILE 二、Edit 三、View 四、Search 五、Navigate 六、Project 七、Build 7.1 编译 先选择一个目标类型,再选择编译。 八、Debug 九、Target 十、Tools 10.1 自定义快捷键 点击菜单项,通过Tools –> Options –> Keyboard,实现自…

Java | Leetcode Java题解之第413题等差数列划分

题目: 题解: class Solution {public int numberOfArithmeticSlices(int[] nums) {int n nums.length;if (n 1) {return 0;}int d nums[0] - nums[1], t 0;int ans 0;// 因为等差数列的长度至少为 3,所以可以从 i2 开始枚举for (int i …

安卓13设置动态显示隐藏第一页的某一项 动态显示隐藏无障碍 android13设置动态显示隐藏第一页的某一项

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改4.1修改方法14.2修改方法25.编译6.彩蛋1.前言 有时候,我们的设置里面显示的信息,需要根据不同的情况显示不同的信息,例如,动态的显示或者隐藏 “无障碍” 这一项。 2.问题分析 像这个问题…

英集芯IP5902:集成电压可调异步升压转换充电管理功能的8位MCU芯片

英集芯IP5902是一款集成了9V异步升压转换、锂电池充电管理及负端NMOS管的8-bit MCU芯片,外壳采用了SOP16封装形式,高集成度和丰富的功能使其在应用时只需很少的外围器件,就能有效减小整体方案的尺寸,降低BOM成本,为小型…

Day69补 前后端分离思想

ajax前后端分离 前后端分离处理:前端------(数据)-----服务端----(数据)-----前端-----动态改变页面的内容 1.json 1、JSON:由于JSON易读以及纯文本格式的特性,可以非常容易地与其他程序进行沟通…

业务安全治理

业务安全治理 1.账号安全撞库账户盗用 2.爬虫与反爬虫3.API网关防护4.钓鱼与反制钓鱼发现钓鱼处置 5.大数据风控风控介绍 1.账号安全 撞库 撞库分为垂直撞库和水平撞库两种,垂直撞库是对一个账号使用多个不同的密码进行尝试,可以理解为暴力破解&#x…

MVCC机制解析:提升数据库并发性能的关键

MVCC机制解析:提升数据库并发性能的关键 MVCC(Multi-Version Concurrency Control) 多版本并发控制 。 MVCC只在事务隔离级别为读已提交(Read Committed)和可重复读(Repeated Read)下生效。 MVCC是做什么用的 MVCC是为了处理 可重复读 和…

C# 实时流转换为m3u8

主要通过FFmpeg 执行命令进行转换 FFmpeg 下载地址 命令行 ffmpeg -i "rtsp://your_rtsp_stream_address" -codec: copy -start_number 0 -hls_time 10 -hls_list_size 12 -f hls "output.m3u8"start_number 设置播放列表中最先播放的索引号,…

形式向好、成本较低、可拓展性较高的名厨亮灶开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,减少企业级应用约 95%的开发成本,在强大视频算法加…

C++_21_模板

模板 简介&#xff1a; 一种用于实现通用编程的机制。 通过使用模板我们可以编写可复用的代码&#xff0c;可以适用于多种数据类型。 C模板的语法使用角括号 < > 来表示泛型类型&#xff0c;并使用关键字 template 来定义和声明模板 概念&#xff1a; c范式编程 特点&…

海外大带宽服务器连接失败怎么办?

在全球化日益加深的今天&#xff0c;海外大带宽服务器已成为企业拓展国际市场、提升业务效率的重要工具。然而&#xff0c;面对复杂多变的网络环境和技术挑战&#xff0c;服务器连接失败的问题时有发生&#xff0c;这不仅影响了企业的正常运营&#xff0c;还可能带来经济损失和…

如何写一个自动化Linux脚本去进行等保测试--引言

#我的师兄喜欢给我的休闲实习生活加活&#xff0c;说是让我在实习期间写一个自动化脚本去进行等保测试。呵呵哒。 怎么办呢&#xff0c;师兄的指令得完成&#xff0c;师兄说让我使用Python完成任务。 设想如下&#xff1a; 1、将Linux指令嵌入到python脚本中 2、调试跑通 …

【简历】25届河南某一本JAVA简历:从头到尾都表现的不懂技术

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历总体说明 今天看一份河南某重点一本大学的Java简历。 校招备战第一法则&#xff1a;必须确定自己的求职层次&#xff0c;是大厂、中厂还是小…

php语言基本语法

HP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的开源服务器端脚本语言&#xff0c;特别适合于Web开发。 它能够嵌入到HTML中&#xff0c;执行动态网页内容。 PHP的一些基本语法元素&#xff1a; 1. 基本结构 PHP代码通常嵌入到HTML中&#xff0c;以<…