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

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,调试主进程方案

官网教程地址&#xff1a;https://www.electronjs.org/zh/docs/latest/tutorial/debugging-main-process 我只能说官网太看得起人了&#xff0c;整这么简易的教程…… 命令行开关 第一步还是要按要求在我们的package.json里加上端口监听&#xff1a;–inspect5858 我的命令…...

2W字正则表达式基础知识总结,这一篇就够了!!(含前端常用案例,建议收藏)

正则表达式 (Regular Expression&#xff0c;简称 RE 或 regexp ) 是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&#xff08;称为"元字符"&#xff09;正则表达式使用单个字符串来描述、匹配一系列匹…...

自学web前端觉得好难,可能你遇到了这些困境

好多人跟我说上学的时候也学过前端&#xff0c;毕业了想从事web前端开发的工作&#xff0c;但自学起来好难&#xff0c;快要放弃了&#xff0c;所以我总结了一些大家遇到的困境&#xff0c;希望对你会有所帮助。 目录 1. 意志是否坚定 2. 没有找到合适自己的老师 3. 为了找…...

ASEMI中低压MOS管18N20参数,18N20封装,18N20尺寸

编辑-Z ASEMI中低压MOS管18N20参数&#xff1a; 型号&#xff1a;18N20 漏极-源极电压&#xff08;VDS&#xff09;&#xff1a;200V 栅源电压&#xff08;VGS&#xff09;&#xff1a;30V 漏极电流&#xff08;ID&#xff09;&#xff1a;18A 功耗&#xff08;PD&#x…...

[NetBackup]客户端安装后server无法连通client

client name处填写客户端主机名&#xff0c;server to use for backups and restores处填写server端名字&#xff0c;与hosts文件内保持一致&#xff1b;source client for restores处填写client主机名&#xff0c;与server端hosts文件中保持一致&#xff0c;与主机实际名称保持…...

黑马Java后端项目实战--在线聊天交友

【课程简介】 越来越多的系统都有消息推送的功能&#xff0c;如聊天室、邮件推送、系统消息推送等&#xff1b; 要实现消息推送就需要服务端在数据有变化时主动推送消息给客户端&#xff0c;本次课程将带大家使用websocket实现消息推送。 【主讲内容】 1.方法&#xff1a;如…...

【实战系列 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++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、抽象工厂模式是什么&#xff1f; 抽象工厂模式是一种创建型的软件设计模式&#xff0c;该模式相当于升级版的工厂模式。 如果…...

Kotlin新手教程一(Kotlin简介及环境搭建)

目录一、 什么是Kotlin&#xff1f;二、为什么要使用Kotlin&#xff1f;三、使用IntelliJ IDEA搭建Kotlin四、Kotlin使用命令行编译一、 什么是Kotlin&#xff1f; Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言&#xff0c;它也可以被编译成为 JavaScript 源代码&…...

【虚拟仿真】Unity3D打包WEBGL实现全屏切换

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 今天实现Unity3D打包WEBGL后实现按钮点击全屏和退出 全屏的实现…...

java对象内存结构分析与大小计算

java对象内存结构Java对象保存在堆中时&#xff0c;由三部分组成&#xff1a;对象头&#xff08;object header&#xff09;&#xff1a;包括了关于堆对象的布局、类型、GC状态、同步状态和标识哈希码的基本信息。所有java对象都有一个共同的对象头格实例数据&#xff08;Insta…...

RabbitMQ学习(七):交换器

〇、前言在之前的内容中&#xff0c;我们创建了一个工作队列。我们假设的是工作队列背后&#xff0c;每个任务都恰好交付给一个消 费者(工作进程)。在今天的内容中&#xff0c;我们将做一些完全不同的事情——我们将消息传达给多个消费者。这种模式 称为 “发布/订阅”。为了说…...

cmd命令大全

文章目录变量输入输出逻辑命令符控制语句函数注释变量 在批处理中&#xff0c;变量全部是弱类型的&#xff0c;通常可以当做字符串处理 1.初始化定义 set varthis a var 2.获取变量值 %var% 3.链接 set varcat%var1%%var2% 4.截取 %var:~n,m% n是起点&#xff0c;m是长度&…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...

算法250609 高精度

加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...