IP协议详解
目录
前言:
IP协议
提出问题
解决方案
地址管理
子网掩码
路由选择
小结:
前言:
IP协议作为网络层知名协议。当数据经过传输层使用TCP或者UDP对数据进行封装,然后当数据到达网络层,基于TCP或UDP数据包继续进行封装。逐级向下封装直到物理层,通过网卡把数据发送出去。
IP协议

解释:
1)4位版本号:此时的取值只有两个(4,6)IPV4 ,IPV6。
2)4位首部长度:描述了IP报头有多长,单位4字节。报头中的选项部分是变长,可有可无的。
3)8位服务类型
说是8位其实只有4位有效。这4位中只有一位可以是1其他都是0,4位就表示IP协议的4种工作模式。(最小延时,最大吞吐量,最高可靠性,最小成本)
最小延时:数据发送的最快(耗时最短)。
最大吞吐量:单位时间内可发送的数据最多。
最高可靠性:丢包概率最小。
最小成本:数据发送需要的成本最小。
4)16位总长度
描述了IP数据报的长度(头 + 载荷)。这个长度 - IP报头长度 = 完整TCP/UDP数据报长度。16位最大只有64k,那么IP最大只能发送64k的数据吗?
如果IP数据报超过了64k,就会在网络层针对数据进行拆分。把一个数据拆成多个小于64k的数据报,再分别发送。接收方在网络层针对载荷进行拼接。
5)16位标识:同一个数据拆成多个包,标识都是一样的。(5,6,7都是辅助拆包/组包提供的)
6)3位标志:拆包的结束标志。
7)13位片偏移:标识了多个包的先后顺序。
8)8位生存时间:一个数据在网络上能够传输的最大时间(单位:次数)。一个数据构造出来会有一个TTL初值,每经过一个路由器转发 TTL - 1。如果TTL为0,则直接丢弃。
9)8位协议:描述了载荷部分属于哪一个协议(TCP/UDP)。
10)16位首部校验和:此处只需要对首部进行校验,载荷已经在传输层校验过了。如果校验失败直接丢弃,IP不负责重传。
11)32位源IP地址,32位目的IP地址:一次通信中的五元组之二。这里的IP地址是32位的整数,但我们平时看到的是一串数字。使用 “点分十进制” 的方式转换(每个字节为一组,用十进制表示,共4个字节)。
提出问题:
32位只能表示32亿9千万个数字。对于全球可以上网的设备可以说是非常小的,就会造成IP地址不够用。
解决方案
1)动态分配IP地址
动态分配IP地址(可以省下一批ip)。电脑联网就动态的分配ip地址,那么同一时间关机或者没联网的设备就不需要ip地址了。
2)NAT网络地址转换
NAT网络地址转换,本质是使用一个IP代表一批设备,使用端口号区分。
在NAT背景下将IP地址分为两类:
1.内网IP(私有IP),10.*;172.16.* -- 172.31.*;192.168.*
2.外网IP(公网IP),剩下的都是公网IP。
注意:
NAT要求公网IP必须是唯一的,内网IP可以在不同局域网重复出现。
如果某个内网设备想要访问公网设备,就需要通过NAT(路由器)将内网IP转换为公网IP,完成访问。公网设备无法直接访问内网设备。不同局域网的内网设备无法直接访问。

注意:
服务器接收的数据,所看到的源IP都是运营商路由器对内网设备的IP的转换。
服务器响应数据,会先发给运营商路由器,然后根据设备的不同端口号来区分,要发给哪个设备。
因此服务器只是拿到路由器的IP,不能拿到设备的内网IP。如果我的设备不主动和服务联系,那么服务器就不清楚我的端口,就无法主动找到我的设备。
3)IPV6
IPV6使用了16个字节表示IP地址(这个数字让全世界每一粒沙子都有IP也完全够用),从根本上解决了IP地址不够用的问题。
地址管理
网络号:标识网段,保证相互连接的两个网段具有不同的标识。(通俗说就是标识两个不同的局域网)
主机号:标识主机,同一网段内所有主机都有相同的网段号,但必须有不同的主机号。
注意:
内网IP地址由网络号和主机号组成。网络号用来区分不同的局域网(相邻的局域网网络号必须不同),主机号用来区分同一个局域网下不同的主机。
路由器都是有两个IP,分别属于不同的网段,用来连接两个局域网。
子网掩码
用来区分IP地址哪部分是网络号,哪部分是主机号。
例如:255.255.255.0。二进制为1的部分描述了多少位是网络号,0的部分就是主机号。
路由选择
路由选择就是规划网络传输的路径。
核心机制:
问路的方式。每个路由器都会保存周围的设备(路由表),每经过一个路由器就会询问接下来怎么走,路由器就会查找路由表。如果有匹配的就按照路由器提供的走。如果没有匹配的,路由器会默认提供一个路径,大体方向都是正确的。
小结:
理解网络传输的过程,还有一些历史背景,会使我们对于网络有更深层次的认识。
相关文章:
IP协议详解
目录 前言: IP协议 提出问题 解决方案 地址管理 子网掩码 路由选择 小结: 前言: IP协议作为网络层知名协议。当数据经过传输层使用TCP或者UDP对数据进行封装,然后当数据到达网络层,基于TCP或UDP数据包继续进行…...
webpack5 基础配置
在开发中,我们会使用 vue、react、less、scss等语法进行开发项目,但是浏览器只能识别 js、css,或者说在js中使用了es6中的import 导入 这时候也需要打包工具去转换成浏览器可以识别的语句。 一、使用webpack 1.初始化package.json npm i…...
IDEA入门安装使用教程
一、背景 作为一个Java开发者,有非常多编辑工具供我们选择,比如Eclipse、IntelliJ IDEA、NetBeans、Visual Studio Code、Sublime Text等等,这些有免费也有收费的,但是就目前市场占比来说普遍使用Eclipse和IntelliJ IDEA这两款主…...
Lambda表达式使用及详解
一 Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加简洁。 Lambda表达式的使用场景:用以简…...
JAVA练习52-打家劫舍
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-打家劫舍 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 2月16日练习内容 提…...
简单谈一谈幂等测试
1、什么是幂等测试 幂等是一个抽象的概念,在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同,即多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。幂等测试,则主…...
typescript复习笔记
数组类型-限定每一项的类型 //写法一 const arrNumber: number[] [1, 2, 3] const arrString: string[] [a, b, c] //写法二 const arrNumber2: Array<number> [1, 2, 3] const arrString2: Array<string> [a, b, c]联合类型 符号是 | //数组可以存放字符串或…...
webstorm开发electron,调试主进程方案
官网教程地址:https://www.electronjs.org/zh/docs/latest/tutorial/debugging-main-process 我只能说官网太看得起人了,整这么简易的教程…… 命令行开关 第一步还是要按要求在我们的package.json里加上端口监听:–inspect5858 我的命令…...
2W字正则表达式基础知识总结,这一篇就够了!!(含前端常用案例,建议收藏)
正则表达式 (Regular Expression,简称 RE 或 regexp ) 是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")正则表达式使用单个字符串来描述、匹配一系列匹…...
自学web前端觉得好难,可能你遇到了这些困境
好多人跟我说上学的时候也学过前端,毕业了想从事web前端开发的工作,但自学起来好难,快要放弃了,所以我总结了一些大家遇到的困境,希望对你会有所帮助。 目录 1. 意志是否坚定 2. 没有找到合适自己的老师 3. 为了找…...
ASEMI中低压MOS管18N20参数,18N20封装,18N20尺寸
编辑-Z ASEMI中低压MOS管18N20参数: 型号:18N20 漏极-源极电压(VDS):200V 栅源电压(VGS):30V 漏极电流(ID):18A 功耗(PD&#x…...
[NetBackup]客户端安装后server无法连通client
client name处填写客户端主机名,server to use for backups and restores处填写server端名字,与hosts文件内保持一致;source client for restores处填写client主机名,与server端hosts文件中保持一致,与主机实际名称保持…...
黑马Java后端项目实战--在线聊天交友
【课程简介】 越来越多的系统都有消息推送的功能,如聊天室、邮件推送、系统消息推送等; 要实现消息推送就需要服务端在数据有变化时主动推送消息给客户端,本次课程将带大家使用websocket实现消息推送。 【主讲内容】 1.方法:如…...
【实战系列 2】Yapi接口管理平台Getshell-Linux后门权限维持与痕迹清除
文章目录 前言一、网站主页到Getshell二、SSH软链接后门三、Linux权限维持 --隐藏踪迹3.1 隐藏远程SSH登陆记录3.2、ssh软链接后门连接失败的原因以及解决办法3.3、隐藏踪迹-痕迹清楚3.3.1、隐藏历史操作命令3.3.2、隐藏文件/文件夹3.3.3、修改文件时间戳3.3.4、隐藏权限3.3.5、…...
设计模式之抽象工厂模式(C++)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 一、抽象工厂模式是什么? 抽象工厂模式是一种创建型的软件设计模式,该模式相当于升级版的工厂模式。 如果…...
Kotlin新手教程一(Kotlin简介及环境搭建)
目录一、 什么是Kotlin?二、为什么要使用Kotlin?三、使用IntelliJ IDEA搭建Kotlin四、Kotlin使用命令行编译一、 什么是Kotlin? Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,它也可以被编译成为 JavaScript 源代码&…...
【虚拟仿真】Unity3D打包WEBGL实现全屏切换
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 今天实现Unity3D打包WEBGL后实现按钮点击全屏和退出 全屏的实现…...
java对象内存结构分析与大小计算
java对象内存结构Java对象保存在堆中时,由三部分组成:对象头(object header):包括了关于堆对象的布局、类型、GC状态、同步状态和标识哈希码的基本信息。所有java对象都有一个共同的对象头格实例数据(Insta…...
RabbitMQ学习(七):交换器
〇、前言在之前的内容中,我们创建了一个工作队列。我们假设的是工作队列背后,每个任务都恰好交付给一个消 费者(工作进程)。在今天的内容中,我们将做一些完全不同的事情——我们将消息传达给多个消费者。这种模式 称为 “发布/订阅”。为了说…...
cmd命令大全
文章目录变量输入输出逻辑命令符控制语句函数注释变量 在批处理中,变量全部是弱类型的,通常可以当做字符串处理 1.初始化定义 set varthis a var 2.获取变量值 %var% 3.链接 set varcat%var1%%var2% 4.截取 %var:~n,m% n是起点,m是长度&…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
