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…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...