网络原理-IP协议

一、IP协议报头

 

  1. 版本号:用来表示IP协议的版本,现在常用的IP协议有两个版本,IPv4和IPv6,其他版本可能只存在于实验室中,并没有被广泛的使用。

  2. 首部长度:用来表示IP报头的长度,因为存在"选项"字段,所以IP报头是可变长的,此处单位为4个字节。取值范围:20-60字节。

  3. 服务类型:虽然有8位但是真正只有4位才有效,用来表示IP协议的4工作模式:最小延时、最大吞吐量、最高可靠性、最小成本,四种模式互斥,只能切换到一种模式。虽然IP协议支持这个机制,但在实际中很少用到。

  4. 总长度:表示的是整个IP数据报的长度,即IP报头长度+载荷的长度。这里的总长度使用了16bit,只能表示到64kb的数据,所以当携带的数据比较多的时候,IP协议会自动将数据报拆成多份,而数据到了接收方又会进行合并操作。

  5. 标识+标志位+片偏移:用来帮助IP协议正确拆包组包。当IP的载荷数据比较多的时候,会进行拆包,而同一个数据报中多个包的标识是相同的,然后再根据包的先后顺序进行片偏移的赋值。其中的标志位,一共3bit,一位不作使用,一位用来表示是否允许拆包,还有一位用作"结束标记",判断是否为最后一个包。

  6. 生存时间(TTL):表示一个数据包在网络上最多被转发多少次,每经过一个中间节点就减1,比如有一个TTL的初始值为32,在经过32次转发后就会减为0,此时这个数据包就会被丢弃,表示不可达。

  7. 协议:表示上层使用的是哪种协议。

  8. 首部校验和:检验IP协议数据包的头部是否出现错误,后面的载荷为TCP/UDP,可以自己检验。

二、IP地址

在网络的世界中有许多的主机,彼此之间要使用IP地址找到对方才能通信,因此每个IP地址原则上是不能重复的。而所谓的IP地址本质上是一个32位的整数。不过为了便于叙述与记忆往往会使用点分十进制表示。

32位能表示的数据量是有限的,大约为42亿,随着网络的迅速发展,上网的设备越来越多已经超出了32位能表示的范围了,如何解决32位IP地址不够用呢?

DHCP(动态分配IP)

通过使用类似分时复用的方式,当主机需要上网的时候进行分配一个IP地址,不需要就先不分配,这种方式无法改变总量,只能缓治(你咋确定不会正好有42亿人一起上网呢?)。

NAT机制(网络地址转换)

NAT机制本质上是使用了IP地址的复用,将网络分为了两大类,一类为内网,另一类为外网。外网之间可以直接通信,而内网之间不可以。

 

由于内网可以复用,因此就会出现两台不同的主机的IP地址相同的情况,此时要通信的话,需要借助外网。

大致流程如下:

在发送的过程中,每经过一个路由器的时候就会触发NAT机制,路由器会将自己IP地址替换到当前IP数据报的源IP地址,因此接收端也无法知道这个数据报是源自哪的,只知道是上一级交付的。对于每一个带有NAT机制的路由设备也都会使用一个映射表来维护对应关系,这样当一个数据报过来之后,通过查表就知道发给谁了。

在NAT机制下,一个外网IP代表的不一定是一个设备了,而是很多很多设备,但是NAT也有非常明显的缺点:

非常繁琐,不方便直接访问局域网设备,需要多层路由转发才能访问另一个局域网中的设备。

虽然NAT进一步提高了利用率,但是也没有从根本上解决问题,但为啥还是在当今广泛使用呢?这是因为NAT是一个纯软件实现的方案,开发商只需要更新一下软件,这样就能大大降低成本。

IPv6

IPv6算是从根本上解决了IP地址不够用的问题。因为IPv6增长到了16个字节,128位,其能表示的数据范围相当于能给地球上的每一粒沙子都分配一个IP地址。

 

但是IPv6并没有发展起来,这是因为IPv4使用的是4个字节,因此两个协议无法兼容,要想升级IPv6就得更换硬件,但这并不会提高网速,用户也就感知不到,运营商也就赚不到钱......

更多知识可参考:电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅_哔哩哔哩_bilibili

IP地址组成

IP地址由两部分组成:网络号+主机号

网络号:标识网段,保证相互连接的两个网段具有不同的标识。

主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是主机号必须不同。


那么如何区分网络号和主机号呢?使用子网掩码

子网掩码和IP地址一样,也是4个字节,32位的整数,但是子网掩码要求,左侧必须为连续的1,右边必须为连续的0,即0和1不能穿插出现。其中1的范围就描述了IP地址的网络号,0的范围则是主机号。

这里就表示前23位为网络号,后9位为主机号。

子网掩码是现代的一种划分网络号的办法,上古时期还有一种:

特殊的IP地址

1.IP地址中的主机号全部位0,就成了网络号。

2.IP地址中的主机号全部设为1,就成了广播地址。例如:192.168.0.255,子网掩码:255.255.255.0,此时这个地址就是广播地址了,往这个地址发送UDP(TCP无法和广播地址握手)数据报,那么这个局域网中所有设备都会接收到。

3.127.*的IP地址用于本机环回地址,通常为127.0.0.1。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

春秋云镜 CVE-2023-51048

靶标介绍: S-CMS v5.0 被发现存在SQLI。 开启靶场 根据题目查找S-CMS v5.0漏洞,百度没有查询到,使用必应搜索S-CMS v5.0 查找到githubCVE-2023-51052的描述 S-CMS v5.0 was discovered to contain a SQL injection... CVE-2023-51052 Git…

Python程序设计 字典

教学案例十 字典 1. 判断出生地 sfz.txt文件中存储了地区编码和地区名称 身份证的前6位为地区编码,可以在sfz.txt文件中查询到地区编号对应的地区名称 编写程序,输入身份证号,查询并显示对应的地区名称 若该地区编码不在文件中,…

11.事件处理

事件处理 我们可以使用 v-on 指令 (简写为 ) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript。用法:v-on:click"methodName" 或 click"handler" 事件处理器的值可以是 内联事件处理器:事件被触发时执行的内联 J…

不同版本vue安装vue-router

vue-router 是vue官网发布的一个插件库,单页面路由。vue 和 vue-router 之间版本也需要对应。 vue2.x版本使用vue-router3.x版本,vue3.x使用vue-router4.x版本,根据自己的需要选择合适的版本 1、可以在安装前查看vue-router版本,…

微信小程序开发笔记

微信小程序开发笔记 1 微信小程序的项目结构 2 页面组成 一个微信小程序是由一个或多个页面组成的,这些页面被存放在pages目录中。下面以pages 目录下的index页面为例展示其组成部分,index页面的组成部分如下图所示。 由上图可知,index页面…

Swift-20-基础数据类型

数据定义 语法规则 先来看下下面的代码 import Cocoavar num1 "four" //a var num2: String "four" //b var num3 4 //c var num4: Int 4 //d上面的几行代码都能正常运行,其中a和b行等价,c和d行等价。区另就在于是否声…

SpringBoot集成Sleuth

引入Maven依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency> 配置yml文件 bootstrap.yml文件增加如下配置 注&#xff1a;这个配置不是必须要&#…

嵌入式Linux开发实操(十七):Linux Media Infrastructure userspace API

视频和无线电流媒体设备使用的Linux内核到用户空间API,包括摄像机、模拟和数字电视接收卡、AM/FM接收卡、软件定义无线电(SDR)、流捕获和输出设备、编解码器设备和遥控器。典型的媒体设备硬件如下: 媒体基础设施API就是用于控制此类设备的,分五个部分。 第一部分V4L2 API…

Cpp_SDay03

何处染尘埃 文章目录 前言一、de bug二、disassembly&#xff08;代码变成汇编&#xff09;三、if loop总结 前言 重在坚持 一、de bug 消除bug&#xff08;debug&#xff09; ctrlaltm 再按1就调出了内存地址 可以在内存地址维度来看自己的赋值等 watch界面查看想查看的值 …

SpringCloud(二)

2.4、OpenFeign 请求需要的controller层代码实现跨项目的数据联调 OpenFeign是一个声明式的http客户端&#xff0c;是SpringCloud在Eureka公司开源的Feign基础上改造而来。官方地址: https:/lgithub.com/OpenFeign/feign 其作用就是基于SpringMVC的常见注解&#xff0c;帮我们优…

如何在本地创建一个新的Git仓库?

文章目录 **步骤一&#xff1a;开启项目之旅****步骤二&#xff1a;启动Git引擎****步骤三&#xff1a;验证仓库初始化情况****步骤四&#xff1a;填充项目内容****步骤五&#xff1a;保存更改——初次提交****&#xff08;可选步骤六&#xff1a;关联远程仓库并推送&#xff0…

还在找投稿邮箱?推荐一个靠谱的投稿平台给你

亲爱的朋友: 听说你还在为单位的信息宣传投稿考核而烦恼,四处寻找投稿邮箱,却屡屡碰壁,是吗?别着急,作为过来人,我想给你推荐一个靠谱的投稿平台——智慧软文发布系统网站。相信它能帮你轻松完成考核任务,让你的稿件更快更好地被媒体采纳。 想当年,我也曾像你一样,为了完成单…

分析和比较深度学习框架 PyTorch 和 Tensorflow

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 深度学习作为人工智能的一个重要分支&#xff0c;在过去十年中取得了显著的进展。PyTorch 和 TensorFlow 是目前最受欢迎、最强大的两个深度学习框架&#xff0c;它们各自拥有独特的特点和优势。 1. Py…

2024HW ---->内网横向移动

在蓝队的面试过程中&#xff0c;如果你会内网渗透的话&#xff0c;那是肯定的一个加分选项&#xff01;&#xff01;&#xff01; 那么从今天开始&#xff0c;我们就来讲一下内网的横向移动&#xff01;&#xff01;&#xff01; 目录 1.域内任意用户枚举 2.Password-Sprayi…

node的事件循环

异步同步啥的就不多说了&#xff0c;直接看node中有哪些是异步 其中灰色部分和操作系统有很大的关系&#xff0c;就不多说了&#xff0c;其中定时器属于timers队列&#xff0c;I/O操作属于poll队列&#xff0c;setImmediate属于check队列&#xff0c;其中nextTick和promise不属…

mklink 命令的使用(适用场景:C盘爆满,转移到其他盘)

一、背景 将Oracle数据库安装在D盘&#xff0c;由于磁盘爆满&#xff0c;需要将数据库转移到其他磁盘&#xff08;如&#xff1a;J盘&#xff09;。 在移动数据库之后&#xff0c;会出现数据库无法使用的情况&#xff0c;这时该如何解决&#xff1f;经了解&#xff0c;可以使用…

MariaDB InnoDB 空洞清理

1、背景 数据库占用服务器内存越来越高&#xff0c;除了bin-log文件之外&#xff0c;还发现了一些带有text或者longtext数据类型字段的表&#xff0c;这种表也会占用很高的服务器磁盘空间 数据库版本&#xff1a; 表引擎&#xff1a; InnoDB 数据量&#xff1a;清理之前1500万…

Xavier 初始化

Xavier 初始化 为什么在 W [ l ] n p . r a n d o m . r a n d n ( s h a p e ) n p . s q r t ( 1 n [ l − 1 ] ) W^{[l]}np.random.randn(shape)\times np.sqrt(\frac{1}{n^{[l-1]}}) W[l]np.random.randn(shape)np.sqrt(n[l−1]1​) 中需要乘以 n p . s q r t ( 1 n […

Linux服务器运维工具箱 监控管理建站一个脚本全搞定!

Linux服务器运维工具箱 监控管理建站一个脚本全搞定&#xff01; 一款全能脚本工具箱&#xff0c;使用shell脚本编写。专为Linux服务器监控、测试和管理而设计。无论您是初学者还是经验丰富的用户&#xff0c;该工具都能为您提供便捷的解决方案。集成了独创的Docker管理功能&a…

IDEA2024配置RunDashBoard(Services)面板

IDEA2024配置RunDashBoard(Services)面板 新版本的IDEA没有RunDashBoard&#xff0c;取而代之的是Services面板&#xff0c;不需要配置workspace.xml文件; 本文教你简单的方法就能一个SpringBoot的Main运行多次&#xff0c;方便调试。 1、配置启动类 导航栏&#xff0c;Edit…