Linux学习之IP协议
前言:
在学习IP协议i前,我们其实知道网络协议栈是一层层的,上层封装好之后就传给下层,对于我们正要学习到的TCP协议,在对数据进行封装之后,并不是直接就将数据进行传输,而是交给下一层网络层进行传输,将数据通过网络形式从一台主机传输到另一台主机。我们的TCP只是给我们网络层,提供了许多可靠性策略,但是数据的传输并不是直接靠TCP。
实际上IP协议已经可以帮我们跨网络传输数据,但是并不能保证每次数据都是可靠的,安全的传输,通过TCP协议提供的策略,基本上数据传输时完全可靠的,安全的。
目录
前言:
IP协议
IP协议的报头
网段划分
公网IP与私网IP
理解运营商和全球网络
ip路由
数据链路层
认识MAC地址
认识ARP
ARP欺骗
网络整体结构
域名
NAT技术
NAPT
NAT和代理服务器
IP协议

首先从一台主机到另一台主机,进行数据传输的过程中首先要进行源地址与目的地址的确定,即从源ip到目的ip,其次就是进行路段的选择,即路由选择。
而ip地址就是由两部分组成:目标网络+目标主机。先到达目标的网络区域,在确定是哪一台主机。ip地址通过这种方式,在进行网络通信的过程中,就能有较高的效率去排除,知道知道对应的目标主机。
IP协议的报头


关于ip的报头还是主要有两个问题:
1.报头与载荷的有效分离
靠固定长度加自描述字段进行分离,如这里的报头总共20字节,剩下的为数据,其次还有4位首部长度(一个字节4位)。子描述字段报头首部+总长。
2.将有效载荷交付给上层。
有8位协议字段表示要交付的上层协议。
网段划分
我们知道ip地址有网络好于主机号构成:
网络号:保证相互连接的两个网段具有不同的标识。
主机号:同一网段中,主机间有相同的网络号,因此靠主机号唯一识别。
主机之间通过路由器在网络层上跨网段传输数据,实际上路由器可以是一个个子网的主机,需要对齐进行配置ip地址。一个路由器相当于在两个子网中。
根据主机与网络号不同的位数,我们就可以对ip地址进行划分。IPv4下总共用32位标识:

随着 Internet 的飞速发展 , 这种划分方案的局限性很快显现出来 , 大多数组织都申请 B 类网络地址 , 导致 B 类地址很快就 分配完了, 而 A 类却浪费了大量地址 ;例如 , 申请了一个 B 类地址 , 理论上一个子网内能允许 6 万 5 千多个主机 . A 类地址的子网内的主机数更多 .然而实际网络架设中 , 不会存在一个子网内有这么多的情况 . 因此大量的 IP 地址都被浪费掉了 .针对这种情况提出了新的划分方案 , 称为 CIDR(Classless Interdomain Routing):引入一个额外的子网掩码 (subnet mask) 来区分网络号和主机号 ;子网掩码也是一个 32 位的正整数 . 通常用一串 "0" 来结尾 ;将 IP 地址和子网掩码进行 " 按位与 " 操作 , 得到的结果就是网络号 ;网络号和主机号的划分与这个 IP 地址是 A 类、 B 类还是 C 类无关 ;
除此之外也有一些特定格式的特定ip地址。
将 IP 地址中的主机地址全部设为 0, 就成为了网络号 , 代表这个局域网 ;将 IP 地址中的主机地址全部设为 1, 就成为了广播地址 , 用于给同一个链路中相互连接的所有主机发送数 据包;127.* 的 IP 地址用于本机环回 (loop back) 测试 , 通常是 127.0.0.1
我们知道ip地址的数量是有限的,并且数量是越来越少,为了较少ip地址的浪费,提高利用率,用了三种方式来解决:
公网IP与私网IP
其次ip地址也被被硬性划分为公网ip和私网ip。(规定组建局域网的必须是私有ip)
我们在日常生活过中使用的一般都是直接的私网ip。不过对于我们使用的云服务器,这是事公网ip。
如果一个组织内部组建局域网 ,IP 地址只用于局域网内的通信 , 而不直接连到 Internet 上 , 理论上 使用任意的 IP 地址都 可以, 但是 RFC 1918 规定了用于组建局域网的私有 IP 地址10.*, 前 8 位是网络号 , 共 16,777,216 个地址172.16. 到 172.31. , 前 12 位是网络号 , 共 1,048,576 个地址192.168.*, 前 16 位是网络号 , 共 65,536 个地址包含在这个范围中的 , 都成为私有 IP, 其余的则称为全局 IP( 或公网 IP);
理解运营商和全球网络
我们先来理解运营商:

运营商其实就是建设了网络基础设施的大型企业,负责让我们中国的每一个人用到互联网,为我们配备网络的。所以在网络通信时,首先要经过运营商。
全球网络
 ip地址就相当于是一个巨大的资源,因此就需要对资源进行划分,我们简单地以国家为个体进行划分(公网ip):
内网路由器就是由家庭管理,先来自运营商内部的子网,子网的路由器网络从广域网来,而广域网就是一些大公司组建的机房。
ip路由

路由器在进行数据传输中,如何选择其他网段呢,首先会将自己的ip地址与其他路由器的子网掩码按位与,如果结果是ip地址,就说明是传输的网段,就交给目标主机,如果不匹配,他回去再路由表按位与,找到你需要那个路由器的接口,从该接口转发给下一个路由器。
路由表可以使用 route 命令查看如果目的 IP 命中了路由表 , 就直接转发即可 ;路由表中的最后一行 , 主要由下一跳地址和发送接口两部分组成 , 当目的地址与路由表中其它行都不匹配 时, 就按缺省路由条目规定的接口发送到下一跳地址。
再往下,我们知道数据并不会直接就发送到网络层了,而是发送给数据链路层了,数据链路层是有要求的,要求一次不能发送太多的数据报,而此时的封装后的ip数据包已经很大了,所赐此时需要对ip数据包进行分片,并且在处理之后进行组装。
如何进行分片与组装呢:这里就看的是ip协议包头中的3位标志字段,其中只有第二位与第三位有含义,第二位为0,表示允许分片,第三位表示结束标记(是否是最后一个小包)。
数据链路层
数据链路层实现了一个区间内的通信(一跳),而IP实现的是直至到最终目的通信(点对点)。
数据链路层处理的是:直接相连的主机之间进行数据交付的问题。
而MAC地址区分了一个局域网中特定的主机。

源地址和目的地址是指网卡的硬件地址 ( 也叫 MAC 地址 ), 长度是 48 位 , 是在网卡出厂时固化的 ;帧协议类型字段有三种值 , 分别对应 IP 、 ARP 、 RARP;帧末尾是 CRC 校验码
报头域有效载荷如何分离,怎么判断分用呢?
还是一样,采用定长的报文格式,可以看到14字节的报头,剩下的就是有效载荷。
报头的前6个字节目的主机MAC地址,之后的6字节为u源主机MAC地址,之后的两个字节标识上一层协议的类型。
认识MAC地址
MAC地址用于一个局域网内的网络设备寻址和传输数据,MAC地址是硬件地址,是不可被修改的,(其实是网卡的地址),也是用来唯一标识一个局域网中的网络设备。IP地址可以进行不同网段之间的划分,用于不同网段之间数据的传输和路由,是一种标识主机的逻辑地址。
 
 
随着局域网增多,数据在传输过程中就有大概率会发生碰撞,为了应对这一问题,于是又出现了交换机,交换机管理者与它相连的路由器的通信。
认识ARP
虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议。
数据链路层获取到了上层封装后的ip数据帧,可以进行网络传输,但是网络通信不仅仅看ip地址,这只是表示主机的,那么主机上的网络设备呢?是靠MAC地址标识的,找不到目的网络设备的地址先进行处理,就算找到了该主机,还是会丢弃数据包的。
源主机发出 ARP 请求 , 询问 “IP 地址是 192.168.0.1 的主机的硬件地址是多少 ”, 并将这个请求广播到本地网 段( 以太网帧首部的硬件地址填 FF:FF:FF:FF:FF:FF 表示广播 );目的主机接收到广播的 ARP 请求 , 发现其中的 IP 地址与本机相符 , 则发送一个 ARP 应答数据包给源主机 , 将自 己的硬件地址填写在应答包中;每台主机都维护一个 ARP 缓存表 , 可以用 arp -a 命令查看。缓存表中的表项有过期时间 ( 一般为 20 分钟 ), 如果20 分钟内没有再次使用某个表项 , 则该表项失效 , 下次还要发 ARP 请求来获得目的主机的硬件地址。
ARP报头:
 
注意到源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次 , 对于链路层为以太网的情况是多余的, 但如果链路层是其它类型的网络则有可能是必要的。硬件类型指链路层网络类型 ,1 为以太网 ;协议类型指要转换的地址类型 ,0x0800 为 IP 地址 ;硬件地址长度对于以太网地址为 6 字节 ;协议地址长度对于和 IP 地址为 4 字节 ;op字段为1表示ARP请求,op字段为2表示ARP应答。
源主机通过广播获取目的主机的MAC地址,在网络通信时根据MAC地址传输给特定网络设备在进行上层协议的解包。因为每一个路由器要构建路由器表的时候也要认识周围的路由器,此时也适用arp协议进行记录。所以ARP不经可以在节点到主机之间,还可以是节点到节点之间。(路由器之间)。
ARP欺骗
举例:
- 1.主机A要和主机C通信,主机A发出ARP包询问谁是192.168.1.3?请回复192.168.1.1。
- 2.这时主机B在疯狂的向主机A回复,我是192.168.1.3,我的地址是0A-11-22-33-44-02。
- 3.由于ARP协议不会验证回复者的身份,造成主机A错误的将192.168.1.3的MAC映射为0A-11-22-33-44-02。
其次在发送ARP请求后,如果获取到目的主机的ARP应答,此时还会将目的主的MAC地址缓存在主机中。但若收到很多的ARP应答(存在伪装的ARP应答,用虚假的ip地址和MAC地址构建的ARP应答),(更新ARP缓存)ip地址会去使用虚假的映射ip地址,MAC地址使用我的MAC地址,造成的后果会让网络阻塞,主机网络断开。
网络整体结构

域名
由于ip地址与端口号不方便我们我们日常使用,因此可以使用域名来代替ip地址与端口号:
NAT技术
NAT 技术背景之前我们讨论了 , IPv4 协议中 , IP 地址数量不充足的问题NAT 技术当前解决 IP 地址不够用的主要手段 , 是路由器的一个重要功能 ;NAT 能够将私有 IP 对外通信时转为全局 IP. 也就是就是一种将私有 IP 和全局 IP 相互转化的技术方法 :很多学校 , 家庭 , 公司内部采用每个终端设置私有 IP, 而在路由器或必要的服务器上设置全局 IP;全局 IP 要求唯一 , 但是私有 IP 不需要 ; 在不同的局域网中出现相同的私有 IP 是完全不影响的 ;
 
 
NAPT
NAT和代理服务器
相关文章:
 
Linux学习之IP协议
前言: 在学习IP协议i前,我们其实知道网络协议栈是一层层的,上层封装好之后就传给下层,对于我们正要学习到的TCP协议,在对数据进行封装之后,并不是直接就将数据进行传输,而是交给下一层网络层进…...
 
Python Dash库:一个Web应用只需几行代码
大家好,在数据科学领域,数据可视化是将数据以图形化形式展示出来,帮助我们更直观地理解数据。Python中有一个非常流行的数据可视化库叫做Dash,Dash以其简洁、高效和强大的功能而闻名,它允许开发者快速构建交互式Web应用…...
 
用Docker 创建并运行一个MySQL容器
可以在DockerHub官网上荡:mysql - Official Image | Docker Hub 指令是:docker pull mysql; 因为文件比较大可能时间比较长,我是跟着黑马的课走的 课程提供的有文件,我就用已有的资源了。 在tmp目录里放入mysql.tar包 然后cd进去 输入指令:docker lo…...
 
在Java中如何有效地处理内存泄露
在Java中,处理内存泄露有多种方法,以下是其中三种常见的方法及其原理和适用场景: ## 1. 合理使用垃圾回收机制 Java中的垃圾回收机制(Garbage Collection,GC)是一种自动化的内存管理技术,它可以…...
 
值得收藏!修复Windows 10/11中找不到输出或输入设备的五种方法
序言 这篇文章主要关注处理声音输出/输入设备未发现的问题。它提供了许多可行的方法,帮助了许多Windows用户。阅读以下内容以找到你的解决方案。 最近,我将Windows 10更新到21H2,发现我的音频无法工作。当我把鼠标放在任务栏上的声音图标(上面有一个十字图标)上时,它会…...
Slurm运行pytorch深度学习模型(小白版)
Slurm背景: Slurm 是一种开源的作业调度系统,它用于管理大型计算集群中的计算资源和作业。你可以把它想象成一个“交通管制员”,负责管理计算集群中的各种任务,确保它们按照用户设定的规则有序地执行。 Slurm 的主要功能包括&…...
 
SQL如何利用Bitmap思想优化array_contains()函数
目录 0 问题描述 1 位图思想 2 案例实战 3 小结 0 问题描述 在工作中,我们往往使用array_contains()函数来进行存在性问题分析,如判断某个数是否在某个数组中,但是当表数据量过多,存在大量array_contains()函数时,…...
 
面试官:打开了一个新窗口,怎么知道这个窗口已经被打开过?
前言 我们现在来想这么一个场景,在掘金的文章管理页打开了一篇文章草稿,然后点击编辑,这个时候打开新标签页 A ,再点击一次编辑,打开了标签页 B 。 此时如果你在 A 编辑, B 是感知不到 A 的内容变动的&am…...
 
机器学习项目实践-基础知识部分
环境建立 我们做项目第一步就是单独创建一个python环境,Python新的隔离环境 创建:python -m venv ml 使用:.\Scripts\activate python -m venv ml 是在创建一个名为 ml 的虚拟环境,这样系统会自动创建一个文件夹ml,…...
CNN卷积神经网络,TensorFlow面试题
目录 CNN卷积神经网络 什么是TensorFlow? 张量是什么 TensorFlow有什么优势?...
 
Android 官网Ota介绍
构建 OTA 软件包 | Android 开源项目 | Android Open Source Project...
 
Redis(持久化)
文章目录 1.RDB1.介绍2.RDB执行流程3.持久化配置1.Redis持久化的文件是dbfilename指定的文件2.配置基本介绍1.进入redis配置文件2.搜索dbfilename,此时的dump.rdb就是redis持久化的文件3.搜索dir,每次持久化文件,都会在启动redis的当前目录下…...
 
基于Flask的岗位就业可视化系统(一)
🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 前言 本项目综合了基本数据分析的流程,包括数据采集(爬虫)、数据清洗、数据存储、数据前后端可视化等 推荐…...
嵌入式学习68-C++(运算符重载和虚函数)
知识零碎: cin >> n 相当于scanf C系统提供的6种基本函数 …...
UVA1048/LA3561 Low Cost Air Travel
UVA1048/LA3561 Low Cost Air Travel 题目链接题意输入格式输出格式 分析AC 代码 题目链接 本题是2006年ICPC世界总决赛的A题 题意 很多航空公司都会出售一种联票,要求从头坐,上飞机时上缴机票,可以在中途任何一站下飞机。比如,假…...
 
学习和分析各种数据结构所要掌握的一个重要知识——CPU的缓存利用率(命中率)
什么是CPU缓存利用率(命中率),我们首先要把内存搞清楚。 硬盘是什么,内存是什么,高速缓存是什么,寄存器又是什么? 我们要储存数据就要运用到上面的东西。首先里面的硬盘是可以无电存储的&#…...
 
IOS自动化—将WDA打包ipa批量安装驱动
前言 CSDN: ios自动化-Xcode、WebDriverAgent环境部署 ios获取原生系统应用的包 如果Mac电脑没有配置好Xcode相关环境,可以参考以上文章。 必要条件 Mac电脑,OS版本在12.4及以上(低于这个版本无法安装Xcode14,装不了Xcode14就…...
 
SAP PP学习笔记12 - 评估MRP的运行结果
上一章讲了MRP的概念,参数,配置等内容。 SAP PP学习笔记11 - PP中的MRP相关概念,参数,配置-CSDN博客 本章来讲 MRP跑完之后呢,要怎么评估这个MRP的运行结果。 1,Stock/Requirements List and MRP List 在…...
 
AndroidStudio的Iguana版的使用
1.AndroidStudio介绍 Android Studio 是用于开发 Android 应用的官方集成开发环境 (IDE)。Android Studio 基于 IntelliJ IDEA 强大的代码编辑器和开发者工具,还提供更多可提高 Android 应用构建效率的功能,例如: 基于 Gradle 的灵活构建系统…...
通过方法引用获取属性名的底层逻辑是什么?
很多小伙伴可能都用过 MyBatis-Plus,这里边我们构造 where 条件的时候,可以直接通过方法引用的方式去指定属性名: LambdaQueryWrapper<Book> qw new LambdaQueryWrapper<>(); qw.eq(Book::getId, 2); List<Book> list bo…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
 
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
 
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
 
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
 
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
 
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
