【计网】从零开始认识IP协议 --- 认识网络层,认识IP报头结构

在这里插入图片描述


从零开始认识IP协议

  • 1 网络层协议
    • 1.1 初步认识IP协议
    • 1.2 初步理解IP地址
  • 2 IP协议报头
  • 3 初步理解网段划分

1 网络层协议

1.1 初步认识IP协议

我们已经熟悉了传输层中的UDP和TCP协议,接下来我们来接触网络层的协议:
在这里插入图片描述

网络层在计算机网络中的意义主要体现在它提供了一个可靠、高效且透明的数据传输机制,使得不同网络之间能够互联互通,并为上层应用提供了稳定的服务。这是实现全球互联网和现代通信基础设施的关键所在。

那么网络层是如何进行数据传输的呢?通过网络层协议,这里介绍IP协议:
IP协议下,主要包含两部分:

  • 主机: 配有 IP 地址, 但是不进行路由控制的设备;
  • 路由器: 即配有 IP 地址, 又能进行路由控制;
  • 节点: 主机和路由器的统称;以后主机和路由器都使用节点说明!

在这里插入图片描述
在上图中,主机B向将数据传送给主机C,那么就会面临一个路径选择的问题!根据目的IP要进一个路径选择,选取最合适的路径传输信息!**IP提供了一种能力,将数据从主机B跨网络送至主机C的能力!**这里举个例子:

小马是学霸级别的学生,平时不怎么学习,但是考试经常考到第一名。这次的省联考要到了,小马竟然开始认真复习了,大家都认为小马有能力考到省第一。这种能力是一种观点,小马有很大的概率做成这件事情!
小马的父亲大马是学校的教务处主任,如果今天我们希望每次考试都考第一名,那么光靠小马一个人肯定是无法保证每次都是第一名的。当小马在一次月考中没有考到第一名,大马立刻重新就安排一个新考试!重新进行考试!直到小马考到第一名!

在这个例子中,主任父亲和学霸小马就能保证小马一定可以考到第一名!小马提供了考到第一名的能力;大马提供了保证第一名的策略。再看IP协议中,IP协议就提供了将数据从主机B发送到主机C的能力!传输层的TCP协议通过将数据从主机B发送到主机C的策略!

所以IP协议只提供一种能力,TCP协议通过可靠的通信策略!

1.2 初步理解IP地址

IP地址是XXX.YYY.ZZZ.AAA的风格的点分十进制!
在这里插入图片描述
ip = 网络号 + 主机号。

网络中的一台主机,一定是属于一个子网的,在一个子网中的设备的IP地址是很类似的!唐僧取经的故事中,唐僧的目的地是西天大雷音寺,首先是在西天,其次是在大雷音寺!这个西天就可以理解为子网,找到子网之后,就要寻找大雷音寺在哪里了!

2 IP协议报头

IP协议的报头是也是要进行分用和分离,IP协议的标准长度是20字节,通过对报文的前20字节进行选取就能分离报头和数据。我们来看IP协议的报头结构和TCP是很类似的!
在这里插入图片描述

  • 4 位版本号(version): 指定 IP 协议的版本, 对于 IPv4 来说, 就是 4

报文到达目标主机之后,可以根据4位首部长度确定IP报头结构,也就可以进行报头和数据的分离!
接下来我们来谈4位板本这个字段,IP协议中有:

  1. IPV4 :使用4字节表示一个IP地址,一般默认都是这个版本。
  2. IPV6:使用16字节表示一个IP地址

在网络刚刚诞生的时候使用的是IPV4,只有4字节。网络发展到今天,4字节的IP地址已经不够使用了!解决方案有NAT,最好的解决方案是IPV6,使用16字节表示IP地址!所以也就说明IPV4和IPv6并不兼容。并且由于操作系统,路由器以及一些硬件大部分都是按照IPV4版本设计的,所以目前不能一下子全都更换位IPv6版本。

  • 8 位服务类型(Type Of Service): 3 位优先权字段(已经弃用),4 位 TOS 字段,和1位保留字段(必须置为 0)。4 位 TOS 分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突, 只能选择一个 。对于 ssh/telnet 这样的应用程序, 最小延时比较重要;对于 ftp 这样的程序, 最大吞吐量比较重要。

  • 4位首部长度表示IP头部的长度,以32位字(4字节)为单位计算。因此,TCP头部的最大长度为15 * 4 = 60字节。

  • 16位总长度(Total Length)是表示整个IP数据包的长度(包括头部和数据),以字节为单位。

  • 8位协议(Protocol)指示数据部分使用的协议(例如TCP、UDP、ICMP等)。

  • 32位源IP地址(Source IP Address):IPv6版本是128位,表示发送数据包的源主机IP地址。

  • 32位目的IP地址(Destination IP Address):IPv6版本是128位,表示接收数据包的目的主机IP地址。

IP协议可以通过报头识别到报头的长度和整个数据包的长度,这个是与TCP协议报头结构不同的!IP协议报头中包含了目的IP和源IP以及协议号,TCP协议中包含了源端口和目的端口。**这5部分结合,组成“西天大雷音寺”,可以准确的找到目标进程!**源IP,源端口,目的IP,目的端口,协议号五元组标识一个网络通信!

3 初步理解网段划分

网段划分是计算机网络中一个十分重要的概念!一定要理解清楚!今天初步了解一下网段划分!
IPV4版本中IP地址是一个有限的资源,存在竞争关系!必须经过合理的划分来分配给不同的国家区域!

IP 地址分为两个部分, 网络号和主机号:

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

在这里插入图片描述
在同一个网络中,主机的IP地址是一致的,所以区分不同主机的方式是通过主机号来进行区分!我们的设备都是连接的对应的路由器,路由器一定有两个不同的网卡,既属于下层网络,也属于上层网络。是进行网络通信的中转站!所以一般路由器的主机号是1。

  • 路由器有构建子网和路由的能力!在路由器的背面一般都标有路由器的IP地址!
    在这里插入图片描述
    我们可以访问这个地址,通过用户名和密码管理我们的路由器!平时手机电脑连接路由器时,就是在路由器中申请一个主机号!

通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的 IP 地址都不相同。

IP地址资源是有限的,对于国家,地区,大学…都想要对应的IP地址,所以就要对IP地址资源进行划分,划分的很简单:A类 ,非A类(B类,C类…),通过第一个比特位区分是否是A类。

  • A类IP:0后的7位为网络号,一共 2 7 2^{7} 27个网络号, 2 24 2^{24} 224个主机号。
  • B类IP:10后的14位为网络号,一共 2 14 2^{14} 214个网络号, 2 16 2^{16} 216个主机号。

在这里插入图片描述
在互联网刚诞生的时候,这种划分方式是可以满足需求的,但是随着互联网的发展,这种划分方式使IP地址远远不够使用了!大多数组织都申请 B 类网络地址, 导致 B 类地址很快就分配完了, 而 A 类却浪费了大量地址;

例如,申请了一个 B 类地址,理论上一个子网内能允许 6 万 5 千多个主机,A 类 地址的子网内的主机数更多。然而实际网络架设中,不会存在一个子网内有这么多的情况。因此大量的 IP 地址都被浪费掉了!

这种划分方式就被丢弃了!于是就有了一个新的划分方式,称为 CIDR(Classless Interdomain Routing)。这种方案的依据是每个IP一定隶属于一个子网:

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  • 子网掩码也是一个 32 位的正整数。通常用一串 “0” 来结尾;
  • 将 IP 地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号;
  • 网络号和主机号的划分与这个 IP 地址是 A 类、 B 类还是 C 类无关。

在这里插入图片描述
我们可以通过我们的电脑来查看一下:
在这里插入图片描述
子网掩码都是在路由器中配置好的!通过对报文的目的IP进行掩码操作,可以确定前往的网络号是多少!

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

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

相关文章

线段树

文章目录 1 线段树概念2 线段树操作2.1 建树2.2 区间修改2.3 区间查询2.4 练习题目 3 线段树进阶3.1 乘法线段树 * 补充:快读快写4 End 1 线段树概念 线段树 ( S e g m e n t T r e e ) (Segment\ Tree) (Segment Tree) 是 O I OI OI 中的常用算法。线段树是一种…

PHP-FPM 性能配置优化

4 核 8 G 服务器大约可以开启 500 个 PHP-FPM,极限吞吐量在 580 qps (Query Per Second 每秒查询数)左右。 Nginx php-fpm 是怎么工作的? php-fpm 全称是 PHP FastCGI Process Manager 的简称,从名字可得知&#xff…

基于SSM的冰淇淋在线购买网站【附源码】

基于SSM的冰淇淋在线购买网站 效果如下: 系统首页界面 用户登录界面 冰淇淋页面 每日秒杀页面 个人中心界面 管理员登录界面 管理员功能界面 口味管理界面 冰淇淋管理界面 每日秒杀管理界面 视频教学管理界面 研究背景 近些年,随着中国经济发展&#…

订购 Claude AI 的第二天 它独自完成 文字转语音 flask应用

图二里,删除几个无关的 chats 全程我做的工作:向 AI 提要求,copy / paste 代码,在venv验证运行,向 AI 反馈,总共用了3个 chats.(图中的只有一个 Chat, 删掉的另外两个: Python 库安…

海外云手机实现高效的海外社交媒体营销

随着全球化的深入发展,越来越多的中国企业走向国际市场,尤其是B2B外贸企业,海外社交媒体营销已成为其扩大市场的重要手段。在复杂多变的海外市场环境中,如何有效提高营销效率并降低运营风险,成为了众多企业的首要任务。…

计算机网络(十二) —— 高级IO

#1024程序员节 | 征文# 目录 一,预备 1.1 重新理解IO 1.2 五种IO模型 1.3 非阻塞IO 二,select 2.1 关于select 2.2 select接口参数解释 2.3 timeval结构体和fd_set类型 2.4 socket就绪条件 2.5 select基本工作流程 2.6 简单select的服务器代…

【mysql进阶】4-8 临时表空间

临时表空间 - Temporary Tablespaces 1 什么是临时表? ✅ 解答问题 临时表存储的是临时数据,不能永久的存储数据,⼀般在复杂的查询或计算过程中⽤来存储过渡的中间结果,MySQL在执⾏查询与计算的过程中会⾃动⽣成临时表&#xff0c…

C++ 抛异常

目录 一.抛异常与运行崩溃的区别 1.运行崩溃 2.抛异常 二.抛异常机制存在的意义 1.清晰的处理错误 2.结构化的错误管理 3.跨函数传递错误信息 4.异常对象多态性 三.抛异常的使用方法 1.抛出异常 (throw) 2.捕获异常 (catch) 3.标准异常类 四.抛异常的处理机制 1.抛…

2024“源鲁杯“高校网络安全技能大赛-Misc-WP

Round 1 hide_png 题目给了一张图片,flag就在图片上,不过不太明显,写个python脚本处理一下 from PIL import Image ​ # 打开图像并转换为RGB模式 img Image.open("./attachments.png").convert("RGB") ​ # 获取图像…

rabbitmq 使用注意事项

1,注意开启的端口号,一共四个端口号,1883是mqtt连接的端口号,如果没开,是连接不上的需要手动起mqtt插件。 //开始mqtt插件服务 rabbitmq-plugins enable rabbitmq_mqtt 2,15672端口是http网页登录的管理后…

Next Stack技术联盟成立:打造新一代基础软件技术栈

北京,2024 年 10 月 —— 在全球数字化浪潮的推动下,中国基础软件产业迎来了前所未有的创新机遇与挑战。为应对这一时代任务并推动中国基础软件的全球化进程,观测云携手多家领先技术企业正式宣布成立 Next Stack 技术联盟。这一联盟旨在汇聚国…

接口测试(五)jmeter——get请求

一、get请求——短信验证码(示例仅供参考) 1. get请求:传参数据直接拼接在地址后面,jmeter不需要设置请求头content-type 注:短信验证码接口,返回结果中不会返回短信验证码,是存在数据库表中&a…

Maven项目管理工具-初始+环境配置

1. Maven的概念 1.1. 什么是Maven Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。 理想的项目构建:高度自动化,跨平台,可重用的组件,标准化的流程 maven能够自动下载依…

Mybatis-plus-入门

Mybatis-plus-入门 1&#xff1a;介绍 mybatis-plus的官网&#xff1a;MyBatis-Plus &#x1f680; 为简化开发而生 2: 快速入门 步骤&#xff1a; 1&#xff1a;引入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>my…

STM32使用硬件I2C读写AT24C02 EEPROM(一)

文章目录 一、软件准备配置I2C接口&#xff1a;生成工程代码&#xff1a; 二、编写驱动程序初始化I2C接口&#xff1a;编写读写函数&#xff1a; 三、调试与测试 前面讲到使用软件模拟i2c读写AT24C02&#xff0c;这篇文章使用stm32 提供的硬件i2c读写&#xff0c;看看怎么回事 …

gin入门教程(3):创建第一个 HTTP 服务器

首先设置golang github代理&#xff0c;可解决拉取git包的时候&#xff0c;无法拉取的问题&#xff1a; export GOPROXYhttps://goproxy.io再查看自己的go版本&#xff1a; go version我这里的版本是&#xff1a;go1.23.2 linux/arm64 准备工作做好之后就可以进行开发了 3.…

【AscendC算子开发】笔记1 算子开发哲学

重看这门课&#xff0c;有很多内容的认识更深了&#xff0c;做一些记录。 为什么不能将网络节点融合 这个问题关联到另一个问题&#xff1a;为什么我们需要激活函数&#xff1f; 使用线性的神经元堆叠得到的方程最后也是线性方程&#xff0c;无法表征非线性的信息&#xff0c…

软考(网工)——网络安全

文章目录 &#x1f550;网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型 &#x1f551;现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 &#x1f552;Hash …

Node.js:深入探秘 CommonJS 模块化的奥秘

在Node.js出现之前&#xff0c;服务端JavaScript基本上处于一片荒芜的境况&#xff0c;而当时也没有出现ES6的模块化规范。因此&#xff0c;Node.js采用了当时比较先进的一种模块化规范来实现服务端JavaScript的模块化机制&#xff0c;它就是CommonJS&#xff0c;有时也简称为C…

react18中使用redux管理公共数据仓库实现数据immutable更新

Immutable.js出自Facebook&#xff0c;是最流行的不可变数据结构的实现之一。它实现了完全的持久化数据结构&#xff0c;使用结构共享。所有的更新操作都会返回新的值&#xff0c;但是在内部结构是共享的&#xff0c;来减少内存占用。Immutablejs官网 在上一篇介绍redux的文章&…