网络层 IP协议(1)

news2024/11/16 7:43:14

前置知识

主机:配有IP地址,但是不进行路由控制的设备

路由器:既配置了IP地址,又能进行路由控制的设备

节点:主机和路由器的总称

IP协议主要完成的任务就是

地址管理和路由选择

地址管理:使用一套地址体系,将网络设备的地址描述出来

路由选择:一个数据报如何从源地址到目的地址

IP协议头格式

下面开始解释这里的含义

1.4位版本号

这里表示的是IP地址使用的是IPv4还是IPv6的地址

2.4位首部长度

这里就是和TCP报头一样,表示的是IP报头也是可变长的 (同样单位是4字节)

0-15 代表这里最大长度仍然是60字节

3.8位服务类型(TOS) 

分别是三位优先权字段(已弃用),一位保留位和四位TOS字段

这里的四个字段分别表示 最小延时 最大吞吐量 最高可靠性(相对TCP的可靠性还是有差距,意思位相对的最高可靠性)  最小成本 

这里相对不同的应用场景会使用不同的服务,像ftp这样的程序使用最大吞吐量比较重要

4.16位总长度

表示了IP数据报整体占用多少个字节

这里就并不是64KB的限制了,因为IP协议包含了拆包组包的功能

比如说一个相对大的TCP包这里分三个IP数据包装

到对端就会按照顺序组包

5.16位标识 3位标志 13位片偏移

之所以把它们放在一起说是因为它们彼此是有联系的,

在数据较大的情况下分包就会用到这三个表示

16位标识:表示几个IP数据包是同一个数据拆分而成

3位标志:一位标志着数据是否分包,一位标志着结束的标志,一位则作为保留位

13位片偏移:排序的依据,标志着分块的变量在原报文中的位置

6.8位生存时间(TTL)

表示着报文在传输过程中的最大生存时间,这里的时间并不是真正的时间,衡量单位是"次",就是一个报文在网络传输中传输了多少次还没有到达目的地址那么就将其丢弃,常见的生存时间为32/64次

为啥这么少的次数就能达到对方??

因为其增长的速度是指数级别的增长

7.8位协议

表示上层协议的类型,也就是传输层使用什么协议

TCP/UDP/KCP???

8.16位首部检验和  和之前一样,检验报文传输过程中是否发生了比特翻转

9.32位源地址和目标地址 

表示发送方和接收方的地址

10.选项  和之前一样可有可无

如何管理IP地址

最早是使用IPv4地址来描述一个IP地址的

IPv4地址本质上是一个32位整数

为了方便表示,我们使用点分十进制的方式来表示

例如 192.168.1.1 

通过三个点来讲32位分成四个部分,每个部分取值范围分别为0-255

总共能表示一个42亿左右大小的数字

实际上现在全球使用网络的终端设备远远超过了42亿,给每个人分配一个网络地址都不够

所以我们提出了如下的解决方案

1. 动态分配IP地址(治标不治本)

全世界的设备也不可能同一时刻上网,利用现有空闲的IP地址

2.使用Nat机制(网络地址映射) 仍然治标不治本

常用方案

这个机制将IP地址分为两个大类 私网IP 公网IP

私网IP

  10.*       192.168.*     172.16 - 172.31.*

其余的是公网IP

要求公网上的设备使用公网IP  

局域网之间使用私网IP,只需要保证局域网之间的内部IP不重复即可,不同的局域网之间的IP允许重复

由于上述的设定,就有一些限制

1.公网设备相互访问,没有限制

2.局域网内设备相互访问,没有限制

3.局域网设备访问其他局域网设备,不允许访问

4.局域网设备访问公网设备,就需要对局域网设备进行IP地址转换

5.公网设备访问局域网设备是不允许主动访问的

试想下面一个场景

我的电脑访问一下服务器,

此时源ip就是 192.168.2.10

目的IP就是1.2.3.4

一般路由器会带有两个地址

WAN口地址 :可能是局域网IP也可能是公网IP 这里假设为5.6.7.8

LAN口地址:往往是局域网IP

这里想从这个路由器发起转发,这里源IP就变成了5.6.7.8,目的IP不变

不是每个路由器都会替换

数据包到达服务器的时候,服务器感受到的IP就是5.6.7.8

进行了上述替换本质上就是一个公网IP能对应多个设备,就起到了节省IP的效果

此时主机abc三个想与外界访问都只能通过路由器

'

此时这个NAT机制使得发出去的数据的源ip替换了,那么服务器怎么找到替换前的IP呢??

试想一个这样的场景

此时在转换的时候路由器就会保存一个路由表来记录替换前的ip和替换后的ip

此时服务器发送报文的时候,如果找到对应的表项的时候,就可以转发回去了

'

如果同一个局域网多个设备访问一个服务器,形式还会更复杂

保存的就是

替换前ip  替换后ip 服务器ip 源端口  目的端口

192.168.1.10 5.6.7.8  1.2.3.4 9090   10000 

192.168.1.20 5.6.7.8  1.2.3.4   9090  20000

这就区分了两者

IP报头 + TCP 报头 + 应用层数据包

就可以让路由器收到响应后看传输层的目的端口来比对一下

万一局域网中的两个设备端口也相同??

此时路由器也会对端口号进行映射

将端口也进行替换,假设两个端口号都是10000

就会将两个进行替换 也许是 10001 10002

所以路由器也会修改传输层的报头 

总结:

大部分情况下,访问的服务器不同,此时使用端口号就能区分

少数情况下,访问的是相同的服务器,此时就可以映射不同的端口来区分

3.IPv6策略(根本解决问题)

将IP地址从32位增加成了128位

相当于变成了2^128 个地址

"给每粒沙子都分配一个地址"

迟迟没有完全落地  因为所有的硬件设备都得换,而且对体验提升不大

但是中国已经覆盖到70%,虽然使用率一般,但是防止了美国在IP地址上的垄断操作

避免美国直接给你断网

今天的分享就到这里,待续.....

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

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

相关文章

摄影分享|基于Springboot的摄影分享网站设计与实现(源码+数据库+文档)

摄影分享网站目录 目录 基于Springboot的摄影分享网站设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、图片素材管理 3、视频素材管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐…

excel 选中指定区域

问题 excel 选中指定区域 详细问题 笔者有一个excel数据集,数据量较大,如何快速选中指定区域 解决方案 步骤1、 点击起始单元格 确定单元格坐标(建议直接CtrlC复制至剪贴板) 具体操作入下图所示 步骤2、 点击结束单元格 …

数与抽象之自然数

自然数 “自然数的抽象与内在属性:图7中的纯粹五性” “自然”是数学家对我们所熟悉的1,2,3,4这样的数字所赋予的称呼。自然数是最基本的数学对象,但它们似乎并没有引导我们去抽象地思考。毕竟,单单一个数…

【Linux网络编程一】网络基础(网络框架)

【Linux网络编程一】网络基础(网络框架) 一.什么是协议1.通信问题2.协议本质3.网络协议标准 二.协议分层1.为什么协议要分层2.如何具体的分层 三.操作系统OS与网络协议栈的关系1.核心点:网络通信贯穿协议栈 四.局域网中通信的基本原理1.封装&…

【教学类-34-01】20240130纸尺1.0 (A4横版5条,刻度25*5=125CM)

作品展示: 背景需求: 大3班一位孩子用“骰子统计纸”制作了一个身高刻度表 【教学类-40-01】A4骰子纸模制作1.0(飞机形 5.5CM纸盒骰子1个记录纸1条)(点数是不同的符号图案)-CSDN博客文章浏览阅读160次。【…

查看阿里云maven仓中某个库有哪些版本

起因 最近项目上有做视频业务,方案是使用阿里云的短视频服务,其中也有使用到阿里云的上传SDK,过程中有遇一个上传SDK的内部崩溃,崩溃栈如下: Back traces starts. java.lang.NullPointerException: Attempt to invok…

【Qt】—— Qt Creator界⾯认识

目录 (一)左边栏 (二)代码编辑区 (三)UI设计界⾯ (四)构建区 (一)左边栏 在编辑模式下,左边竖排的两个窗⼝叫做"边栏"。 ①是项⽬…

指针的深入理解(三)

这一节主要使用复习回调函数, 利用冒泡模拟实现qsort函数。 qsort 排序使用冒泡排序,主要难点在于运用元素个数和字节数以及基地址控制元素的比较: if里面使用了一个判断函数,qsort可以排序任意的数据,原因就是因为可…

立体边界,让arcgis出图更酷炫一些

就是这样子的那个图—— 本期我们还是用长沙市为例, 来手把手的演示制作立体边界, 就是这个样子的边界—— 第一步—准备底图 其实你准备什么底图都可以哈,例如调用天地图、下载个影像图,或者用其他什么的底图,都是…

如何使用Docker部署JSON Crack

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序,能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

【数据结构】(分治策略)中位数的查询和最接近点对问题

中位数查询: 寻找一组字符串中第k小的数,返回其值和下标。 不可以有重复值(在缩小规模的时候,会导致程序死循环) 相对位置的转换体现了分治策略的思想。> 划分函数 int partition(int *nums,int left, int rig…

Unity点乘和叉乘

前言 Unity中经常会用到向量的运算来计算目标的方位&#xff0c;朝向&#xff0c;角度等相关数据&#xff0c;而这些计算中最常用的就是点乘和叉乘 点乘 一、点乘是什么&#xff1f; 定义&#xff1a;ab|a||b|cos<a,b> 【注&#xff1a;小写字母表示向量&#xff0c;&…

精选70套前端数据可视化大屏

分享70款还不错的前端数据可视化大屏源码 其中包含行业&#xff1a;智慧社区、智慧物业、政务系统、智慧交通、智慧工程、智慧医疗、智慧金融银行等&#xff0c;全网最新、最多&#xff0c;最全、最酷、最炫大数据可视化模板。 你可以点击在线预览查看该源码资源的最终展示效果…

第九节HarmonyOS 常用基础组件22-Marquee

1、描述 跑马灯组件&#xff0c;用于滚动展示一段单行文本&#xff0c;仅当文本内容宽度超过跑马灯组件宽度时滚动。 2、接口 Marquee(value:{start:boolean, step?:number, loop?:number, fromStart?: boolean ,src:string}) 3、参数 参数名 参数类型 必填 描述 st…

vue+element 换肤功能

1.首先建深色和浅色两个主题样式变量样式表&#xff0c;样式表名和按钮中传入的值一样&#xff0c;本例中起名为default.scss和dark.scss 2.在data中定义主题变量名 zTheme:‘defalut’&#xff0c;默认引用defalut.scss, 在点击按钮时切换引用的样式表&#xff0c;达到换肤效果…

大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置

上一篇&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 目录 1. &#x1f959;Idea中配置Live Templates来快速生成代码片段 2. &#x1f959;Idea中配置文件模板自定义初始代码 3.&#x1f959;设置spark-submit提交程…

微软技术专家带你学 AI|Azure 机器学习:创建自己的模型

点击蓝字 关注我们 编辑&#xff1a;Alan Wang 排版&#xff1a;Rani Sun 微软技术专家带你学 AI 新的一年&#xff0c;为帮助开发者们在 Azure 上掌握人工智能&#xff0c;我们特别带来「微软技术专家带你学 AI」系列&#xff0c;通过4期的课程&#xff0c;带大家从机器学习的…

Kotlin:用源码来深入理解 ‘StateFlow和SharedFlow的区别和联系‘

Kotlin&#xff1a;用源码来深入理解 ‘StateFlow和SharedFlow的区别和联系’ 在这篇文章中&#xff0c;我们将深入研究Kotlin中的StateFlow和SharedFlow&#xff0c;以及它们的相似之处和不同之处。我们将通过查看它们的源代码来理解它们的工作原理&#xff0c;这将帮助我们更…

力扣经典题:用队列表示栈

1. 基本思路&#xff1a;栈具有先入后出的性质&#xff0c;队列具有先入先出的性质&#xff0c;所以栈的栈顶元素就是队的队尾元素&#xff0c;第二个函数要求移除并返回栈顶元素&#xff0c;要满足两个要求&#xff1a;其一是要保证除栈顶外的其它元素可查&#xff0c;二是要…

nodejs+vue+ElementUi高校创业项目申报系统w6f1g

此系统设计主要采用的是nodejs语言来进行开发&#xff0c;采用vue框架技术&#xff0c;框架分为三层&#xff0c;分别是控制层Controller&#xff0c;业务处理层Service&#xff0c;持久层dao&#xff0c;能够采用多层次管理开发&#xff0c;对于各个模块设计制作有一定的安全性…