Java EE|TCP/IP协议栈之网络层IP协议详解

news2024/9/30 5:24:25

文章目录

    • 一、IP协议感性认知
      • 简介
      • 特点
    • 二、IP协议报头结构
      • 4位版本
      • 4位首部长度
      • 8位服务类型
      • 16位总长度
      • 16位标识
      • 8位生存时间(TTL)
      • 8位协议
      • 16位首部长度
      • 32位源ip&32位目的地址
    • 三、网络地址管理
      • 网段划分
      • 路由选择
    • 参考

一、IP协议感性认知

简介

P是整个TCP/IP协议族的核心,也是构成互联网的基础。

IP位于TCP/IP模型的网络层(相当于OSI模型的网络层),它可以向传输层提供各种协议的信息,例如TCP、UDP等;对下可将IP信息包放到链路层,通过以太网、令牌环网络等各种技术来传送。

IP所提供的服务大致可归纳为两类:

  • IP信息包的传送。

  • IP信息包的分割与重组。

协议版本:ipv4、ipv6【其中v为version】

特点

适应性强、简洁、可操作性强、可靠性较弱,可能会出现丢包、重复、乱序的情况。

二、IP协议报头结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YVyBHiKe-1677291085911)(F:\typora插图\image-20230224213151601.png)]

4位版本

声明ip协议版本,取值范围为{4,6}。这里边主要介绍ipv4。

4位首部长度

由于ip报头有一个选项的部分,是变长的,所以需要一个专门的变量标志ip报头有多长。

单位为4字节。2^4=16,即表示的范围为0*4~15*40~60

8位服务类型

服务类型,即Type Of Service,简称TOS。

实际上只有4位有效,这四位只有一位是1,其他都是0。

4位就表示ip协议的四种形态/四种工作模式。分别是最小延迟、最大吞吐量、最高可靠性、最小成本。

  • 最小延时:表示当前模式选择是包裹最快送达
  • 最大吞吐量:单次送的“快递”最多
  • 最高可靠性:丢的概率最小(但还是比不上TCP)
  • 最小成本:运送时消费最低。

注意:他们四个是互斥的,不可以同时选择!!具体选择哪个需要看业务要求

不过实际开发中因为它有一个默认的值,并且影响不太大,所以很少单独去设定。

16位总长度

它描述了一个ip数据包的长度。

总长度=ip数据头+载荷(一个完整的TCP/UDP数据包长度)

这里16位并不代表着一个ip数据包最大只能表示的范围是64kb?

答:是也不是,因为ip本身支持对包的拆分和组合,一个IP数据包携带载荷太长了,超过了64kb,就会在网络层进行数据进行拆分。把一个数据拆分成多个ip数据报,再分别发送,接收方再重新拼装。

这里拆分的单位也不一定就恰好是64kb.可能会更小。这里取决于数据链路层的情况(相当于取决于路况,拥挤了就少量多次嘛)

16位标识

它标识同一个数据拆成多个包的标识。

3位标志:结束标志(null)

13位片偏移:标识了多个包的先后顺序。

这两个物理量都是辅助拆包的字段。

8位生存时间(TTL)

TTL是Time To Live的缩写,是一个数据在网络上能够传输的最大时间。

它的单位并不是想当然的s/ms,而是次。

对于这个次,我们怎么理解呢?一个数包构造出来,会有一个初始的TTL值。这个数据报每经过网络转发设备一次,TTL的值都会减1。当这个值变成0时,还没到终点,那么计算机就认为它永远也到不了,可以丢了。

8位协议

描述了当前载荷部分内容属于哪个协议的TCP/UDP。

16位首部长度

只校验首部,因为载荷自身协议已经有校验和了~~

32位源ip&32位目的地址

这是ip协议报头中最重要的部分。在这部分,我们需要理清楚下边这几个问题:

  1. 点分十进制是什么?它有什么意义?

    在计算机中,源ip地址和32位目的ip是实打实的32位2进制数字。而我们通常看到的却不是这样的,我们看到的通常是类似这样61.185.187.142的一串数字。

    这其实就是我们所说的点分十进制,这是给我们看的,上边的32位2进制数字是给电脑看的。这是转成了分割开来的4个字节,每部分用0255即0FFH标识。

  2. IP地址相同了怎么办?

    我们总是期待每个设备的ip都不同。但是随着信息技术的发展,ip貌似是不够用的。这怎么说?智能手机、电脑的普及、物联网技术的发展,必然会导致大量的ip被分走。那么ip地址不够用貌似也不是太遥远的事情。

    那么我们应该怎么办呢?解决方案很多,例如:

    • 动态分配ip地址

      不用了回收ip地址。虽然这也是一种可行的办法,但是这样治标不治本,极端情况下,倘若某个时刻,全部的网络设备都想要连接网络,那恐怕也是不行的。

    • NAT网络转换

      什么是NAT网络转换

      NAT能够将私有IP对外通信时转为全局IP。也就是就是一种将私有IP和全局IP相互转化的技术方法:例如,很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP。全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的 。

      NAT技术是是路由器的一个重要功能 ,本质上是使用一个ip代表一批ip。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-grc0i19l-1677291085913)(F:\typora插图\image-20230225085532461.png)]

      NAT机制,可以有效的解决ip不够用的问题。但同时也带来了副作用:网络环境更加复杂 了……

    • ipv6

      它从根本上解决了ip不够用的问题。为什么这么说呢?我们来看数据:ipv6使用16个字节表示Ip地址,那也就是128个比特位,对应的ip地址范围就是0~2^128-1即42亿*42亿*42亿*42亿,显然这是一个极大的数据。

      虽然ipv6很好,但是现在我们全面还没有启动。同时ipv4和ipv6网络互不相同,也就是说他们不兼容。

      有一些网络设备,可以把ipv6和ipv4之间相互转换,近几年的路由器都是同时支持ipv4和ipv6的。

三、网络地址管理

网段划分

ip地址分为两部分:网络号和主机号。其中网络号标识局域网,主机号标识主机。

例如:192.168.0.10中,前三个字节表示的就是网路号,最后一个字节表示的就是主机号。

下边我们结合一个典型的局域网环境进行进一步说明:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BfkIitm8-1677291085913)(F:\typora插图\image-20230225094339185.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q5z5ChFO-1677291085914)(F:\typora插图\image-20230225094402808.png)]

网络号和主机号的划分都是可以动态调整的,并不一定前三个字节一定是网络号,最后一个是主机号。

那么究竟怎么划分呢?有没有什么可以参考的规则呢?

这里涉及到一个概念:子网掩码

子网掩码 (subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。. 子网掩码不能单独存在,它必须结合IP地址一起使用。. 子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。. 子网掩码是一个32位地址,左边全为1,右边全为0,1的部分描述了用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。子网掩码的设定必须遵循一定的规则。

对于家用设备而言,最常见的子网掩码就是255.255.255.0。

特殊的IP:

局域网:IP地址中的主机地址全部设成0即全都是网络号

广播地址:主机地址全部设成1,就是广播地址

环回地址:主要用于测试。127.*.*.*,通常是127.0.0.1

主机号位1,比如192.168.0.1,通常是网关IP,但是不绝对,都是可以配置的。

路由选择

IP协议这里还涉及到一个路由选择,这里很复杂,但面试不考,我们这里有个了解即可。

路由选择就是规划路径。因为网络环境非常复杂,所以路由器很难感知到网络的全貌,它最多认识附近。换而言之,数据报在转发的过程中,需要边走边问。

每个路由器都会保存一定范围设备的信息,保存这些内容的叫做路由表。每有一个ip包经过路由器就需要匹配路由表,看怎么走,如果有匹配项就接着走,若没有,会提供一个默认路径,但是若同时TTL变成0了,它就迷路了,这个包就丢了。

参考

路由器的LAN口和WAN口

IP协议

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

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

相关文章

【云原生】k8s的pod基本概念

一、资源限制 Pod 是 kubernetes 中最小的资源管理组件,Pod 也是最小化运行容器化应用的资源对象。一个 Pod 代表着集群中运行的一个进程。kubernetes 中其他大多数组件都是围绕着 Pod 来进行支撑和扩展 Pod 功能的,例如用于管理 Pod 运行的 StatefulSe…

小说网站测试

目录 通用测试点 登录页面测试 接口测试 UI测试 注册页面 接口自动化 UI测试 忘记密码页面 接口测试 UI测试 修改密码页面 进行接口测试 UI测试 主页页面测试 分类页面测试 ​查询页面测试 作者页面测试 阅读小说页面测试 书架页面测试 通用测试点 登录页面测试 接…

k8s-资源限制-探针检查

文章目录一、资源限制1、资源限制的使用2、reuqest资源(请求)和limit资源(约束)3、Pod和容器的资源请求和限制4、官方文档示例5、资源限制实操5.1 编写yaml资源配置清单5.2 释放内存(node节点,以node01为例…

计算机网络题库---错题本

(一)老生常谈 第一章: 1.什么是计算机网络?其主要功能是什么? 解答: 利用通信设备和线路,将分布在地理位置不同的、功能独立的多个计算机系统连接起来,以功能完善的网络软件实现网…

ChatGPT 开发人员教程 - 38种提高工作效率10倍的方法

未来的时代,又将是一个“洋枪洋炮”对“大刀长矛”的时代。在过去的十年里,传统行业在和经过IT改造的行业竞争时,无一例外地败北。08年金融危机前,全世界市值前十的公司,只有微软一家是IT企业。仅仅过去了十年&#xf…

文献阅读:Training language models to follow instructions with human feedback

文献阅读:Training language models to follow instructions with human feedback 1. 文献工作简介2. 模型优化设计3. 实验结果4. 总结 & 思考 文献链接:https://arxiv.org/abs/2203.02155 1. 文献工作简介 这篇文章是OpenAI在上年提出的一篇对于…

Go项目(商品微服务-1)

文章目录简介建表protohandler商品小结简介 商品微服务主要在于表的设计,建哪些表?表之间的关系是怎样的? 主要代码就是 CURD表和字段的设计是一个比较有挑战性的工作,比较难说清楚,也需要经验的积累,这里…

【Linux】工具(2)——vim

本期博客我们进入到Linux环境下vim工具的学习:一、vim是什么📌Vim是一个超级超级强大的文本编辑器。Vim及前身VI,历史悠久(可能比多数读者的年龄更大),经历了几十年的考验和发展。Vim全称叫Vi IMproved. 而…

Linux安装云原生网关Kong/KongA

目录1 概述2 创建服务器3 安装postgres4 安装kong5 安装node6 安装KONGA1 概述 Kong Kong是一款基于OpenResty(NginxLua模块)编写的高可用、易扩展的开源API网关,专为云原生和云混合架构而建,并针对微服务和分布式架构进行了特别…

蓝桥杯算法模板

模拟散列表拉链法import java.io.*; import java.util.*; public class a1 {static int n;static int N100003;static int[] hnew int[N];static int[] enew int[N];static int[] nenew int[N]; static int idx; static void insert(int x){int k(x%NN)%N;e[idx]x;ne[idx]h[k];…

终端软件架构说

目录 零:前言 一,基于服务的架构 二,基于多进程多线程的架构 三,以数据为中心的架构 四,类Android的分层架构设计 五,总结 零:前言 谈到架构,可能大家的第一感觉是信息系统的…

2023年三月份图形化三级打卡试题

活动时间 从2023年3月1日至3月21日,每天一道编程题。 本次打卡的规则如下: 小朋友每天利用10~15分钟做一道编程题,遇到问题就来群内讨论,我来给大家答疑。 小朋友做完题目后,截图到朋友圈打卡并把打卡的截图发到活动群…

Vue 3第三章:模板语法及指令介绍

文章目录1. 插值表达式1.1. 声明变量可直接在模板中使用,采用{{变量名称}}的方式1.2. 模板语法支持三元表达式1.3. 模板语法支持运算1.4. 模板语法支持方法调用2. 指令2.1. v-bind:用于绑定属性或动态绑定对象的值到元素上。2.2. v-if、v-else-if、v-els…

C#学习记录——接口的实现

一小部分知识精英依旧直面核心困难,努力地进行深度钻研,生产内容;而大多数信息受众始终在享受轻度学习,消费内容。如果我们真的希望在时代潮流中占据一席之地,那就应该尽早抛弃轻松学习的幻想,锤炼深度学习…

Burp Suite 常用模块简介

Burp Suite 常用模块分为 目标站点(target)模块 代理(proxy)模块 攻击(Intruder)模块 重放(Repeater) 模块 Target模块是对站点资源的收集,与站点各资源包发出和相应包的记录 Proxy模块是核心模块,可以拦截数据包发送往浏览器,进行修改后再…

网络协议分析(2)判断两个ip数据包是不是同一个数据包分片

一个节点收到两个IP包的首部如下:(1)45 00 05 dc 18 56 20 00 40 01 bb 12 c0 a8 00 01 c0 a8 00 67(2)45 00 00 15 18 56 00 b9 49 01 e0 20 c0 a8 00 01 c0 a8 00 67分析并判断这两个IP包是不是同一个数据报的分片&a…

Android JetPack之启动优化StartUp初始化组件的详解和使用

一、背景 先看一下Android系统架构图 在Android设备中,设备先通电(PowerManager),然后加载内核层,内核走完,开始检查硬件,以及为硬件提供的公开接口,然后进入到库的加载。库挂载后开…

Winform控件开发(16)——Timer(史上最全)

前言: Timer控件的作用是按用户定义的时间间隔引发事件的计时器,说的直白点就是,他就像一个定时炸弹一样到了一定时间就爆炸一次,区别在于定时炸弹炸完了就不会再次爆炸了,但是Timer这个计时器到了下一个固定时间还会触发一次,上面那张图片就是一个典型的计时器,该定时器…

【Java】Spring Boot 配置文件

文章目录SpringBoot 配置文件1. 配置文件的作用2. 配置文件的格式3. properties配置文件说明3.1 properties基本语法3.2 读取配置文件3.3 properties缺点分析4. yml配置文件说明4.1 yml基本语法4.2 yml使用进阶4.2.1 yml配置不同的数据类型及null4.2.1 yml配置的读取4.2.2 配置…

Python蓝桥杯训练:基本数据结构 [哈希表]

Python蓝桥杯训练:基本数据结构 [哈希表] 文章目录Python蓝桥杯训练:基本数据结构 [哈希表]一、哈希表理论基础知识1、开放寻址法2、链式法二、有关哈希表的一些常见操作三、力扣上面一些有关哈希表的题目练习1、[有效的字母异位词](https://leetcode.cn…