当前位置: 首页 > news >正文

javaEE 初阶 — 网络层中 IP 协议 的报文结构

文章目录

  • IP 协议报文
    • 4位版本号
    • 4位首部长度
    • 8位服务类型
    • 16位总长度(字节数)
    • 8位生存时间(TTL)与 8位协议
    • 16位首部校验和
    • 32位源 IP 地址与32位目标 IP 地址
      • 动态分配的 IP 地址
      • NAT 网络地址转换
      • IPv6

IP 协议报文


4位版本号


这里的 IP 协议是 IPV4 协议。(V4是版本号的意思)

此处的取值只有 4 和 6 ,当前介绍的是 IPV4 版本的。

4位首部长度


这里描述了 IP 报头多长。(IP报头是可变的)
报头中有一个选项部分,这是可变长的,也是可有可无的,此处的单位是 4 字节。

8位服务类型


这里说是 8 位,实际上只有 4 位有效,这 4 位中只有 1 位可以是 1 ,其他的都是 0 。
4 位 就表示 IP 协议的四种形态(四种工作模式


这里的四种形态就好比游戏中的角色根据不同的战斗,来改变形态以发挥到最大的战斗力。

四种工作模式:

最小延时、最大吞吐、最高可靠性、最小成本

实际开发中的时候就可以根据需要,来切换 IP 的模式已达到最优的效果。(其实实际上,开发中很少真的这样来设定)

主要是是因为这些东西是站在技术角度来处理的,而实际上技术上的定西一般都比较好解决,不好解决的是业务上的东西。
因为性能瓶颈往往是业务带来的。

16位总长度(字节数)


16 为总长度描述了了一个 IP 数据报的长度。(头+载荷)
这个长度减去前面的 IP 报头长度,剩下的就是载荷长度,也就是一个完整的 TCP/UDP 数据报长度。


这里的 16 位总长度是不是意味着一个 IP 数据报最大只能支持 64 KB?
是不是就相当于快递公司一次只能给你运 64 KG 的快递。

确实是有这个功能的,但是 IP 自身就支持对包的 拆分组装
比如说,在网上买了一个书架,快递公司会把书架给拆成多个部件,等到我收到所有部件后就会把它给组装出来。

一个 IP 数据报携带的数据载荷太长了,超过了 64 KB,就会在网络层针对数据进行拆分,把一个数据拆分成多个 IP 数据报,
再分别发送,接收方再重新拼装。

8位生存时间(TTL)与 8位协议


8 位生存空间指的是一个数据报在网络上能够传输的最大时间。

这个时间的单位不是 “秒”,而是 “次数”。
一个数据报构造出来会有一个初始的 TTL 数值(比如 32 或者 64 或者 128)
这个报每次经过一个路由器转发,TTL 的值就减一个。

如果一直减到 0 了,还没有到达目标,此时就认为这个包永远也到不了了,就可以丢弃了。

比如说寄快递的时候,如果这个收件地址压根不存在呢?

8位协议 描述了当前载荷部分内容是属于哪个协议的。

16位首部校验和


此处只需要针对首部进行校验,载荷部分(TCP/UDP数据报)自身已经有校验和了。

如果校验和不一样会直接丢弃, IP 不会负责重传,如果上层使用了 TCP ,TCP 就会在没收到 ACK 之后重传。

32位源 IP 地址与32位目标 IP 地址

此处看到的 IP 地址是 32 位的整数,而日常生活中见到的 IP 则是一串数字。

例如日常生活中看到的是:192.168.10.10

IP 地址我们期望的是每个设备都是不同的,但是 32 位数字只能表示 42亿9千多万个数字。
所以要使用这些数字表示全世界上所有的上网设备。比如智能手机、计算机、路由器…

采取 IPv4 版本,是无法表示世界上所有的网络设备的。

为了解决 IP 地址不够用的问题,想了很多办法:

1、动态分配的 IP 地址

2、NAT 网络地址转换

3、IPV6

动态分配的 IP 地址


动态分配 IP 地址,就是在网络设备使用的时候再分配 IP 地址,不使用的时候就不分配。
这样不仅提高了 IP 地址的利用率,还可以节约有限的资源。

但是这个方案没有从根本上增加 IP 地址,只是提高了利用率,属于治标不治本。

NAT 网络地址转换


这个方案的本质是使用一个 IP 代表一批设备,也是可以提高 IP 地址的利用率,只不过要使用端口号来区分不同的设备。


在 NAT 背景下,就把所有的 IP 地址分为两个大类:

1、内网 IP(私有 IP) :以 10.* 、172.16.* ~ 172.31.* 、192.168.* 开头的都是属于私网

例如:我的笔记本的 IPV4 地址是 192.168.21.1,这就是一个私网 IP。



2、外网 IP (公网 IP):除了私网剩下的都是公网。

NAT 要求公网 IP 必须是唯一的,而私网 IP 可以在不同的局域网中重复出现。

如果某个私网里的设备想要访问公网的设备,就需要对应的 NAT 设备(路由器),把 IP 地址进行映射,从而完成网络访问。
反之,公网的设备无法直接访问私网的设备,不同的局域网的私网设备无法直接访问相互访问。


举个例子


每个人相当于是一个独立的 IP 地址,快递员必须要知道这个人的 IP 地址,才能找到这个人。


NAT 技术就是把每个 IP 地址变成一个小区,快递员只需要把包裹交给门卫(相当于是 NAT),
门卫再将包裹交给住户。小区之内就是私网,小区之外就是公网


打开自己电脑的 cmd 键入 ipconfig,就可以看到自己电脑的 IP 地址,而且这个 IP 地址基本上都是私有 IP。

内网 IP 只要在局域网内部不重复即可,而不同局域网中则是允许重复的。




源 IP 地址就是 192.168.21.2目的 IP 就是 1.2.3.4
我的 IP 数据报经过 NAT(运营商路由器)设备之后,此时就会把我的 源 IP 给改了。

此时源 IP 就是 NAT 设备的 IP,61.185.187.142,而目的 IP 还是 1.2.3.4。
站在服务器的视角,看到的我的电脑的 IP 地址就是这个运营商路由器的地址。

当有其他的电脑接入运营商路由器的时候,去访问外部服务器都会被路由器替换成路由器自己的 外网 IP。


因此服务器只能拿到路由器的 IP ,不能拿到我的电脑的内网 IP 。
如果我的电脑不主动和服务器联系,服务器也就不知道我的端口,从而就无法主动找到我的电脑。


只要电脑是经过运营商路由器转发给服务器的,服务器看到的源 IP 就都一样。

如果是多个电脑同时访问同一个服务器,服务器的响应就会先发给路由器,路由器根据这些电脑不同的端口号来区分,决定先发给哪个设备。

NAT 机制能够有效地解决 IP 地址不够用的问题,但是带来的副作用就是网络环境更加的复杂了。

IPv6


IPV6 从根本上解决了 IP 不够用的问题,是使用 16 字节来表示的。

和 IPV4 不同,IPV6 的地址长度扩张到了 128 位,是前者的 4 倍。



上述图片就是一串 IPV6 的地址。

长度增加后原有的点分十进制也不够用了,于是 IPV6 改用十六进制表示。



上述图片就是改用的十六进制表示的。

IPv4 有 43 亿的地址,IPv6 的长度是它的 4 倍,是不是意味着 IPv6 的地址个数也是它的 4 倍,也就是 172 个地址?

答案是不是,IPv6 的地址空间是 2^128-1,IP地址 总数为 3402823… 总之是很多的。
多到可以给地球上的每粒沙子都分配一个 IP 地址。


IPV6 虽然地址个数足够使用,但是当前世界上仍然是 NAT + IPV4 + 动态分配 来进行网络组建的,
真正使用 IPV6 的地方非常少。


这主要是因为 IPV6 不是 IPV4 协议的升级,而是一个全新的协议。
两个协议之间无法兼容,如果要使用 IPV6 ,那全世界的互联网设备都要同步更换硬件设备,更换硬件设备需要花更多的资金。

相关文章:

javaEE 初阶 — 网络层中 IP 协议 的报文结构

文章目录IP 协议报文4位版本号4位首部长度8位服务类型16位总长度(字节数)8位生存时间(TTL)与 8位协议16位首部校验和32位源 IP 地址与32位目标 IP 地址动态分配的 IP 地址NAT 网络地址转换IPv6IP 协议报文 4位版本号 这里的 IP 协…...

iOS swift UICollectionView

文章目录1.纯代码自定义UICollectionViewCell2.禁止滑动(弹簧效果)3.UICollectionView的长按拖动2.在一个控制器中放两个UICollectionView或者UITableView,代理方法要怎么写1.纯代码自定义UICollectionViewCell import UIKitclass NewDeviceBottomColle…...

计算机三级数据库 填空题汇总

计算机三级 数据库 IDEF0需求建模方法由箭头和(活动/方框/矩形)两种元素构成。、从安全性角度考虑,防火墙技术是用来保证数据库应用系统的(网络)环境安全的。在UML的状态机图中,状态之间的转移是由&#x…...

【Java学习】初识Java

JavaSEJava初识1. Java简介2.Java环境的安装与配置3. 开发第一个Java程序Java初识 学前疑问:(带着疑问去学习,在学习中自行探索答案) Java是什么?能做什么?发展前景如何?需要学习哪些内容&…...

LabVIEW网络服务安全

LabVIEW网络服务安全如何保护Web服务?当许多人考虑安全性时,他们会考虑加密、用户ID和密码。用户ID和密码用于授权(告诉目标谁在发出请求)。加密保护客户端和服务器之间的通信流量,以便未经授权的个人无法拦截和读取发…...

基于MaixBit(K210芯片)的图像识别猜拳手势博弈装置

本文介绍了一种基于嵌入式平台开发的图像识别部署装置,其主要功能包括实现机器与人的“猜拳博弈”,其组成分为三个部分:手势检测数据集图像识别模型训练模型格式部署maixbit开发板部署手势检测数据集:本项目的数据集包括三种标签&…...

leetcode 41~50 学习经历

leetcode 41~50 学习经历41. 缺失的第一个正数42. 接雨水43. 字符串相乘44. 通配符匹配45. 跳跃游戏 II46. 全排列47. 全排列 II48. 旋转图像49. 字母异位词分组50. Pow(x, n)小结41. 缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的…...

SQL注入原理及漏洞利用(入门级)

文章目录一、什么是SQL注入漏洞?二、 SQL查询语句三、SQL注入分类数字型(整型)注入字符型注入搜索型注入四、SQL注入漏洞形成原因一、什么是SQL注入漏洞? 攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中…...

2023/2/26 Vue学习笔记 配置代理解决跨域[CORS ]的问题

利用vue的脚手架巧妙的解决ajax跨域的问题 1 我们首先利用springboot服务搭建 注意这里引出了跨域[CORS ]的问题: Access to XMLHttpRequest at http://localhost:5000/getUserInfo from origin http://localhost:8080 has been blocked by CORS policy: No Access-Control-A…...

算法练习--深拷贝与浅拷贝

🎀个人主页:努力学习前端知识的小羊 感谢你们的支持:收藏🎄 点赞🍬 加关注🪐 文章目录算法地址算法题解分析深拷贝与浅拷贝在练习算法时,遇到了深拷贝与浅拷贝的问题,于是就了解了一…...

Wireshark “偷窥”浏览器与服务器三次握手

本文使用的是Wireshark 4.0.3, Java 11 编写简易服务器,客户端使用Chrome浏览器移动端开发或是前、后端开发又或是高大上的云计算都脱离不了网络,离开了网络的计算机就是一个孤岛,快速上手开发、背面试八股文固然有些急功近利,但确…...

基于stm32温湿度采集平台开发

基于stm32温湿度采集平台开发这里记录一下自己以前课设报告,但是论文中图片和文字、公式太多了,懒得粘贴了,需要完整的可q我963_160_156,也可在微信公众号 *高级嵌入式软件* 里回复 *温湿度* 查看完整版文章摘 要关键词第一章 绪论…...

单机模拟kafka分布式集群(演示生产、消费数据过程)

用单机搭建kafka伪分布式集群,其实集群的概念并不复杂 先说明一下,以下的每个服务启动后都需要新开一个终端来启动另外的服务(因为是集群,自然会用多个终端) 首先下载kafka 提取码:dvz4 或者直接去官网下载kafka_2.11-1.0.0.tgz t…...

办公室人员离岗识别检测系统 yolov7

办公室人员离岗识别检测系统根据yolov7网络模型深度学习技术,办公室人员离岗识别检测算法能够7*24小时全天候自动识别人员是否在岗位。YOLOv7 在 5 FPS 到 160 FPS 范围内,速度和精度都超过了所有已知的目标检测器,并在V100 上,30…...

Android从屏幕刷新到View的绘制(一)之 Window、WindowManager和WindowManagerService之间的关系

0. 相关分享 Android从屏幕刷新到View的绘制(一)之 Window、WindowManager和WindowManagerService之间的关系 Android从屏幕刷新到View的绘制(二)之Choreographer、Vsync与屏幕刷新 1. 相关类 WindowManagerService&#xff0c…...

#多源数据融合#:HSI与Lidar

Lidar数据与HSI数据融合应该注意的问题 融合激光雷达(lidar)数据和高光谱数据可以提高地物特征的识别和分类准确性。以下是一些融合这两种数据的注意事项: 数据预处理 由于激光雷达数据和高光谱数据的特点不同,需要对两种数据进…...

android 权限控制与进程隔离

每次介绍说是做系统安全的,面试和领导首先就是说配selinux,实在很无语。虽然权限控制是安全很重要一环。 linux的进程就是系统运行中的程序(process),是正在执行的一个程序或者命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。Linux环境下…...

链表(一):移除链表元素、设计链表等力扣经典链表题目

203.移除链表元素相关题目链接:力扣 - 移除链表元素题目重现给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。思路链表的删除操作如上图所示,我们需要先找到要删除的…...

计算机网络 第4章 作业1

一、选择题 1. 由网络层负责差错控制与流量控制,使分组按序被递交的传输方式是_________(C) A.电路交换 B.报文交换 C.基于虚电路的分组交换 D.基于数据报的分组交换 2. TCP/IP 参考…...

Redis-Java代码使用示例

在我之前的项目中,使用Redis是我们团队自己封装了一个Redis操作类,但是这只是在Spring提供的RedisTemplate上做了一层封装而已,当时使用不是很熟练,都是一边在网上查资料,一边使用;这篇文章会介绍两种使用方…...

acwing3485最大异或和(trie树,贪心)

给定一个非负整数数列 a,初始长度为 N。 请在所有长度不超过 M 的连续子数组中,找出子数组异或和的最大值。 子数组的异或和即为子数组中所有元素按位异或得到的结果。 注意:子数组可以为空。 输入格式 第一行包含两个整数 N,M。 第二行…...

EasyRecovery16免费的电脑的数据恢复工具

常见的数据恢复有两种方式,第一种方式是找别人恢复,按照市场价来说,数据恢复的价格每次在100-500之间,但这种方式容易使自己设备上的隐私资料泄露出去,不安全。 另一种方式则是自己学会数据恢复的方法,有问…...

银行数字化转型导师坚鹏:平安银行数字化转型—橙E网战略研究

平安银行对公业务数字化转型案例—橙E网战略研究课程背景: 很多银行存在以下问题:不清楚银行对公业务数字化转型能否成功?不知道其它银行对公业务数字化转型的实际做法? 课程特色:用实战案例解读平安银行对公业务…...

tun驱动之open

tun驱动对应的设备文件是:/dev/net/tun,其详细信息如下: crw-rw-rw- 1 root root 10, 200 2月 26 08:05 tun 主次设备号的定义如下: #define MISC_MAJOR 10 #define TUN_MINOR 200 由于tun驱动属于misc设备驱动,因此用…...

计算机网络体系结构

计算机网络体系结构是指计算机网络中各个层次和功能组成的结构体系,它定义了计算机网络中各层次之间的协议和接口,以实现不同类型、不同规模、不同性能的计算机之间的互联和通信,同时提供各种网络服务和应用。计算机网络体系结构通常被分为多…...

基础夯实,字节内部总结240道算法LeetCode刷题笔记,直呼太全

1、什么是算法算法(algorithm,[ˈlɡərɪəm],计算程序):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结…...

Three.js使用WebWorker进行八叉树碰撞检测

经过一番探索后还是采用了整个碰撞检测都交给worker来做 原因 如果是小的模型还是不需要这么做的 js线程足够处理构建时的开销 步骤 将需要被检测的物体集合转换成可以背worker接收的结构化数据发送给worker worker将结构化的数据转换成有效的Three元素集合并对其构建八叉树fr…...

【教程】Notion笔记多平台设置中文显示

这个笔记软件界面挺好看,惊艳到了。 目录 网页版 桌面端 Windows版 Mac端 安卓端 网页版 直接安装这个插件即可,Chrome/Edge适用:Notion中文版 桌面端 都要去这个github下载语言包,用于替换文件:https://github.c…...

[牛客Hot101]链表篇

文章目录1.翻转链表2.链表内指定区间翻转3. 链表中的节点每k个一组翻转4. 合并两个排序的链表5. 合并k个排序的链表6. 判断链表是否有环7. 链表中倒数第k个节点8. 删除链表中的倒数第k和节点9. 两个链表的第一个公共节点10.链表的入环节点11. 链表相加(二&#xff0…...

Vue3 核心模块源码解析(上)

Vue3相比大家也都有所了解,即使暂时没有使用上,但肯定也学习过!Vue3是使用TS进行重写,采用了MonoRepo的管理方式进行管理,本篇文章我们一起来看看 Vue3的使用,与Vue2有什么区别,以及我们该如何优…...

wordpress整体搬家/自媒体seo优化

基于MPP框架开发了demo展示应用,方案数据流如下图所示,简单说明一下. 1.支持一路sensor输入,四路输出. 2.第一路VIPP0输出YUV大小为1920*1080. 编码为H264main profile大小的压缩BitStream存盘。 3.第二路预览,源分辨率1920*10…...

容桂免费网站建设公司/广州seo排名外包

基本上,我需要使我的程序能够为我创建多个(无限的)变量,我仍然能够通过代码使用操纵,而不需要定义它们。在我想用一个字母和一个数字作为变量名,比如a1,然后让程序创建新的变量,只需在数字上加1。因此&…...

接单类型网站建设费用/网站制作公司有哪些

我试图在prompt()框中显示“大于正常”的文本量 . 在Internet Explorer 11中调用javascript prompt()函数时,我的大部分文本都被隐藏了 . 它似乎只支持2行文本 . Chrome,Firefox和Opera似乎运行良好 . 这似乎只是一个IE问题 .prompt("Lorem Ipsum i…...

wordpress付费站内搜索/软文发稿系统

先用fdisk -l 命令查看分区1 ?! I& e8 L2 ^ 挂载ntfs分区:& b* a1 c/ }8 o 假设/dev/hda1是Windows分区(NTFS)的位置,而要挂载的目录是:/media/windows :( S" z. g4 p/ t. k2 r4 z8 k b1 }" t. k, V3 K, E sud…...

视频网站切片怎么做/nba西部最新排名

原标题:这款加速器可以帮你免费解决LOL手游下载、账号注册、更新慢的一系列问题不少小伙伴们已经开玩英雄联盟手游了,由于国服目前还没有动静,现在能玩的都是海外服,如此一来就会产生一个问题,就是手游版LOL更新慢怎么…...

临清网站制作/扬州网络优化推广

上一篇文章简单的实现了ORM(对象关系模型),这一篇文章主要实现简单的MySQL数据库操作。 想要操作数据库,首先要建立一个数据库连接。下面定义一个创建数据库连接的函数,得到一个连接叫做engine。 def create_engine(us…...