【网络原理5】IP协议篇

news2025/1/11 2:15:18

目录

IP协议报头 

4位版本号

4位首部长度

8位服务类型(TOS)

16位总长度 

IP拆包

 16位标识、3位标志、13位片偏移​编辑

8位生存时间(TTL)

8位协议

16位首部校验和 

网络地址管理

32位源ip&32位目的ip 

     方案一:动态分配ip地址

     方案2:NAT网络地址转换(使用一个ip代表一批设备)

 方案3:使用ipv6,从根本上解决IP不够用的问题

网络号&主机号

一个两个不同的局域网之间的关系(图解) 

子网掩码

 几个特殊的IP

 回环IP:

广播地址:主机地址全为1的IP:(192.168.0.255)

主机地址为十进制1的IP(网关IP)

 主机地址为0的IP

 路由地址选择

 IP协议其实是工作在网络层的协议。

 关于什么是网络层,已经在这一篇文章当中提到了。

初识网络:IP、端口、网络协议、TCP-IP五层模型_革凡成圣211的博客-CSDN博客TCP/IP五层协议详解https://blog.csdn.net/weixin_56738054/article/details/128666970?spm=1001.2014.3001.5501 它主要负责地址管理路由器选择


IP协议报头 

下面,来一张图看看ip报文,下面将说几个常见的属性


4位版本号

       版本号这里的取值只有两个,一个是4另外一个是6,分别代表ipv4ipv6

       本文章目前讨论的就是ipv4


4位首部长度

       描述了ip报头有多长。IP报头和TCP报头一样,也是包含了选项部分的长度,选项的长度是变化的,最短可以为0,也就是可有可无的。

       4位首部长度的单位也是"4字节"。当首部长度位15的时候,可以经过下面的运算得出IP报头长度和选项长度。

 


8位服务类型(TOS)

  这里说是8位,其实实际上只有4位,对应4种形态

  这4位当中,只有1位可以表示1,其他都是0。

  这4种形态分别是:

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

  实际开发当中就可以根据需要,来切换IP的模式,达到最优的效果。


16位总长度 

 描述了一个IP数据包的长度。一个IP数据包,包含了两部分:

 IP报头+IP载荷。这两个部分合起来,就是一个IP报文的总的长度。

 所以:IP载荷部分长度=16位总长度-4位首部长度


IP拆包

       IP报头当中有一个属性——16位首部长度。这难道代表,IP数据报的最大长度就是64KB吗?

       并不是的,当一个IP报文的总长度如果达到了64KB之后,就会在网络层进行拆包,把一个数据拆成多个IP数据报,然后发送给数据链路层。各自以数据帧的方式进行传送

       在接收方接收这个IP报文的时候,会再次把这两个IP数据报进行解析,然后再合并成一个IP报文传送给接收方传输层。

       这就好像一个电梯的载重是9吨,如果一个货物重10吨,那么就只能分成多次进行运送了。

       然后运送到目标楼层之后,在进行拼装组合。 

       和UDP不一样的是,UDP虽然也有大小限制(64KB),但是一旦超过了这个限制,只能由

程序员手动拆包。并不像IP协议一样可以自动拆包


 16位标识、3位标志、13位片偏移


8位生存时间(TTL)

一个数据报在网络上能够传输的最大时间。这个时间的单位不是"秒",而是次数

当初始化之后,在链路上面进行传输的时候,每经过一个路由器,TTL的值就-1。

       如果TTL的值减为0之后,还没有到达目标,此时就认为这个数据永远也到达不了了,于是这个IP报文就会被丢弃。

 


8位协议

       8位协议,指明了此处的IP协议的载荷当中的传输层协议是什么,例如指明了是TCP还是UDP的协议。


16位首部校验和 

仅仅根据首部的特点计算出它的校验和,并不需要根据整个ip报头再计算一次。

原因:IP载荷已部分已经有对应的协议校验过了,无需再次校验。

如果校验和不一致,直接丢弃 


IP地址功能 

 IP有两个功能,一个是网络地址管理,另外一个是路由器选择。

下面,首先谈一下IP是怎样进行网络地址管理的

网络地址管理

32位源ip&32位目的ip 

       此处看到的IP地址是一个32位的整数。但是,我们平时看到的ip地址好像就是a.b.c.d这样的格式的数字。

       我们一般期待,每一个网络设备的ip地址都不一样。32位,也就是代表了42亿9千万个数字。

       但是,如果放在整个世界的网络设备当中,42亿9kw这个数字远远不够用


       为了解决这个问题,于是就有了如下的解决方案:

     方案一:动态分配ip地址

      此时,哪些设备需要网络,哪一些设备就连上网络。但是,这是一个治标不治本的方式。无法彻底解决ip地址不够用的问题。


     方案2:NAT网络地址转换(使用一个ip代表一批设备)

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

       大类1:内网IP(私有ip)

        什么样的IP,可以代表内网IP呢?

        有以下这三种IP:

        ①10.*开头的IP地址;

        ②172.16.*~172.31.*;

        ③192.168.*

        只要IP地址属于这三类当中的某一类,那么就一定属于私网IP

       大类2:外网IP(公网IP)

除了大类1范围以外的IP地址,都属于公网IP

      NAT要求:公网IP必须是唯一的,不可以重复。

      私网IP可以在不同的局域网内重复出现,但是不可以在同一个局域网内重复

       如果某个私网想要访问公网,那么就需要使用NAT(路由器)把IP地址进行映射,从而完成网络访问。同样地,不同局域网下面的设备,也无法直接访问。

       同一个路由器下面的所有设备的公网ip都是一样的。

使用IPV4+NAT+动态分配的技术,是目前来说比较广泛使用的方式。 

       小明说:我的电脑的IP地址是192.168.2.3,

       小红说:我知道你的电脑的IP啦,我可以黑你!

       小明:你只知道我的私网IP,无法知道我的公网IP,也就是我家的路由器的IP。就算你知道了我家路由器的IP,也只能黑我的路由器呀,哈哈。你永远黑不到我的电脑噢~


 方案3:使用ipv6,从根本上解决IP不够用的问题

    对于ipv4,它使用的是32位,也就是4字节来表示ip地址。

   下图是ipv4的

      关于ipv6,它是使用了128位,也就是16字节来表示ip地址。

      128位,可以表示的无符号范围为(0,2^128-1)。这一个数字(大约是42亿的4次方),可以表示足够多的ip地址了。


网络号&主机号

如果一个ip地址为192.168.10.1(本主机的私网地址)。

那么,网络号为:192.168.10(也就是前三位),主机号为最后一位:1。

那么也就意味着,一个局域网下面的所有网络设备,它们的网络号都是192.168.10


一个两个不同的局域网之间的关系(图解) 

同一个路由器都拥有两个接口,一个是WAN口(连接其中一个局域网);

另外一个是LAN口(连接另外一个局域网),LAN口一般用于连接和这个路由器相连的网络设备。

也就是LAN口的网络号和各个主机的网络号一致。


 ②路由器连接的另外一个光猫:

 这个光猫的LAN口编号和路由器的WAN口编号处于同一个局域网内部。


子网掩码

如上图,一个子网掩码就是255.255.255.0;

子网掩码也是一个32位的整数:如上图,表示就是:1111 1111 1111 1111 1111 1111 0000 0000

左侧都是1,右侧都是0。1的部分描述了IP地址的网络号最多有多少位。

255.255.255就是网络号的最大值了。


 几个特殊的IP

 回环IP:

      127.*的IP地址为本机回环IP,通常是127.0.0.1,这个IP地址通常用于测试本机的应用程序。例如手写一个客户端——服务端程序的时候,用于测试是否可以连通网络。


广播地址:主机地址全为1的IP:(192.168.0.255)

       主机地址为一个ip地址最后一个.往后的部分。例如在上面的IP地址当中,255就是这个IP地址的主机地址,255的用二进制表示就是11111111

            这里的全为1并不是十进制的1,而是二进制的1。

       如果使用UDP协议往这个地址上面发送数据报,那么整个局域网的所有设备都可以收到。


主机地址为十进制1的IP(网关IP)

当一个通信设备的IP地址为192.168.0.1.......或者192.168.3.1

也就是主机号为1的时候,这个通信设备就通常是一个网关

网关可以理解为一个局域网的入口

例如下图当中的LAN口就是一个局域网是入口:


 主机地址为0的IP

  例如123.45.67.0

  主机IP为0,说明这个IP地址代表了一个局域网的IP。


 路由地址选择

  这是IP地址的第二个功能。

  每一个路由器都会保存一定的周围设备的信息,这部分信息被称为(路由表)。

  每次有一个IP数据报经过路由器,就需要匹配路由表,看一看接下来咋走。

  如果路由表上面有匹配的项,就会往这一个匹配的项走

  以上内容只是简单了解一下路由器选择,具体内容,可以参考网络。

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

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

相关文章

docker中安装Mariadb

一、 docker中下载mariadb我的安装的版本是10.1.21,(大家可以根据自己的需求制定版本)docker pull mariadb:10.1.21 二、新建一个目录作为容器的映射目录新建目录用来将容器的目录及数据挂载到该目录下mkdir -p /data/mariadb/data 三、启动m…

Java反序列化漏洞——CommonsCollections1链分析

CC1的链在jdk-8u71之后因为AnnotationInvocationHandler的修改已无法利用。一、TransformedMap基于jdk-8u65进行试验1.Rutime.getRuntime().exec()Runtime.getRuntime().exec("calc");2.Runtime类不允许序列化,所有需要调用反射进行命令执行,将…

无需经验的steam搬砖,每天操作1小时,轻松创业赚钱!

我作为一个95后社畜,就喜欢倒腾各种赚钱的事情,8年老韭菜告诉你,副业创收一点都不难,难就难在是否找对项目,俗话说方向不对,努力白费! 什么做苦力、技能、直播卖货,电商等等对比我这…

面试题59 - II. 队列的最大值

题目 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回 -1 思路 对于一个普通队列,push_back 和 pop_front…

ChatGPT 简介

目录1 背景与发展历程1.1 背景1.2 发展历程2 技术原理2.1 第一阶段:训练监督策略模型2.2 第二阶段:训练奖励模型2.3 第三阶段:采用强化学习来增强模型的能力。3 国内使用情况及应用的领域4 面临的数据安全挑战与建议4.1 ChatGPT获取数据产生的…

传奇SF架设问题处理方式

传奇SF架设问题处理方式 正常开服当中我们会遇到很多问题,比如游戏黑屏、登录器链接失败等等。 接下来我会把经常会遇到的问题罗列出来以及解决方法附上 传奇M2引擎出现时间格式报错? 这个解决方法有两种第一种是在你电脑桌面的右下角修改时间格式为短…

开源堡垒机GateOne安装

GateOne 是一款基于 html5 实现的 ssh 客户端,有如下特点:不需要任何浏览器插件支持多用户和多终端,同时支持上百个用户和终端终端支持高级特性,例如 256 色彩,高级文本样式支持支持终端截图,保存为图片和 …

【Oracle实用小技巧一】

PLSQL里一些实用的小技巧,可以让日常工作更便捷。 1、PLSQL可以直接打开命令行测试语句,非常方便,可以在SQL窗口里测试好语句,再在SQL文件里编写查询脚本。 2、describe tablename查询数据表结构; 3、upper(text)字…

Yakit实战技巧:用MITM热加载任意修改流量

背景 用户在使用 Yakit MITM 功能的时候,经常会遇到一些特殊需求: 我的数据包需要携带一些特征变量才能访问,但是浏览器无法做到,我可以批量修改流量新增某一个 Header 吗? 我可以在代理层面在所有流量中新增一个参数…

L1-072 刮刮彩票

“刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示: 每次游戏玩家会拿到一张彩票,上面会有 9 个数字,分别为数字 1 到数字 9,数字各不重复,并以 33 的“九宫格”形式排布在彩票上。 在游戏开始时能看见一个位置上…

JavaEE——MyBatis配置文件的详细介绍

简单介绍: 需要我们编写的配置文件主要有三个,分别是核心配置文件(mybatis-config.xml),数据库连接信息文件(db.properties),SQL语句映射文件(Mappers)&…

蒙特卡洛方法

蒙特卡洛方法 理解:是一种利用大量样本与样本中正确数量形成的概率去逼近真实值的一种方法。 可以很巧妙的求取某些问题:如 π 的值 1、利用蒙特卡洛方法求π 我们知道圆的面积公式是:π * r * r 那么 1 / 4 圆的面积就是 1/ 4 *π * r …

Spring Data JPA关于懒加载的那些事

背景 环境 相关环境配置: SpringBootPostGreSQL Spring Data JPA 懒加载现象 首先声明一下 application.yml 文件中关于 JPA 的配置: spring:jpa:show-sql: truehibernate:ddl-auto: noneopen-in-view: falseproperties:hibernate:order_by:defaul…

「6」线性代数(期末复习)

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 第五章 相似矩阵及二次型 &2)方阵的特征值与特征向量 &3&#xff…

从transformers开始,哪些工作可以被看成是自然语言处理里程碑式的突破。

文本生成的含义是在某一语言数据基础上对语言的从前到后(自监督本身下行目标)、两段对齐语言序列(相互之间的文本共性矩阵计算)分布的研究实现路线。简而言之如何以具有可微可导的向量去寻找攻关语言分布的能力即为当代信息科学与…

Springcloud 集成 Seata1.5.2

一、关于seata1.5.2的安装部署请参考: Seata1.5.2安装配置部署_不知道取啥昵称的博客-CSDN博客 二、springcloud程序集成seata 我这里使用的alibaba-cloud版本为 2.2.6.RELEASE,其对应的seata版本为1.3.0,但是想使用seata1.5.2的版本&…

MongoDB-查找表里面重复的记录

一、背景 项目中使用的是mongodb数据库,在测试数据入库的时候,会根据源数据,然后生成一个自增的id到数据库里面,然后线上和测试环境针对同一条数据的id是不一致的。某些数据又只有id与线上匹配上的时候,才能关联上更多…

CentOS 7转化系统为阿里龙蜥Anolis OS 7

转载:原社区CentOS 7迁移Anolis OS 7迁移手册 一、注意事项 Anolis OS 7生态上和依赖管理上保持跟CentOS7.x兼容,一键式迁移脚本centos2anolis.py,实现CentOS7.x到Anolis OS 7的平滑迁移。 使用迁移脚本前需要注意如下事项: 迁…

Springboot扩展点之CommandLineRunner和ApplicationRunner

Springboot扩展点系列:Springboot扩展点之ApplicationContextInitializerSpringboot扩展点之BeanDefinitionRegistryPostProcessorSpringboot扩展点之BeanFactoryPostProcessorSpringboot扩展点之BeanPostProcessorSpringboot扩展点之InstantiationAwareBeanPostPro…

获取保存在本地的帐户密码,支持浏览器|数据库|邮件|无线|管理员等等

获取保存在本地的帐户密码,支持浏览器|数据库|邮件|无线|管理员等等。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动…