网络层最重要的协议—IP协议

news2025/3/11 3:01:19

网络层最重要的协议—IP协议

  • IP协议格式
  • 解决IP地址不够用问题的三种方法
      • 方法一: 动态分配IP地址
      • 方法二: NAT网络地址转换
      • 方法三: IPv6(根本上解决IP不够用的问题)
      • 小结:
  • IP协议之地址管理
    • 主机号/网络号
    • 子网掩码
    • 特殊IP

IP协议格式

在这里插入图片描述

  • 4位版本:此处取4或6
  • 4位首部长度:描述IP报头的长度。(单位也是4字节)
  • 16位总长度:描述一个IP数据报的总长度(报头+载荷)
  • 16位标识:同一个数据拆成的多个包,标识相同
  • 3位标志:是结束标志
  • 13位片偏移:标识了拆分后多个包的先后顺序

16位标识,3位标志,13位片偏移,这几个字段都是为辅助拆包、组包提供的。

  • 8位生存时间(TTL): 一个数据报在网络上能够传输的最大时间,这个时间的单位不是秒,而是次数

一个数据报构造出来,会有一个初始的TTL数值,比如32或者64,或者128,这个数据报每次经过一个路由器转发,TTL减一。如果一直减到零了,还没有到达目标,此时就认为这个包可以丢弃。

  • 8位协议:描述当前载荷部分内容是属于哪个协议的。(TCP/UDP)
  • 16位首部校验和:此处只需要针对首部进行校验,载荷部分(TCP/UDP数据报),自身已经有校验和了。

注意:此处如果校验和不一致,直接丢弃IP协议,不负责重传。如果上层使用TCP协议,TCP会在没收到ACK之后就重传。

  • 32位源IP地址/32位目的IP地址:是IP协议中最重要的部分。

使用三个点 . 把32位四个字节的数字给分割开。分成四个部分,每个部分分别使用0-255十进制整数表示。例如172.18.33.76

问题一16位总长度是否意味着一个IP数据报最大只能支持64KB?
答案否定的,一个IP数据报携带的数据载荷太长如果超过了64KB,就会在网络层针对数据进行拆分,把一个数据拆成多个IP数据报再分别发送给接收方,再重新拼装。

具体实现过程(以下是针对数据报超过64KB的操作):
发送方:把数据交给传输层(封装),传输层交给网络层(封装),网络层就把这个数据拆包,比如拆成两份,这两份再交给数据链路层,由以太网封装成两个数据帧。
接收方:数据链路层,针对两个数据帧进行分用,得到两个IP数据报,交给网络层,网络层针对这俩IP数据报进行解析,把里面的载荷拼成一个再交给传输层

解决IP地址不够用问题的三种方法

方法一: 动态分配IP地址

  • 这个方法没有从根本上增加IP地址,只是提高了利用率,治标不治本

方法二: NAT网络地址转换

  • 本质上是使用一个IP,代表一批设备也能够大大提高IP地址的利用率。使用端口号区分。

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

  • 内网IP/私网IP : 10.* , 172.16.* -172.31.* ,192.168.*
  • 外网IP/公网IP : 剩下的是公网IP
    NAT要求公网IP必须是唯一的,私网IP可以在不同的局域网中重复出现。

注意
如果某个私网里的设备想访问公网的设备,就需要对应的NAT设备(路由器),把IP地址进行映射,从而完成网络访问。
反之,公网的设备无法直接访问私网的设备,不同局域网里的私网设备没法直接相互访问。

方法三: IPv6(根本上解决IP不够用的问题)

  • 使用16字节表示IP地址

小结:

实际上,世界上仍然是以NAT+IPv4+动态分配来进行网络组建的,真正使用IPv6的地方非常少。

IP协议之地址管理

IP协议地址管理,把一个IP地址分成两个部分,一个叫做网络号,一个叫做主机号。

主机号/网络号

  • 主机号: 标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。
  • 网络号:标识网段,保证相互连接的两个网段具有不同的标识,也就是局域网

子网掩码

作用:用来给一个IP地址划分网络号和主机号

  • 子网掩码中1的部分就描述了IP有多少位是网络号。

特殊IP

  • 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。
  • 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据。
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1(测试程序是否能正常工作)

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

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

相关文章

sort ,uniq ,tr ,cut命令

目录 一、sort命令 1.格式 2.命令演示 2.1 选项 -n :按照数字大小排序 2.2选项 -r :反向排序 2.3选项 -u:隐藏多余行 2.4选项 -t :指定分隔符;-k :指定字符;-o :指定保存文件 二、uniq命令…

Git的安装与版本控制

这里写目录标题 原理安装基本使用gitee-IDEA协同开发成员邀请开发组成员指定仓库权限给当前仓库设定分支提交代码时必须向自己的分支提交合并分支 - 无冲突 原理 Git本地有四个工作区域: 工作目录(Working Directory)、暂存区(Stage/Index)、…

【Linux】笔记分享

目录 - 前言- 目录结构- 磁盘文件系统- 文件权限 ls -l 的内容文件及目录权限实际案例 修改权限 -chmod[change ...]第一种方式: 、-、 变更权限第二种方式:通过数字变更权限 修改文件所有者 -chown 修改文件所在组 -chgrp - 命令类型基础命令网络性能…

【数据类型-列表】------- PYTHON基础9

内容目录 一、数据类型-列表1. 列表1.1. 列表的截取 result List[start:end:step]1.2. 列表元素的修改 List[index] element1.3. 列表元素的删除 del List[index] 或 del List[start:end:step]1.4. 列表元素的拼接 “” 或者增量赋值运算符 “” 2. 列表常用内置函数 对象.内…

jdbc工具包

JDBC工具类 介绍 JDBC全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的JavaAPI。应用程序可通过这台API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。 JDBC实现细节 从…

深入浅出C语言——排序

文章目录 排序的概念常见的排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序hoare版本挖坑法前后指针版本快速排序的非递归形式 归并排序递归版本非递归版本 计数排序排序算法复杂度及稳定性分析 排序的概念 排序就是使用使一串记录,按照其中的某个或某些关…

vue3 nextTick()应用

在Vue3中,可以使用nextTick函数来延迟执行某些操作,这些操作会在下一次DOM更新周期之后执行。这个函数通常用于在数据更新后,等待DOM更新之后执行一些操作,比如获取DOM元素的尺寸、位置等。 nextTick() 例如,以下一个…

C语言—与坤(机)对弈

目录 设计思路 游戏运行效果 函数的声明 头文件game.h 游戏主体(源文件) 1.game.c 2.test.c 各文件的阐述 各部分的设计心得 1.打印菜单 2.初始化棋盘 3.打印棋盘 棋盘最终效果 1.打印数据 2.打印分割线 如何扩展为10 x 10 棋盘? 4.玩家下棋、电脑下…

mkv文件怎么转换成mp4?来看看这四种转换方式吧!

mkv文件怎么转换成mp4?在很多小伙伴看到,图片就是图片,音频就是音频,视频就是视频,它们展现给人们的效果都差不多。但实际上,不管是图片、视频还是音频文件,其中一个重要的区别在于它们的文件格…

照片尺寸怎么调整大小?三个方法,高效、快捷、安全!

照片尺寸怎么调整大小?照片是我们在日常生活和办公中经常会使用的文件类型之一。在制作各种文件、讲义、PPT、视频等内容时,图片都会成为重要的一部分。不同的图片格式和大小各有特点,有些图片虽然比较大但画质清晰,有些则方便传输…

选择排序,直接插入排序

目录 一、选择排序 1.基本思想 2.直接选择排序的流程 3.实验 二、直接插入排序法 1.基本思想 2.直接插入排序法的流程 3.实验 三、反向排序 1.实验 一、选择排序 与冒泡排序相比,直接选择排序的交换次数更少,所以速度会更快。 1.基本思想…

centos linux 配置私有网段并联网

文章目录 1. 创建虚拟机2. 虚拟机 A 配置网络3. 虚拟机 B 分配静态地址4. 测试 1. 创建虚拟机 vcenter 创建两台虚拟机A 、B,如何创建虚拟机请参考这里 虚拟机 A 具备两个网络接口,外网接口为 ens192 ip:192.168.22.6/20,网关为…

Golang tracing:与 OpenTelemetry、jaeger实现 跨服务 全链路追踪

使用 OpenTelemetry 链路追踪说明 工作中常常会遇到需要查看服务调用关系,比如用户请求了一个接口接口会调用其他grpc,http接口,或者内部的方法这样的调用链路,如果出现了问题,我们需要快速的定位问题,这时候就需要一个工具来帮助我们查看调用链路OpenTelemetry就是这样一个工…

Sui改进提案(SIPs)及其审核流程

SIPs提供了一个清晰透明的流程,使社区可以对Sui网络提出改进建议。 Sui基金会致力于打造一个开放协作的生态,因此推出了Sui改进提案(SIPs,Sui Improvement Proposals),这是一个记录社区为去中心化未来的发…

如何利用API做好电商,接口如何凋用关键字

一.随着互联网的快速发展,电子商务成为了众多企业的首选模式,而开放API则成为了电商业务中不可或缺的部分。API(Application Programming Interface),即应用程序接口,是软件系统不同组件之间交互的约定。电…

登录校验2.0

登录校验2.0 Filter Filter详解 过滤器Filter在使用中的一些细节,主要介绍一下3个方面的细节: 过滤器的执行流程过滤器的拦截路径配置过滤器链 执行流程 过滤器当中我们拦截到了请求之后,如果希望继续访问后面的web资源,就要…

内容编排与Kubernetes

第一节 内容编排与Kubernetes 为什么要用k8s 集群环境容器部署的困境,假设我们有数十台服务器。分别部署Nginx,redis,mysql,业务服务。如何合理的分配这些资源。这里就需要用到容器编排 容器编排 在实际集群环境下&#xff0…

线性结构-队列

队列是一种先进先出First In Fisrt Out,FIFO的线性表。 与一般的数组和链表不同,队列要求所有的数据只能从一端进入,从另一端离开。 输入进入的一端叫队尾rear,数据离开的一端叫队头front。 数据只能从队尾进入队列,从队头离开队…

VSCODE配置ROS编译环境

目录 一、安装插件 二、环境配置 2.1初始化工作空间 2.2配置VSCode 2.2.1创建功能包 2.2.2配置 c_cpp_properties.json 2.2.3配置 task.json 2.2.4配置 CMakeLists.txt 三、运行程序 3.1编译程序 3.2启动ros master 3.3执行可执行文件 用VSCode编辑ROS程序时&#xf…

linux 内核内存管理

物理内存 相关数据结构 page(页) Linux 内核内存管理的实现以 page 数据结构为核心,其他的内存管理设施都基于 page 数据结构,如 VMA 管理、缺页中断、RMAP、页面分配与回收等。page 数据结构定义在 include/linux/mm_types.h …