网络层重要协议 --- IP协议

小王学习录

  • 今日摘录
  • IP数据报
    • 数据报首部
    • IPv4的局限及解决方法
  • 地址管理
  • 路由选择
  • 扩展:NAT和NAPT的结合使用

今日摘录

关山难越,谁悲失路之人。萍水相逢,尽是他乡之客。
在这里插入图片描述

网络层的职责是地址管理路由选择,在网络层中最重要的协议是ip协议。下面先介绍一下ip数据报,再聊地址管理和路由选择。

IP数据报

先看看IP数据报结构:

在这里插入图片描述

数据报首部

  • 4位版本:IPv4或IPv6。(中国IPv6是一项伟大的创举)
  • 4位首部长度:与TCP报头一样,单位为4个字节
  • 8位服务类型:实际有效位为4位,其余有3位优先权字段,一位保留位。这四位有效位只能有一位值为1,代表了ip协议的四种形态,分别是最小延迟、最大吞吐量、最高可靠性、最小成本
  • 16位总长度:报头+数据。单位为字节,意味着一个ip数据报最大为64kb,如果大于64kb,在网络层会自动拆分组装。拆分和组装时要依靠下一行字段。
  • 16位标识:用于标识不同的传输层报文,一个报文拆分成多个ip数据报,来自同一报文的标识值相同。
  • 3位标志:用于标识当前数据报是否为所属报文的最后一个数据报。
  • 13位片偏移:用于给属于同一报文的数据报排序,保证接收方组装数据报时是有序的。
  • 8位生存时间(TTL):数据报在网络传输过程中的最大生存时间,注意这里的时间单位并不是秒和毫秒,而是经过路由器的个数,准确来说是向每一个路由器寻址的次数(每经过一个路由器进行一次寻址)。每个TTL都有一个初始值,不同操作系统的TTL值不同(32,64),每经过一个路由器TTL值减一,当TTL值为0时,认为目的ip地址不存在,将数据报丢弃
  • 8位协议:用于标识上层,即传输层的协议(TCP或UDP)。
  • 16位首部校验和:这个校验和只是首部的校验和,因为载荷的校验和在传输层进行计算(TCP和UDP的校验和字段)。
  • 32位源ip:ip数据报发送方的ip地址。在计算机中用32位二进制标识,平时表示时将32位分成4份,对每一份用点分十进制表示。
  • 32位目的ip地址:ip数据报接收方的ip地址。
  • 选项字段:与TCP的选项字段一样,长度不定。

IPv4的局限及解决方法

在IPv4体系中,ip地址用32位二进制表示,这就意味着IPv4能为全球体统的ip地址数最多有42亿九千万个。每一个能上网的设备都需要一个ip地址,随着互联网的蓬勃发展,能上网的设备种类越来越多。PC、移动手机、服务器、路由器乃至于万物联网,42亿九千万这个数量已经不足以为全球的上网设备提供ip地址了。

为了解决这个问题,有了三个解决方法,实际上前两个只是缓解,第三个才是从根本上解决了IP地址不够用的问题。

    1. 动态分配ip地址
      当有一个设备要上网时就给这个设备分配一个ip地址,这个设备不上网时,这个ip地址就分配给其它要上网的设备。
      这只是提高了ip地址的利用率,并没有从根本上解决问题。
    1. NAT地址转换
      NAT地址转换实质上是实现了用一个ip地址同时代表多个设备。
  1. 在NAT中,将ip地址分为私网ip(内网ip)和公网ip(外网ip)。

  2. 私有ip有10.* 、 172.16.* - 172.31.* 、 192.168.* 。剩下的地址都是公网ip。

  3. 在不同的局域网中,私网ip可以重复使用。但公网ip只能有一个。

  4. 当一个私网ip要访问公网ip时,经过NAT设备(路由器)进行地址转换之后,就会将私网ip映射成一个公网ip,同一个内网中的设备映射的公网ip是相同的。多个同一内网的ip去访问同一个服务器(外网ip)时,在服务器方显示的源ip都是同一个,即该子网中设备映射的公网ip。看以下图解:
    在这里插入图片描述

  5. 当公网ip收到内网ip的访问时,虽然无法得知访问者的内网ip是多少,但是知道了访问者的公网ip和端口号,将响应发送给访问者的公网ip,公网ip的路由器会根据端口号来区分具体响应的是哪个主机,从而完成通信。

  6. 公网ip在没有收到内网ip的访问时,是无法直接与内网ip进行通信的。这是因为如果内网ip不访问公网ip,公网ip就不知道内网ip的端口号,也就无法与内网ip建立通信。同理两个局域网内的内网ip也无法直接通信。

NAT地址转换可以有效缓解ip地址不够用的问题,但是带来的副作用是使得网络环境更加复杂。

    1. IPv6
      IPv6从根本上解决了ip地址的数量问题
      IPv4用32位表示,可表示的ip地址有42亿九千万个。
      IPv6用128位表示,位数提高为原来的4倍,可表示的ip地址个数是42亿九千万的四次方。这个数量可以给地球上的每一粒沙子都分配一个ip地址了。
      我国一直走在IPv6研究的最前方,目前IPv6的普及程度是全球普及率最高的。大家可以查看以下自己的路由器配置是否开启了IPv6。当开启IPv6之后,网速不会变得更快,信息不会变得更多,唯一不同的是你在互联网世界所踩的每一寸土地,都将属于我们自己,历史的债将在IPv6还清

地址管理

为了方便进行地址管理(组网),将ip地址分为了网络号和主机号
网络号:保证相连的两个网段有不同的标识
主机号:用于区分同一网段中的不同主机。同一网段中的网络号相同,主机号不同。如果同一网段中有两个设备主机号相同,那么这两个设备中势必有一个不能上网。

那么问题来了,一个ip地址的哪几位是网络号,哪几位是主机号呢?这需要靠子网掩码来进行区分,以我的ip地址为例:

看下图:
在这里插入图片描述
子网掩码的左半部分全为1,右半部分全为0,子网掩码为1的位数就是网络号的位数。以我的ip地址为例的话就是网络号为10.138

  1. 如果将一个ip地址中的主机位全设为0,就成为了网络号,代表这个局域网
  2. 如果将一个ip地址中断主机位全设为1,就成了广播地址,可以为局域网内的所有设备发送数据。结合UDP的知识,我们知道如果向10.138.255.255发送UDP报文,则整个局域网内的所有设备都可以收到。
  3. 127.*的ip地址用于本机环回测试,通常是127.0.0.1。
  4. 通常将主机号为1的地址设为默认网关,这个可以自由配置

路由选择

在每一个路由器中都有一个路由表,在路由表中保存了周围设备的信息,当ip数据报经过一个路由器时,都会查看路由器的路由表,根据自己的目标ip看一下自己的下一站应该去哪个ip。如果路由表中有下一站信息,就会直接顺着路由走,如果没有会顺着路由表的默认路由走。每查看一次路由表就会使TTL值减一。如果TTL值减为0了,说明目的ip不存在,永远找不到,就会丢弃这个ip数据报。

以上简单介绍了路由选择的过程,实际上的路由选择过程十分复杂,涉及到路由表的配置,更新等一系列问题。

扩展:NAT和NAPT的结合使用

通过上面对NAT的介绍我们知道NAT可以将内部网络的私有ip地址映射为公共ip地址,而NAPT在此基础上进一步处理端口号

具体的处理过程是:将TCPUDP(注意NAPT只能对TCP和UDP的端口号进行转换)的源端口号修改为一个临时的未被占用的端口,并在映射表中记录这个映射关系。当外部网络的响应返回时,NAPT会根据映射表将目标端口号恢复到原始的内部设备的端口号,然后将数据报传递给相应的设备。这种方式允许多个内部设备共享一个公共ip地址,通过端口号的不同来区分它们的通信流量。

总而言之,NAT和NAPT结合使用来实现私有网络地址到公有地址的映射。

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

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

相关文章

SpringBoot整合Mybatis-plus

MyBatis-Plus与MyBatis区别&#xff1a; 导入坐标不同数据层实现简化 1.创建项目 2.选择依赖 3.pom文件 说明&#xff1a;配置pom.xml文件 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>&…

【Java 进阶篇】JSP 简单入门

在现代Web开发中&#xff0c;JavaServer Pages&#xff08;JSP&#xff09;是一项非常重要的技术。JSP允许开发者将Java代码嵌入HTML页面&#xff0c;以实现动态内容的生成和呈现。本文将详细介绍JSP的概念、原理以及如何使用JSP来构建Web应用程序。 第一部分&#xff1a;JSP …

jetsonTX2 nx配置yolov5和D435I相机,完整步骤

转载一篇问题解决博客&#xff1a;问题解决 一、烧录系统 使用SDK烧录 二、安装archiconda3 JETSON TX2 NX的架构是aarch64,与win10,linxu不同,所以不能安装Anaconda&#xff0c;这里安装对应的archiconda。 1. 安装 wget https://github.com/Archiconda/build-tools/rel…

Excel·VBA工作表导出为图片

《Excel转图片别再截图啦&#xff01;用这4个方法&#xff0c;高清且无损&#xff01;》&#xff0c;excel转为图片一般方法较为简单&#xff0c;那么能否使用vba将excel转为图片 选中区域导出为图片 zoom设置为2&#xff0c;导出图片较为清晰 Sub 选中区域导出为图片()Dim …

一个使用uniapp+vue3+ts+pinia+uview-plus开发小程序的基础模板

uniappuviewPlusvue3tspiniavite 开发基础模板 使用 uniapp vue3 ts pinia vite 开发基础模板&#xff0c;拿来即可使用&#xff0c;不要删除 yarn.lock 文件&#xff0c;否则会启动报错&#xff0c;这个可能和 pinia 的版本有关&#xff0c;所以不要随意修改。 拉取代码…

HarmonyOS列表组件

List组件的使用 import router from ohos.routerEntry Component struct Index {private arr: number[] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]build() {Row() {Column() {List({ space: 10 }) {ForEach(this.arr, (item: number) > {ListItem() {Text(${item}).width(100%).heig…

JavaEE的渊源

JavaEE的渊源 1. JavaEE的起源2. JavaEE与Spring的诞生3. JavaEE发展历程&#xff08;2003-2007&#xff09;4. JavaEE发展历程&#xff08;2009-至今&#xff09;5. Java的Spec数目与网络结构 1. JavaEE的起源 我们首先来讲一下JavaEE的起源 ,为什么要来讲起源 &#xff1f; …

Spring Boot 整合RabbitMQ

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Sprin…

Technology Strategy Pattern 学习笔记2-Creating the Strategy-World Context

Creating the Strategy-World Context 1 PESTEL 1.1 从6个方案看外部 PoliticalEconomicSocialTechnologicalEnvironmentalLegal 1.2 参考URL https://zhuanlan.zhihu.com/p/192522082https://www.docin.com/p-449396129.htmlhttps://blog.csdn.net/xiaoyw71/article/deta…

全球首款双模型AI手机METAVERTU2,为用户开发“第二大脑”

在2023年11月1日&#xff0c;英国奢侈手机品牌VERTU在香港举办了一场新品发布会&#xff0c;它推出了一款全新的AI手机称为METAVERTU2&#xff0c;这是全球首款双模型AI手机。此款手机将Web3技术与人工智能相结合&#xff0c;通过AI模型标记数据和AI Agent的方式&#xff0c;将…

sqlsugar查询数据库下的所有表,批量修改表名字

查询数据库中的所有表 using SqlSugar;namespace 批量修改数据库表名 {internal class Program{static void Main(string[] args){SqlSugarClient sqlSugarClient new SqlSugarClient(new ConnectionConfig(){ConnectionString "Data Source(localdb)\\MSSQLLocalDB;In…

VulnHub jarbas

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

Zabbix监控联想服务器的配置方法

简介 图片 随着科技的发展&#xff0c;对于数据的敏感和安全大部分取决于对硬件性能、故障预判的监测&#xff0c;由此可见实时监测保障硬件的安全很重要&#xff0c;从而衍生了很多对硬件的监测软件&#xff0c;Zabbix就一个不错的选择。开源 开源 开源&#xff01; zabbix是…

[极客大挑战 2019]Knife 1(两种解法)

题目环境&#xff1a; 这道题主要考察中国菜刀和中国蚁剑的使用方法 以及对PHP一句话木马的理解 咱们先了解一下PHP一句话木马&#xff0c;好吗&#xff1f; **eval($_POST["Syc"]);** **eval是PHP代码执行函数&#xff0c;**把字符串按照 PHP 代码来执行。 $_POST P…

基于单片机的超声波测距仪

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、本课题研究的主要内容二、超声波测距仪的整体方案2.2 超声波测距仪设计原理 三、超声波测距仪系统硬件电路的设计3.1 超声波测距仪的基本结构 四、 超声波测距仪系统的软件设计4.1 主程序软件设计仿真 五、结…

大数据之陌陌聊天数据分析案例

目录 目标需求 数据内容 基于Hive数仓实现需求开发 1.建库建表、加载数据 2.ETL数据清洗 3需求指标统计 目标需求 基于Hadoop和hive实现聊天数据统计分析&#xff0c;构建聊天数据分析报表 1.统计今日总消息量 2.统计今日每小时消息量&#xff0c;发送和接收用户数 3.…

用户态内存映射

内存映射不仅仅是物理内存和虚拟内存之间的映射&#xff0c;还包括将文件中的内容映射到虚拟内存空间。这个时候&#xff0c;访问内存空间就能够访问到文件里面的数据。而仅有物理内存和虚拟内存的映射&#xff0c;是一种特殊情况。 对于堆的申请来讲&#xff0c;mmap 是映射内…

Linux Framebuffer驱动框架、接口实现和使用

Linux 驱动-Frame Buffer代码分析 Framebufferfbmem.c部分代码分析初始化 Framebuffer 对于驱动开发人员来说&#xff0c;其实只需要针对具体的硬件平台SOC和具体的LCD&#xff08;通过焊接连接到该SOC引脚上的LCD&#xff09;来进行第一部分的寄存器编程&#xff08;红色部分&…

Git同时配置Gitee和GitHub

Git同时配置Gitee和GitHub 一、删除原先ssh密钥二、生成密钥 这里的同时配置是针对于之前配置过单个gitee或者github而言的&#xff0c;如果需要看git从安装开始的配置&#xff0c;则可以看这一篇文章 git安装配置教程 一、删除原先ssh密钥 在C盘下用户/用户名/.ssh文件下找到…

Python基础入门例程46-NP46 菜品的价格(条件语句)

最近的博文&#xff1a; Python基础入门例程45-NP45 禁止重复注册&#xff08;条件语句&#xff09;-CSDN博客 Python基础入门例程44-NP44 判断列表是否为空&#xff08;条件语句&#xff09;-CSDN博客 Python基础入门例程43-NP43 判断布尔值&#xff08;条件语句&#xff0…