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. 数据的产品分类…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
