IP协议总结
一、定义。
IP全称为Internet Protocol,是TCP/IP协议族中的一员,负责实现数据在网络上的传输。它是一种无连接、不可靠的数据报协议。
IP协议常用于Internet网络和局域网中,它通过将数据包进行分组并进行逐跳转发来实现数据在网络中的传输。IP协议定义了网络地址寻址方式(IPv4或IPv6),以及数据包在路由器之间传递时的处理规则。每个运行IP协议的设备都有一个唯一的IP地址,用于标识该设备在网络中的位置。
IP协议本身并不提供任何确认机制和重传机制,因此它无法保证数据传输的可靠性。在使用IP协议传输数据时,需要借助其他协议如TCP或UDP来确保数据的可靠传输。
二、IP协议在网络分层的作用。
TCP作为传输层控制协议,其保证的是数据传输的可靠性和传输效率,但TCP提供的仅仅是数据传输的策略,而真正负责数据在网络中传输的则传输层之下的网络层和链路层。
IP协议作为网络层的协议,他的作用主要涉及以下方面:
寻址和标识:IP协议为网络中的设备提供唯一的IP地址,用于标识和寻址设备。每个设备都有一个唯一的IP地址,这使得它们可以在网络上被准确地定位和识别。
路由选择:IP协议负责根据目的IP地址来选择最佳的路径,以确保数据包从源主机传输到目的主机。这包括在网络中查找路由表,以确定数据包应该通过哪个路由器传输。
数据包封装:IP协议将数据包封装为IP数据包。这个封装的过程包括在数据包中添加源IP地址和目的IP地址等信息,以确保数据包能够在网络中正确传输。
跨网络通信:IP协议允许数据包从一个网络传输到另一个网络,因为它能够跨越不同的网络边界。这使得设备可以在全球范围内进行通信,而不受物理网络拓扑的限制。
路由和数据包转发:IP协议负责路由器之间的数据包转发。路由器使用IP地址来确定数据包的下一跳路由器,并根据路由表中的信息来选择正确的路径。这确保了数据包能够沿着正确的路由路径传输。
三、传输过程。
当数据包到达了网络层之后,经过IP协议包装之后,就会选择合适的路由路径,路由器路径的选择是由IP协议决定的,而非链路层协议。
在网络协议栈中,IP协议位于网络层,负责将数据包从源主机传输到目标主机。IP协议使用IP地址来标识主机和网络,并提供了路由选择的功能。当一个数据包到达路由器时,路由器会根据数据包的目标IP地址查找路由表,并基于此选择下一跳路由器或输出接口。IP协议使用一系列路由算法和度量标准来确定最佳路径,如最短路径优先、延迟、带宽等。
而链路层协议(如以太网)主要负责将数据包从一个链路传输到下一个链路,通过物理地址(MAC地址)进行寻址和传输。链路层协议只关注相邻节点之间的数据传输,而不涉及网络范围内的路径选择。
在这个过程中,网络层和链路层是密不可分的,共同完成了在路由器的传递过程。在路由器和路由器之间的数据传输过程中,网络层和链路层会交替工作,各自负责不同的任务,以确保数据包能够从一个路由器传输到另一个路由器,最终到达目的地。
以下是它们的交替工作方式:
网络层(第三层)工作:在发送路由器(源路由器)上,网络层的主要工作是路由选择。它根据目标IP地址来确定数据包的下一跳路由器,并将数据包封装成IP数据包。这个封装过程包括添加源IP地址和目标IP地址等信息。网络层的路由选择决定了数据包的路径。
链路层(第二层)工作:一旦数据包在网络层被封装为IP数据包,它将被传递到链路层。在发送路由器上,链路层的主要工作是将IP数据包封装为适当的数据链路层帧(例如以太网帧)。这个帧包含了目标物理地址(通常是MAC地址),源物理地址,以及链路层协议需要的控制信息。链路层的工作是确保数据包能够在物理网络上传输。
传输到下一跳路由器:一旦数据链路层帧被创建,它将被发送到源路由器连接的物理网络中。这个帧将经过物理网络中的设备,例如交换机和中继器,以最终到达下一跳路由器。
下一跳路由器的处理:在下一跳路由器上,链路层将负责解封装数据链路层帧,提取出IP数据包,并将其传递到网络层。网络层然后再次执行路由选择,选择下一个跳转的路由器。这个过程在不同的路由器之间重复,直到数据包最终到达目的地。
三、IP协议的分片与组装。
在网络分层中,TCP只关心提供数据传输的可靠性,而链路层只关心封装成MAC帧以实现在两个节点之间的传递。
所以数据的分片和组装都是由IP层独立完成的,因为MAC帧的最大长度限制MYU为1500字节,所以IP协议传下来的就不能大于这个值。
四、网段。
前提背景是要将数据从一台主机发送到另一台主机时,其实不是直接将数据发送到了目标主机,而是先将数据发送到目标主机所在的网络,然后再将数据发送到目标主机。这种方式可以一次性排查很多,提高检索的效率。因此,我们对网络进行了网段划分。
网络号不同于IP地址,尽管它们通常是IP地址的一部分。
IP地址是一个用于唯一标识设备或主机的32位(IPv4)或128位(IPv6)二进制数。IP地址用于标识一个具体的网络接口或主机,以便在互联网上进行通信。例如,IPv4地址可能是192.168.1.1或者8.8.8.8。
网络号是IP地址中的一部分,它用于标识一个网络。网络号的作用是将IP地址分组为不同的网络,以便路由器能够正确地将数据包传送到正确的目标网络。网络号的范围通常是IP地址的高位部分。例如,在IPv4地址192.168.1.1中,网络号通常是192.168,用于标识所属的网络。
但是这种划分方法有很多的问题:
浪费地址空间:类别划分中每个类别都有固定的网络号和主机号划分,导致了IP地址的浪费。特别是,A类地址的主机号非常大,而B类和C类地址的主机号相对较小,因此在许多情况下,分配的地址数量远远超过实际需要。
不适应网络规模变化:类别划分没有考虑到不同网络规模的需求。大型组织可能会获得过多的IP地址,而小型组织则可能获得太少的IP地址。这种不平衡会导致地址浪费或地址不足的问题。
路由表膨胀:由于每个类别都有固定数量的网络,这导致了路由表的膨胀。路由器需要存储大量的路由表项,即使有些网络可能只有少数IP地址。
难以分配子网:在类别划分下,划分子网变得复杂和不灵活。组织难以有效地划分子网以满足其内部网络拓扑的需求。
于是引入了子网划分和子网掩码。
五、子网划分和子网掩码。
子网划分是将一个大型IP网络划分成多个更小的子网,每个子网可以包含一定数量的主机。这样做的好处是可以更有效地利用IP地址资源,在网络管理和路由控制方面提供更多的灵活性和可扩展性。
子网掩码则是用于划分子网的一个二进制数字,与IP地址结合使用,确定网络号和主机号的边界。子网掩码的作用是将一个IP地址划分为网络地址和主机地址两部分。子网掩码的长度(用“1”表示的位数)表示了网络地址的长度,其余的位数则是主机地址。例如,一个子网掩码为255.255.255.0的IP地址与子网掩码相与后,就可以得到该IP地址所在的网络地址和主机地址。
在实际应用中,通常使用CIDR(无类域间路由)表示法来表示子网掩码和IP地址。CIDR表示法使用斜线后面的数字来表示子网掩码中网络地址所占用的位数,例如,一个CIDR地址为192.168.1.0/24,代表子网掩码为255.255.255.0,网络地址为192.168.1.0,主机地址范围为192.168.1.1~192.168.1.254。
相关文章:

IP协议总结
一、定义。 IP全称为Internet Protocol,是TCP/IP协议族中的一员,负责实现数据在网络上的传输。它是一种无连接、不可靠的数据报协议。 IP协议常用于Internet网络和局域网中,它通过将数据包进行分组并进行逐跳转发来实现数据在网络中的传输。…...

微信支付v2
文档: https://pay.weixin.qq.com/wiki/doc/api/index.html 微信小程序:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter11_1 需要一个微信认证后的小程序,,还需要一个,在微信商户平台,&…...

tcpdump(二)命令行参数讲解(一)
一 tcpdump实战详解 1、我们做抓包,一般都需要指定条件,保证对系统的CPU、内存、磁盘资源不会产生过大的响应备注: 遇到过tcpdump持续抓包导致系统挂了2、条件:1) tcpdump的 基础命令选项参数2) 真正的 过滤条件 抓包工具tcpdump用法说明 ① 参数学…...

10_8C++
X-Mind #include <iostream>using namespace std; class Rect { private:int width;int heigjt; public:void init(int w,int h){width w;heigjt h;}void set_w(int w){width w;}void set_h(int h){heigjt h;}void show(){cout << "矩形的周长" <…...

JVM篇---第七篇
系列文章目录 文章目录 系列文章目录一、Minor GC与Full GC分别在什么时候发生?二、你知道哪些JVM性能调优参数?(简单版回答)三、对象一定分配在堆中吗?有没有了解逃逸分析技术?一、Minor GC与Full GC分别在什么时候发生? 新生代内存不够用时候发生MGC也叫YGC,JVM内存…...

更新Xcode 版本后运行项目出现错误 Unable to boot the Simulator 解决方法
错误截图 出现 Unable to boot the Simulator 错误原因很多,以下方法不一定都适用,我是通过以下方法解决的 打开命令终端输入以下命令,可能需要你输入开机密码 sudo rm -rf ~/Library/Developer/CoreSimulator/Caches...

winform窗体控件太多显示不过来,怎么实现滚动条
winform窗体控件太多显示不过来,怎么实现滚动条 Winform Panel实现滚动条 一、创建panel 在界面上拖拽一个父级Panel1,然后在Panel1里面拖拽一个子级Panel2 设置父级Panel1的AutoScroll属性为True 属性设置好后,当子级高度或者宽度大于父…...

WebSocket连接异常 Error parsing HTTP request header Connection reset by peer
问题描述 在使用spring的方式集成websocket时,在配置WebSocketConfigurer后 Configuration EnableWebSocket public class WebSocketConfiguration implements WebSocketConfigurer {ResourceServletWebSocketServerHandler servletWebSocketServerHandler;Overri…...

Spring中shutdown hook作用
在Spring框架中,Shutdown Hook(关闭钩子)是一种机制,用于在应用程序关闭时执行一些清理操作Spring会向JVM注册一个shutdown hook,在接收到关闭通知的时候,进行bean的销毁,容器的销毁处理等操作在…...

关于IvorySQL和OpenGauss包SPEC处理的一些思考
包的SPEC区可以定义下面三种类型(本篇只讨论SPEC区的情况) 变量类型(nested table等)(注意这是包内定义的类型,与SQL创建的不通)游标 这三种类型在PG原生中,是找不到相似的功能的&…...

我用PYQT5做的第一个实用的上位机项目(六)
将之前的画面和代码用复制粘贴的方法复制四份,就完成了整个主画面和主程序的基本构建。 下面的工作是关于PLC和通信。 上位机项目,其与PLC通信的模式很多都是这样的:在没有操作和设置的平常显示界面,按照预定周期从PLC读取当前页…...

【高级语言程序设计】python函数式编程(一)
基础知识 Python函数式编程的主要内容包括以下几个方面: (1)函数作为一等公民:在函数式编程中,函数被视为一等公民,可以像其他数据类型一样被传递、赋值以及作为返回值。 (2)不可变数据:函数式编程鼓励使用不可变数据…...

使用python查找指定文件夹下所有xml文件中带有指定字符的xml文件
文件夹目录如下(需要递归删除文件夹下的.DS_Store文件): labels文件夹下面是xml文件: import os import os.pathpath "name/labels" files os.listdir(path) # 得到文件夹下所有文件名称 s []for xmlFile in files:…...

flutter实现透明appbar(一)
前言 在项目中如何实现透明的appbar,方式一: 使用stack和positioned定位功能把appbar定位到页面的最上面, 实现 实现 Widget build(BuildContext context) {return Scaffold(body: Stack(children: [_homePage(), _appBar()],),);}_appbar…...

(四)正点原子STM32MP135移植——u-boot移植
一、概述 u-boot概述就不概述了,u-boot、kernel、dtb三件套,dddd 经过国庆艰苦奋战,已经成功把所有功能移植好了 二、编译官方代码 进入u-boot的目录 2.1 解压源码、打补丁 /* 解压源码 */ tar xf u-boot-stm32mp-v2022.10-stm32mp-r1-r0.…...

[计算机入门] 应用软件(办公类)
3.19 应用软件(办公类) 3.19.1 Microsoft office办公软件套件 Microsoft Office 是一套广泛使用的办公软件套件,由Microsoft公司开发和发布。它包含了多个应用程序,用于处理各种办公任务。以下是Office常见的几个应用程序: Microsoft Word…...

基于安卓android微信小程序音乐播放器
运行环境 小程序前端框架:uniapp 小程序运行软件:微信开发者 后端技术:javaSsm(SpringSpringMVCMyBatis)vue.js 后端开发环境:idea/eclipse 数据库:mysql 项目介绍 音乐播放器小程序的设计主要是对系统所要实现的功能进行详细考虑,确定所要…...

Java的指针、引用与C++的指针、引用的对比
笔者前两天在参加菜鸟面试的时候被面试官问到了这个问题,由于只在本科程序设计课上学过C,已经好久没有开发实际项目,所以对C相关的指针以及引用的记忆较为模糊,在此进行一定的知识汇总与梳理。 我们以面试中出现的问题为例来进行整…...

串级/级联控制知识点整理
串级控制系统是改善控制质量的有效方法之一,在过程控制中得到了广泛的应用。所谓串级控制,就是采用两个控制器串联工作,外环控制器的输出作为内环控制器的设定值,由内环控制器的输出去操纵控制阀,从而对外环被控量具有…...

数据产品读书笔记——认识数据产品经理
🌻大家可能听说的更多是产品经理这个角色,对数据产品经理可能或多或少了解一些,但又不能准确的描述数据产品经理的主要职能和与其他产品的不同,因此通过读一些书来对数据产品经理有一个准确且全面的认知。 目录 1. 数据的产品分类…...

从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 创建虚拟机
文章目录 一、虚拟机二、关于消息的API发布消息直接交换机 DIRECT 转发规则扇出交换机 FANOUT 转发规则主题交换机 TOPIC 转发规则匹配规则Router类 订阅消息消费者队列如何给订阅的消费者发送消息自动发送消息至订阅者 应答消息 三、代码编写 一、虚拟机 接下来要创建虚拟机,…...

GIT版本控制--前言
欢迎来到《GIT版本控制》专栏!在当今软件开发和协作的世界中,版本控制是不可或缺的工具之一。无论您是一名初学者,一位经验丰富的开发者,还是一个项目团队的成员,都有可能会受益于对GIT的深入了解。 GIT是一个强大的分…...

由于 MAC 地址的问题,导致网络不通的原因和分析
由于 MAC 地址的问题,导致网络不通的原因和分析 将现象及原因分析发给大家,供大家参考,以后有类似问题时有个解决问题的参考开发板网络不通,也抓不到包,折腾了好久,将电脑和开发板用网线直连,结…...

游戏开发中的设计模式
单例模式 实例化单一对象,懒加载 //单例模式 class GameManagerSingleton {private constructor(){}private static instance:GameManagerSingleton;public static Instance(){if(!GameManagerSingleton.instance){this.instance new GameManagerSingleton();}re…...

React核心原理与实际开发
学习目标 React是啥? 官方定义:将前端请求获取到的数据渲染为HTML视图的JavaScript库。 一、React入门 1、React项目创建 直接创建react,使用初始化会创建package.json npm init -y再安装 2、React基本使用 使用纯JS创建ReactDOM&#…...

Springboot+vue的企业OA管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
演示视频: Springbootvue的企业OA管理系统(有报告),Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的企业OA管理系统,采用M(m…...

3、字符设备驱动框架和开发步骤
一、Linux内核对文件的分类 Linux的文件种类 1、-:普通文件2、d:目录文件3、p:管道文件4、s:本地socket文件5、l:链接文件6、c:字符设备7、b:块设备 Linux内核按驱动程序实现模型框架的不同&…...

[MySQL]基础篇
文章目录 1. MySQL基本使用1.1 MySQL的启动和登录1.1.1 MySQL的启动1.1.2 MySQL的客户端连接 1.2 数据模型 2. SQL2.1 SQL类型2.1.1 数值类型2.1.2 字符串类型2.1.3 日期类型 2.2 DDL2.2.1 数据库操作2.2.2 表操作 - 查询2.2.3 表操作 - 创建表2.2.4 表操作 - 修改 2.3 DML2.3.…...

Meta Semantic Template for Evaluation of Large Language Models
本文是LLM系列文章,针对《Meta Semantic Template for Evaluation of Large Language Models》的翻译。 大型语言模型评估的元语义模板 摘要1 引言2 相关工作3 方法4 实验5 结论 摘要 大型语言模型(llm)是否真正理解语言的语义,或者只是记住训练数据?…...

Git相关知识(1)
目录 1.初识Git 1.基础知识 2.centos中下载 2.基本操作 1.创建本地仓库 2.配置本地仓库 3.版本库、工作区、暂存区 4.添加文件 5.add和commit对git文件的作用 6.修改文件 7.版本回退 8.撤销修改 9.删除文件 3.分支操作 1.HEAD与分支 2.创建分支 3.删除分支 …...