网络层重点协议——IP协议详解

 ✏️✏️✏️今天给大家分享的是网络层的重点协议——IP协议。

清风的CSDN博客

🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流!

✈️✈️✈️动动你们发财的小手,点点关注点点赞!在此谢过啦!哈哈哈!😛😛😛

目录

一、IP 协议格式 

 二、认识 IP 地址

2.1 概念

2.2 作用

2.3 格式

2.4 组成 

 2.5 分类 

2.6 特殊的IP地址

2.7 子网掩码

2.7.1 格式

2.7.2 作用

2.7.3 计算方式 

三、NAT 机制 


一、IP 协议格式 

  • 4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4。
  • 4位头部长度(header length):IP头部的长度是多少个32bit,也就是 length * 4 的字节 数。4bit表示最大的数字是15,因此IP头部最大长度是60字节。
  • 8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,这四者相互冲突,只能选择一个。
  • 16位总长度(total length):IP数据报整体占多少个字节。
  • 16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。
  • 3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为0,其他是1。类似于一个结束标记。
  • 13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。
  • 8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数。一般是64。每次经过一个路由,TTL - 1,一直减到0还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。
  • 8位协议:表示上层协议的类型。
  • 16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏。
  • 32位源地址和32位目标地址:表示发送端和接收端。
  • 选项字段(不定长,最多40字节):不做介绍

 二、认识 IP 地址

2.1 概念

IP 地址( Internet Protocol Address )是指互联网协议地址,又译为网际协议地址。

2.2 作用

IP 地址是 IP 协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

2.3 格式

IP 地址是一个 32 位的二进制数,通常被分割为 4 “8 位二进制数 (也就是 4 个字节),如:
01100100.00000100.00000101.00000110
通常用 点分十进制 的方式来表示,即 a.b.c.d 的形式( a,b,c,d 都是 0~255 之间的十进制整数)。如:100.4.5.6。

        IP协议有两个版本,IPv4和IPv6。IPv4数量=2^32,大约43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址。对于全世界计算机来说,这个数量是不够的,所以后来推出了IPv6(长度128位,是IPv4的4倍)。但因为目 前IPv4还广泛的使用,且可以使用其他技术来解决IP地址不足的问题,所以IPv6也就没有普及。

2.4 组成 

IP 地址分为两个部分,网络号和主机号:
  • 网络号标识网段,保证相互连接的两个网段具有不同的标识
  • 主机号标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
通过合理设置网络号和主机号,就可以保证在相互连接的网络中,每台主机的 IP 地址都是唯一的。
那么,如何划分网络号和主机号呢?

 2.5 分类 

过去曾经提出一种划分网络号和主机号的方案,把所有 IP 地址分为五类,如下图所示:

2.6 特殊的IP地址

  • 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网
  • 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
  • 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通

在上述的分类中,存在IP地址浪费的问题:

  • 单位一般会申请B类网络(C类连接主机数量有限),但实际网络架设时,连接的主机数量又常远小于65534B类连接主机数),造成IP地址浪费;同理,A类网络的IP地址也会造成大量的浪费。
  • 当一个单位申请了一个网络号。他想将该网络能表示的IP地址再分给它下属的几个小单位时,如果在申请新的网络就会造成浪费。
为了解决以上问题,引入子网掩码来进行子网划分。

2.7 子网掩码

2.7.1 格式

子网掩码格式和 IP 地址一样,也是一个 32 位的二进制数。其中左边是网络位,用二进制数字 “1” 表示, 1 的数目等于网络位的长度;右边是主机位,用二进制数字“0” 表示, 0 的数目等于主机位的长度。 子网掩码也可以使用二进制所有高位1相加的数值来表示。

2.7.2 作用

  •  划分A,B,C三类 IP 地址子网:
如一个 B IP 地址: 191.100.0.0 ,按 A ~ E 类分类来说,网络号二进制数为 16 位网络号 +16位主机号。 假设使用子网掩码 255.255.128.0 (即 17 ) 来划分子网,意味着划分子网后,高 17 位都是网络位 / 网络 号,也就是将原来 16 位主机号,划分为 1 位子网号 +15 位主机号。
此时, IP 地址组成为:网络号 + 子网号 + 主机号,网络号和子网号统一为网络标识(划分子网后的网络号 / 网段)

  • 网络通信时,子网掩码结合IP地址,可以计算获得网络号(划分子网后的网络号)及主机号(划分子网后的主机号)。一般用于判断目的IP与本IP是否为同一个网段。

       对于网络通信来说,发送数据报时,目的主机与发送端主机是否在同一个网段,流程是不一样的。 

2.7.3 计算方式 

  • 将 IP 地址和子网掩码进行“按位与”操作,得到的结果就是网络号。
  • 将子网掩码二进制按位取反,再与 IP 地址位与计算,得到的就是主机号。

示例:

关于IP协议还有一个重要功能——路由选择(数据报在IP协议下如何传输)

路由器转发的过程类似于问路的过程,每个路由器内部都有一个数据结构——路由表。数据报到达路由器,就查询路由表。若查到就直接按照这个方向转发。否则路由器给一个默认的方向,沿着默认方向走。

三、NAT 机制 

IPv4 协议中, IP 地址数量不充足,那么如何解决这个问题呢?
NAT 技术当前解决 IP 地址不够用的主要手段,是路由器的一个重要功能:
  • NAT能够将私有IP对外通信时转为全局IP,也就是就是一种将私有IP和全局IP相互转化的技术方法
  • 很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP
  • 全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的

  • NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37
  • NAT路由器收到外部的数据时,又会把目标IP从202.244.174.37替换回10.0.0.10
  • 在NAT路由器内部,有一张自动生成的,用于地址转换的表
  • 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系

NAPT 工作过程 

那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP 都是相同的。那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机?

这时候NAPT来解决这个问题了,使用IP+port来建立这个关联关系:

这种关联关系也是由 NAT 路由器自动维护的。例如在 TCP 的情况下,建立连接时,就会生成这个表项,在断开连接后,就会删除这个表项。
NAT 技术的缺陷
  • 无法从NAT外部向内部服务器建立连接
  • 转换表的生成和销毁都需要额外开销
  • 通信过程中一旦NAT设备异常,所有的TCP连接都会断开

🌈🌈🌈好啦,今天的分享就到这里。

🌈🌈🌈希望各位看官读完文章后,能够有所提升!

🎉🎉🎉创作不易,还希望各位大佬支持一下!

✈️✈️✈️点赞,你的认可是我创作的动力!

⭐⭐⭐收藏,你的青睐是我努力的方向!

✏️✏️✏️评论:你的意见是我进步的财富

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

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

相关文章

解决vue3 动态引入报错问题

之前这样写的,能使用,但是有警告 警告,查了下,是动态引入的问题,看到说要用glob 然后再我的基础上,稍微 改了下,就可以了: 最后打印了下,modules[../../components/flowc…

每日一练【无重复字符的最长子串】

一、题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 二、题目解析 算法思想:移动窗口的思想去解决。 那为什么要用这个方法解决呢? 我们首先用暴力的思路去遍历一遍,我们遍历到deabc后&#xff…

外包干了3个月,技术退步明显.......

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

图文教程:从0开始安装stable-diffusion

现在AI绘画还是挺火,Midjourney虽然不错,但是对于我来说还是挺贵的。今天我就来安一下开源的AI绘画stable-diffusion,它的缺点就是对电脑的要求比较高,尤其是显卡。 话不多说开搞。 访问sd的github,https://github.com/AUTOMATIC…

AIGC报告专题:计算机Pika-AIGC新秀-视频生成产业或迎来GPT时刻

今天分享的AIGC系列深度研究报告:《AIGC报告专题:计算机Pika-AIGC新秀-视频生成产业或迎来GPT时刻》。 (报告出品方:中泰证券) 报告共计:11页 Pika:专注Text to Video生成场景,支持…

创投课程第四期 | Web3一级市场投资框架的演变及投资人能力框架的构成

协会邀请了来自Zonff Partners的合伙人——Colin,作为VC创投课程第4期的嘉宾,在北京时间12月9日(周六)下午14:00 PM-15:00 PM于蚂蚁链科技产业创新中心进行线下分享,届时将与所有对Web3投资、创业心怀热忱的朋友们共同探讨《WEB3一级市场投资…

Java面试题(每天10题)-------连载(46)

目录 Dubbo篇 1、Dubbo的默认集群容错方案 2、Dubbo支持哪些序列化方式? 3、Dubbo超时时间怎样设置? 4、服务调用超时问题怎么解决? 5、Dubbo在安全机制方面是如何解决的? 6、Dubbo和Dubbox之间的区别 7、Dubbo和Spring C…

mybatis多表映射-对一关联

1、建库建表 create database mybatis-example; use mybatis-example; create table t_book (bid varchar(20) primary key,bname varchar(20),stuid varchar(20) ); insert into t_book values(b001,Java,s001); insert into t_book values(b002,Python,s002); insert into …

IDEA 2023.3 start failed 启动失败修复

发现是 RestfulToolkit 插件有冲突导致的,删除插件后成功启动 open ~/Library/Application\ Support/JetBrains/IntelliJIdea2023.3/plugins参考:https://youtrack.jetbrains.com/issue/IDEA-340080/Critical-startup-error-after-upgrading-to-Intelli…

成都工业学院Web技术基础(WEB)实验一:HTML5排版标签使用

写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考,前端变化比较大,按照要求,只能做到像,不能做到一模一样 3、图片和文字仅为示例,需要自行替换 4、如果代码不满足你的要求,请寻求其他的…

文生图:AE/VAE/VQVAE/VQGAN/DALLE模型

文生图模型演进:AE、VAE、VQ-VAE、VQ-GAN、DALL-E 等 8 模型本文中我们回顾了 AE、VAE、VQ-VAE、VQ-VAE-2 以及 VQ-GAN、DALL-E、DALL-E mini 和 CLIP-VQ-GAN 等 8 中模型,以介绍文生图模型的演进。https://mp.weixin.qq.com/s/iFrCEpAJ3WMhB-01lZ_qIA 1…

【C++11并发】Atomic 笔记

简介 用atomic定义的变量,支持原子操作,即要么全部完成操作,要不全部没有完成,我们是不可能看到中间状态。一般在多线程程序中,可以用atomic来完成数据同步。 标准库为我们主要提供了四类工具 atomic类模板操作atomi…

在SpringData JPA 中实现对持久层的操作

1.导入依赖 hibernate 这个依赖自带实现JPA接口 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><depen…

openGauss学习笔记-149 openGauss 数据库运维-备份与恢复-逻辑备份与恢复之gs_restore

文章目录 openGauss学习笔记-149 openGauss 数据库运维-备份与恢复-逻辑备份与恢复之gs_restore149.1 背景信息149.2 命令格式149.3 参数说明149.3.1 通用参数-V, –version149.3.2 导入参数 149.4 示例 openGauss学习笔记-149 openGauss 数据库运维-备份与恢复-逻辑备份与恢复…

JVM虚拟机系统性学习-运行时数据区(方法区、程序计数器、直接内存)

方法区 方法区本质上是 Java 编译后代码的存储区域&#xff0c;存储了每一个类的结构信息&#xff0c;如&#xff1a;运行时常量池、成员变量、方法、构造方法和普通方法的字节码指令等内容 方法区主要存储的数据如下&#xff1a; Class 类型信息&#xff0c;如该 Class 为 …

conda 计算当前包的个数

Conda是一个强大的包管理器和环境管理器&#xff0c;它用于安装和管理来自不同源的软件包。若要计算当前conda环境中安装的包的数量&#xff0c;你可以使用以下命令&#xff1a; 首先&#xff0c;激活你想要检查的conda环境&#xff08;如果不是默认的base环境&#xff09;&am…

2023-2024年华为ICT网络赛道模拟题库

2023-2024年网络赛道模拟题库上线啦&#xff0c;全面覆盖网络&#xff0c;安全&#xff0c;vlan考点&#xff0c;都是带有解析 参赛对象及要求&#xff1a; 参赛对象&#xff1a;现有华为ICT学院及未来有意愿成为华为ICT学院的本科及高职院校在校学生。 参赛要求&#xff1a…

【XR806开发板试用】编译FreeRTOS系统

编译FreeRTOS系统&#xff0c;测试串口输出。 一、下载源码 1.1、获取源码 下载源码: rootubuntu:/home# wget https://bbs.aw-ol.com/assets/uploads/files/1693988430633-xr806_sdk.tar.gz 解压文件 rootubuntu:/home# tar xvf 1693988430633-xr806_sdk.tar.gz 1.2、获取…

用Kotlin抓取微博数据并进行热度预测

闲来无事&#xff0c;逛逛微博&#xff0c;看着每条热度很高的博文趣事&#xff0c;心想能否通过爬虫抓取微博热度并进行趋势分析&#xff0c;说干就干&#xff0c;这里需要注意的问题我会一一标注。 爬虫ip信息的设置是在爬虫程序中进行的。爬虫ip信息可以帮助爬虫程序在访问…

Kafka事务是怎么实现的?Kafka事务消息原理详解

目录 一、Kafka事务性消息1.1 介绍Kafka事务性消息1.2 事务性消息的应用场景1.3 Kafka事务性消息的优势 二、Kafka事务性消息的使用2.1 配置Kafka以支持事务性消息生产者配置消费者配置 2.2 生产者&#xff1a;发送事务性消息创建Kafka生产者开始事务发送消息提交或中止事务 2.…