【网络原理】网络层 IP 协议

news2025/2/22 14:08:17

请添加图片描述

✨个人主页:bit me👇
✨当前专栏:Java EE初阶👇

目 录

  • 🍀一. IP协议报头格式
  • 🌻二. IP 地址
  • 🌿三. 路由选择

网络层协议的工作:

  1. 地址管理
  2. 路由选择(规划路径)

网络层中,最核心的协议就是 IP 协议

🍀一. IP协议报头格式

协议头格式如下:
在这里插入图片描述

  • 4 位版本号当前 IP 协议的版本号,有 4 和 6 ,此文我们以 IPv4 为主!
  • 4 位首部长度IP 报头的长度。带有选项字段(可以有,也可以没有,可以有一个,也可以有多个)(0 - 15 的单位是 4 个字节!最长是 60 个字节,最短是 20 个字节)
  • 8位服务类型(TOS)(Type Of Service)其实有效位为 4 位,另外 4 位是保留位。

有效的 4 位是:4 个服务类型的 bit 位是互斥的,一个报文里面 4 个位只有一个可以是 1 ,剩下的都是 0,用来表示当前的 服务类型。(4位 TOS 分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。)可以根据需求来切换到不同的形态,虽然提供了这个,但是影响是有限的,实际开发的时候,很少真的手动调整 TOS。
 
4 个保留位:现在不用,但是先占个位置,后面可能要用,给后续的拓展留下余地。

  • 16 位总长度(字节数)一个 IP 数据报有多长(报头 + 载荷)。载荷部分就是一个完整的传输层数据报!(比如完整的 TCP 数据报)

16 位意味着,一个 IP 数据报最大就是 64 KB?
 
例如我们前面学的 UDP,UDP 是被 64 KB限制死了的,UDP 想要传输更大的应用层数据报,需要在代码中手动拆包组包。而当前的 IP 协议,自己内置了拆包组包的功能!如果搭载太长了的 TCP 数据报,此时 IP 就会分包!每个包来携带 TCP 的一部分数据!拆包组包在这里是不需要我们自己动手的,它自己携带有(下面三个就都是的)

  • 16 位标识:同一个包拆出来的若干个小的包,标识是一样的
  • 3 位标识:说是 3 位,其中 1 位是最关键的,标识结束标记~,1 后面还有,0 后面没了(类似于 链表的 null),还有一个标记描述是否分包了!
  • 13 位片偏移:描述了拆出来的每个包的先后顺序

在这里插入图片描述
例如网络层构造出上述数据报之后,发现载荷部分太长了,超出最大长度限制了,于是就进行拆包!
在这里插入图片描述

片偏移大小不是随便给的,内部有规则进行计算,此处我们不多了解,我们只需要知道小的在前,大的在后即可,即使接收方 “后发先至” 了,也可以通过片偏移把若干个包进行重新排序组合。

如果需要在 UDP 这里,实现拆包组包,可以参考此处 IP 的机制上述三个字段

  • 8位生存时间(TTL):描述了这个 IP 数据报,还能在网络上存活多久!

网络环境非常复杂,例如 A 给 B 发送一个 IP 数据报,数据报就会沿着网络尝试去找 B 的位置,如果 B 存在,能找到,就直接发过去了,如果 B 不存在,找了半天没找到,就要放弃了。
 
此处的整数并不是 “秒” 这样的时间单位,而是表示次数!能够被转发的次数~,例如给定一个初始 TTL 为 64(32,64,128),每次数据报经过一个路由器的转发,TTL -= 1,一旦 TTL = 0,则认为这个 IP 就找不到,包就要丢弃

  • 8 位协议:表示了传输层使用了哪个协议
  • 16 位首部校验和:校验和和前面的校验和都是一样的,这个校验和只针对 “首部” ,而不对数据部分校验,数据部分的校验自然是传输层的协议来负责。
  • 32位源 IP 地址和32位目标 IP 地址:表示发送端和接收端。
    在这里插入图片描述
    类似于一个包裹的传输,上述四个元素必不可少

IP 地址本质上是一个 32 位的整数,因为 32 位的整数不方便看,也不方便记,因此就发明出了另外一种表示方式:点分十进制~。使用三个点把 32 位的整数,分成四个部分(每个部分 8 位,1 个字节)每个部分取值 0 - 255。


🌻二. IP 地址

IP 地址能保证唯一性吗?
 
能否给每一个主机都分配一个唯一的 IP 地址呢?(最初设计 IP 协议初心是这样的),但是后来由于网络发展迅速,32 位数字表示的 42 亿 9 千万不够用了,那么该如何解决 IP 地址不够用的问题呢?

  1. 动态分配 IP 地址(DHCP)

一个设备上网就分配 IP 地址,不上网就不分配 IP 地址

  1. NAT, IP 地址转换

把 IP 分成两个大类
 

  1. 内网 IP (局域网使用的 IP)
  2. 外网 IP (广域网中使用的 IP)

 
允许局域网之间的内网 IP 重复,但是外网 IP 要保持唯一(同一个局域网中的 IP 地址不能一样,但是不同局域网中的 IP 地址允许重复)
 
NAT 机制,本质就是用一个外网 IP 代表了一大堆(可能是一个小区,也可能是多个小区,几万人的设备)内网的设备
 
内网 IP 有三类:

  • 10.*
  • 172.16.* - 172.31.*
  • 192.168.*

 
这三类 IP 都是内网,其他就是外网 IP 了

  1. IPv6 :解决 IP 不够用问题的终极方案

IPv6相当于是另一个网络层的协议,和IPv4可以视为是完全不同的两个协议,而不是IPv4的升级版~~

lPv6 使用 16 字节(128位)这样的值表示IP地址了(2 ^ 128 = 2 ^ 32 * 2 ^ 32* 2 ^ 32* 2 ^ 32)(相当于 42 亿 *42 亿 *42 亿 *42 亿 *,所以 IP 地址完全够了)

IPv4 是 4 个字节(2 ^ 32)

此处还有一个很大的问题就是 IPv4 和 IPv6 不兼容的问题,现存的支持 IPv4 的网络设备(路由器,网卡,交换机…) 不一定支持IPv6。

IP 地址 是一个四个字节的整数,为了更好的进行组网,对于这个 IP 地址又做出了一些更详细的划分,把一个 IP 分成两段,前一半叫做叫做网络号,后一半叫做主机号。

如何划分呢?以前是把 IP 地址分为五类,A,B,C,D,E类,但是目前这种分法很少见,现在主流的分法是 CIDR。引入了一个 “子网掩码”,通过这个来区分哪个是网络号,哪个部分是主机号,也是一个 32 位的整数,左侧都是 1 ,右侧都是 0。255.255.255.0:标记为 1 的部分,就表示了这部分 IP 是网络号

同一个局域网内部,设备之间的网络号,都是一样的,主机号是不同的;两个相邻的局域网(同一个路由器连接的两个局域网),网络号是不一样的

192.168.0.1 / 192.168.1.1 主机号为 .1 的 IP ,通常用来作为网关(关:入口,出口)(不是绝对的,常见的默认的情况,完全可以手动配置成其他的 IP)

192.168.0.0 / 192.168.1.0 主机号为 .0 的 IP 也就是网络号(表示当前局域网 / 网段)

192.168.0.255 / 192.168.1.255 主机号为 255 的 IP 是广播 IP(如果我们往 192.168.0.255 这个 IP 地址上发送数据,此时整个 192.168.0 这个局域网中所有的设备都会收到这个包)

UDP 实现广播,就可以搭配这个广播 IP

127.0.0.1 / 127.* 环回 IP(表示主机自己),每个主机上都有表示一个虚拟的表示环回 IP 的网卡


🌿三. 路由选择

和地图寻路一样,从 A 到 B 两点之间的路径规划就是路由选择,相比于高德地图或者百度地图,路由规划没有那么大的空间来收集每个地方的位置信息,每个路由器就只能知道位置信息的一部分,它只能只能相邻的一些设备怎么走或者可以知道相邻的设备。路由选择这里的数据转发,就相当于原始的寻路方式:问路!!

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

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

相关文章

如何解决多个node版本问题?

1. 安装nvm 1.1 下载nvm:https://github.com/coreybutler/nvm-windows/releases 注意:路径中不得有空格 接着的直接下一步直至安装完成 安装完成后,打开安装目录 打开settings.txt文件,文件内容如下 在文档内容后面加上下面两行代…

朴素贝叶斯算法的介绍

一、朴素贝叶斯算法的介绍 1.什么是朴素贝叶斯算法? 朴素贝叶斯算法(Naive Bayes Algorithm)是一种基于贝叶斯定理和特征独立性假设的概率分类算法。它被广泛应用于文本分类、垃圾邮件过滤、情感分析等任务。 朴素贝叶斯算法的基本思想是基…

OpenMMLab AI实战营第二期(1)计算机视觉与OpenMMLab概述

通过今天课程的学习,算是比较大的扩展了我的视野,近期主要学一些强化学习的知识,没有想到计算机视觉领域已经发展的这么迅猛,很多以前只是在脑海里想象的计算机视觉应用场景,原来OpenMMLab已经实现了。我比较对目标检测…

人脸识别(Java+ Face++实现)

人脸识别(Java Face实现) 一. 概述 Face的核心技术是基于深度学习的人脸识别技术,其算法在准确率和速度方面都处于领先地位。该公司的产品和服务包括人脸识别SDK、人脸识别API、人脸比对服务、人脸检测服务、活体检测服务等。这些产品和服务广…

在树莓派3B+上安装Pytorch1.7

在树莓派3B上安装Pytorch1.7(应该是最简单的方法了)_package libopenblas-dev has no installation cand_Chauncey_Wang的博客-CSDN博客由于项目要求,我需要在树莓派上安装pytorch这就有几个问题,首先吧,咱们和外面之间有一道长城&#xff0c…

计算机网络 七大性能指标【速率】【带宽】【吞吐量】【时延】【时延带宽积】【往返时间】【利用率】

计算机网络 速率(bit/s 数据的传送速率)带宽(频域-频带宽度,时域-最高速率)吞吐量(单位时间的 数据量)时延(一端传送到另一端所需的时间)1. 发送时延(发送所用…

来自6种编程语言的祝福:欢乐六一儿童节

六一儿童节的由来是为了纪念在法西斯侵略战争中死难的儿童,反对帝国主义的虐杀和毒害儿童,保障儿童权利。1949年11月,国际民主妇女联合会在莫斯科召开大会,决定每年的6月1日为全世界少年儿童的节日,即国际儿童节。 六一…

RPC(1):软件项目架构变化简述

1单体架构 1.1架构图 单体架构就是一个项目里面包含这个项目中全部代码。一个应用搞定全部功能。 DNS 服务器可以是单映射,也可以配置多个映射。 1.2软件代码结构 在单体架构项目中,团队都是通过包(package)进行区分每个模块。 总体包结构&#xff…

Android进阶 :实现自定义View

Android进阶:实现自定义View 导语 有时候我们会想要实现一些复杂或者是独特的组件效果,这时候系统提供的组件可能不能满足我们的需求,这个时候我们一般就会有两个解决办法,一是上网查找开源的控件库,一些流行的开源库…

【JUnit技术专题】「入门到精通系列」手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(夯实功底篇)

手把手零基础带你玩转单元测试,让你的代码更加“强壮” 前言介绍JUnit是什么?JUnit和xUnit之间的关系 JUnit的基本概念JUnit的特点什么是一个单元测试用例 JUnit的用法JUnit的最佳实践案例分析创建一个类创建 Test Case 类创建 Test Runner 类 JUnit总体…

Web实验二 CSS基本样式实验

实验原理 通过创建CSS样式文件,理解CSS样式基本属性作用及意义。 实验目的 理解CSS基本概念及功能 理解CSS样式的设计原则 理解并掌握CSS样式的基本声明方法 理解并掌握多种CSS选择器的使用方法 理解并掌握字文本、表格、超链接等元素常用属性的使用方法 理解并掌握…

机器人学:DH参数总结(传统DH方法和改进DH方法)

1. 传统DH参数方法 1.1 确定坐标系的方法 定义:杆 i i i的近端是关节 i i i,远端是关节 i 1 i1 i1. 【下面的规则参考上面的图看得更清楚】 对于 n n n自由度机器人,可用以下步骤建立与各杆件 i ( i 0 , 1 , … , n ) i(i0,1,…,n) i(i0,…

【iOS底层探索- Block原理分析-循环引用】

文章目录 前言准备工作1. Block的分类2. Block的内存分析捕获外部变量引用计数的变化堆栈释放的差异总结 3. Block的循环引用3.1 什么是循环引用?案例引入 循环引用解决方法1. 强弱共舞2. 手动中断循环引用3. 参数形式解决循环引用(block传参&#xff09…

汇编指令执行过程及CS与IP和DS寄存器关系与变化

内存指令及寄存器初始值: CS:2000H IP:0 DS:1000H AX:0 BX:0 上面在内存中的汇编指令是如何执行的? 验证: 在debug下用a指令先向内存写入下面指令,然后用u指令查看 mov ax,2000 mov ds,ax mov ax,[0008] mov ax,[0002] 在debug下用a指令先向内存写入下面指令,然后用u指…

Computer之Compilation:Cmake的简介、安装、案例应用之详细攻略

Computer之Compilation:Cmake的简介、安装、案例应用之详细攻略 目录 Cmake的简介 Cmake的安装 1、官方下载 2、执行安装程序,并按照提示进行安装 3、验证测试 Cmake的案例应用 Cmake的简介 CMake(Cross-platform Make)是一…

【嵌入式烧录/刷写文件】-1.7-将一个文本文件转换为Motorola S-record(S19/SREC/mot/SX)文件

案例背景(共5页精讲): 有如下两个文本文件(*.txt,*.ini,*.asc…)转换成Motorola S-record(S19/SREC/mot/SX)文件。常用于Key密钥,signature签名…的导入,或对一段数据计算出hex记录的最后一个字…

服务器性能优化方法

文章目录 服务器性能优化方法什么是服务器并发处理能力?什么方法衡量服务器的并发能力?怎么提高服务器的并发处理能力?**1,提高CPU并发计算能力**(1)多进程&多线程(2)减少进程切…

spring cloud搭建(eureka)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习新东西是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习…

力扣高频SQL50题(基础版)——第二天

力扣高频SQL50题(基础版)——第二天 1 文章浏览Ⅰ 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # Write your MySQL query statement below SELECT distinct author_id id FROM Views WHERE author_idviewer_id ORDER BY id asc1.3 运行截图 2 无…

基于MSP430送药小车 ----- 基础篇【2021年全国电赛(F题)】

文章目录 一、赛题1. 任务2. 要求3. 说明 二、构思 分析1. 引脚利用2. PID算法3. 灰度循迹及标志位4. 视觉模块5. 直角转弯、原地转向 三、硬件清单四、逻辑设计1. 近端送药2. 中端送药3. 远端送药 五、程序设计1. OpenMV2. 灰度循迹3. 装药卸药 总结 一、赛题 1. 任务 设计并…