网络原理-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。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试之【软件测试概论一】

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言软件生命周期软件项目开发过程软件项目组织架构软件开发相关模型 软件测试…

Nexpose v6.6.246 for Linux Windows - 漏洞扫描

Nexpose v6.6.246 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, Release Apr 10, 2024 请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.o…

【002_音频开发_基础篇_Linux音频架构简介】

002_音频开发_基础篇_Linux音频架构简介 文章目录 002_音频开发_基础篇_Linux音频架构简介创作背景Linux 音频架构ALSA 简介ASoC 驱动硬件架构软件架构MachinePlatformCodec ASoC 驱动 PCMALSA设备文件结构 ALSA 使用常用概念alsa-libALSA Open 流程ALSA Write 流程2种写入方法…

JVM-垃圾收集算法

前言 在 Java 中,垃圾收集(Garbage Collection)是一种自动管理内存的机制,它负责在运行时识别和释放不再被程序使用的内存,从而避免内存泄漏和悬空引用问题。本篇文章将介绍三种常见的垃圾收集算法。 标记-清除&…

PostgreSQL大版本如何升级?

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

【王道数据结构笔记】顺序表的基本操作--查找(代码分析)

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:数据结构 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

【Hadoop】- YARN架构[7]

前言 Yarn架构是一个用于管理和调度Hadoop集群资源的系统。它是Hadoop生态系统的一部分,主要用于解决Hadoop中的资源管理问题。 通过使用Yarn架构,Hadoop集群中的不同应用程序可以共享集群资源,并根据需要动态分配和回收资源。这种灵活的资…

Android Studio超级详细讲解下载、安装配置教程(建议收藏)

博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有…

Eclipse+Java+Swing实现学生信息管理系统-TXT存储信息

一、系统介绍 1.开发环境 操作系统:Win10 开发工具 :Eclipse2021 JDK版本:jdk1.8 存储方式:Txt文件存储 2.技术选型 JavaSwingTxt 3.功能模块 4.工程结构 5.系统功能 1.系统登录 管理员可以登录系统。 2.教师-查看学生…

Java学习Go(入门)

下载Go 《官网下载golang》 直接点Download,然后根据你自己的操作系统进行下载,我这里以win10为例 安装go 默认安装到C:\Program Files\Go,这里我们可以选择安装到其他盘,也可以选择默认安装。初学者建议直接一路next。 安装完…

冷却塔的选型方法介绍

冷却塔形式冷却塔形式冷却塔形式 冷却塔有开式冷却塔、闭式冷却塔 闭式冷却塔与开式冷却塔的区别 1)开式冷却塔的冷却原理就是,通过将循环水以喷雾方式,喷淋到玻璃纤维的填料上,通过水与空气的接触,达到换热,再有风机…

Qt 窗口的坐标体系

Qt 窗口的坐标体系 Qt 中使用的坐标系也是平面直角坐标系,但是呢又和我们平时在数学中使用的坐标系是不同的,我们在数学中使用的坐标系是 x 向右增长, y 向上增长。 但是在 Qt 中使用的是 x 轴不变,y 轴是向下增长的。 所以Qt 中…