『 Linux 』网络层 - IP协议(一)

news2025/2/23 6:21:53

文章目录

    • IP协议报文格式
      • IP协议报文如何进行报头与有效载荷分离
    • 网段划分
      • CIDR
      • 特殊的IP地址
    • IP地址的数量限制
    • 私有IP和公网IP
    • 理解运营商

IP协议报文格式

IP协议报文格式与TCP协议的报文格式类似;

IP报文的宽度也是32位;

对应的IP的实际报头为20字节为定长报头(固定长度);

  • 版本

    4位,标示IP协议的版本号,对于IPv4时值为4;

  • 首部长度

    4位,标示IP首部的长度,以4 byte(32 bit)为单位;

    通常情况下范围为0000 ~ 1111(二进制),即(0~15) * 4 byte0~60 byte;

    首部长度包括实际报头,选项以及填充;

    实际报头的大小是固定长度20 byte,

    故首部长度通常为0011 ~ 1111 (二进制),即5 ~ 60 byte;

  • 服务类型(TOS)

    8位,标示指定数据包的优先级和服务质量特征,如延迟低,高吞吐量,高可靠性等;

    其中3位标示优先权字段(已弃用),4位TOS字段以及1位保留字段(置为0);

    4位TOS分别表示最小延时,最大吞吐量,高可靠性以及最小成本,这四种TOS相互冲突,需要根据具体的场景选择其中一种服务类型;

  • 总长度

    16位,标示整个IP数据包的长度,这个长度包括首部和数据,以字节为单位,最大长度为65535 byte;

  • 标示

    16位,用于唯一标识主机发送的每个数据报,在数据报分片时用于识别分片属于哪个数据报;

  • 标志

    3位,控制分片的属性,第1位为保留位,通常为0,第二位为DF(Don't Fragment)不分片标志,第三位为MF(More Fragments)表示后续还有更多分片;

  • 片偏移

    13位,表示分片相对于原始数据报的起始位置,以8 byte位单位;

  • 生存时间

    8位,表示数据包在网络中允许存活的跳数;

    这里的跳数指的是从一个设备到另一个设备表示为一跳;

    每经过一个路由器,这个值将-1,若减到0数据包会被丢弃;

  • 协议

    8位,指示数据部分使用的协议类型,如TCP (6),UDP (17)等;

  • 首部校验和

    16位,用于校验IP头部的完整性以确保数据未被篡改,首部校验和每经过一个路由器都将重新计算;

  • 源IP地址和目标IP地址

    各占32位,其中源IP地址表示数据包发送方的IP地址,目标IP地址表示数据包接收方的IP地址;

  • 选项

    选项通常为可变长度字段,用于支持网络测试,调试,安全等功能,不是常用字段,使用选项字段时通常会增加数据包的复杂性;

  • 填充

    用于确保IP头部是32位的整数倍;

  • 数据

    实际承载的有效载荷,通常是更高层协议的报文数据,如TCP或者UDP;


IP协议报文如何进行报头与有效载荷分离

IP协议报文与TCP协议报文相似,通常采用定长报文与自描述字段的方式将报头与有效载荷进行分离;

IP报文的报头固定长度为20byte;

其中16位总长度表示整个报文的大小,这个字段为实际报头,选项,填充以及数据的共计大小;

4位首部长度为实际报头,选项,填充的总大小;

  • 假设:

    16位总长度字段计算为60byte

    4位首部长度字段计算为40byte

通过16位总长度字段所计算出来的长度减去4位首部长度字段所计算出来的大小即得到数据的大小;

数据大小为即为60byte - 40byte20byte;

通过4位首部字段所计算出来的长度减去实际报头固定长度20byte即得到是否存在选项即选项大小;

选项大小即为40byte - 20byte20byte;

当报头与有效载荷进行分离后需要将数据交付给上层协议,在IP报文中的 8位协议 字段即表示需要将该有效载荷交付给上层的哪个协议,即TCP或UDP;

每一层负责将对应的有效载荷交付给上层,IP协议负责将数据交给上层协议,如TCP或UDP,对应的上层协议通过端口号将有效载荷交付给上层,如Http/Https协议,以此类推;


网段划分

IP协议通常由两个部分组成:

  • 网络号

    保证相互连接的两个网段具有不同的标示;

  • 主机号

    同一网段内主机之间具有相同的网络号,但是必须要不同的主机号;

把网络比喻为同一届的专业,其中网络号就是专业中每个班级的班级号,主机号则为每个班级中不同学生班级内的学号;

在同一个班级中每个人的号数是独立的,同样的在同一届的专业中,每个班级的班级号也是独立的,但是在不同的班级中可以有相同的班内学号;

即:

  • 不同的子网其实就是把网络号相同的主机放到一起
  • 同一子网内的两台主机网络号必须一致但主机号必须不同
  • 不同子网中两个主机的网络号必须不同但主机号可以相同

同时在网络中路由器扮演了一个重要的角色,即使得设备与设备之间可以进行跨网段数据传输,而实际上路由器本质也是特定一个子网的主机,也要配置IP地址;

路由器与普通主机不同,一个路由器至少要连接两个不同的子网,即一台路由器必须配置两个或以上的IP地址;

在不同网段中,路由器通常为至少一个子网中的第一台设备,这时它的IP地址通常为xxx.xxx.xxx.1(IPv4);

路由器的功能通常为IP报文的转发以及构建子网(局域网),其中构建子网时路由器设备是该子网中的第一台设备;

最初在进行网段划分时采用了一种将网络号和主机号进行划分的方案,将所有的IP地址分为五类,分别为A ~ E类;

其中每类网络的网段划分为如下:

  • A类

    0.0.0.0127.255.255.255;

    第一个字节(8位)用作网络号,剩下的24位用作主机号;

    除去全0和全1的情况,有效的网络范围为1.0.0.0126.0.0.0;

    可支持约1.26亿个主机地址;

  • B类

    128.0.0.0191.255.255.255;

    前两个字节用作网络号,后16位作为主机号;

    同样除去全零和全一,有约1.6w个网络,每个网络可容纳65534个主机;

  • C类

    192.0.0.0223.255.255.255;

    前三个字节用作网络号,剩下的八位用作主机号;

    这允许约210w个网络,每个网络能够拥有254个主机;

  • D类

    224.0.0.0239.255.255.255;

    这一类是保留给多播使用的(不同于单播用途的A,B,C类);

    在多播中,数据被同时发送到多个目标地址,不划分网络号和主机号;

  • E类

    240.0.0.0247.255.255.255;

    这一类网络是保留用于科研和开发用途,同样不划分网络号和主机号;

这种方式被称为 “分类划分法” ;

当需要区分网络属于哪一类时只需要遍历该IP的前一个字节即可,A类网络的第一个字节值在0~127之间,B类网络为128~191之间,C类网络为192~223之间,D类网络为224~239之间,E类网络为240~255之间;

通常负责进行网络划分的有一种特定的组织,为因特网提供组织,即运营商(ISP);

这种传统的IP地址划分使得地址分配存在很大的不灵活性,通常情况下很多机构与组织都会更加热衷于申请B类地址,而申请一个B类地址意味着需要将65535个主机号都分配给他,但可能这个组织与机构并用不到这么多的地址从而导致大多资源被浪费;

针对这种方式提出了一种新的网络划分方式 —— CIDR;


CIDR

CIDR为在传统的分类划分基础上引入了一个额外的子网掩码来区分网络号和主机号;

每一个子网都有自己的子网掩码,子网掩码实际就是一个32bit的正整数,通常以一串0来结尾;

将IP地址与子网掩码进行按位与的操作,得到的结果即为网络号;

网络号和主机号的划分与IP地址的类型(A类,B类等)无关;

  • 假设一个IP地址为192.168.100.14/24

    其中/24表示子网掩码中1的长度;

    子网掩码即为11111111.11111111.11111111.00000000,为255.255.255.0;

    IP地址利用二进制表示为11000000.10101000.01100100.00001110;

    计算结果如下:

    11000000.10101000.01100100.00001110 (IP地址)
    11111111.11111111.11111111.00000000 (子网掩码)
    -------------------------------------------- (按位&)
    11000000.10101000.01100100.00000000 
    		↓ 转化为点分十进制 ↓
    		  192.168.100.0 
    
    • 首地址为192.168.100.1
    • 广播地址为192.168.100.255
    • 尾地址为192.168.100.254
    • IP范围为192.168.100.1 ~ 192.168.100.254(除去网络号与广播号)

子网掩码的主要作用是划分或者说"裁剪"一个IP地址中的网络部分和主机部分,这样可以更有效的管理和分配IP地址资源;

通过设置子网掩码可以将一个较大的IP网络划分成若干个更小的网络(子网),这种划分不仅节省IP地址资源,还能提高网络的效率和安全性,对网络进行合理的划分可以减少广播域的大小从而提升网络传输效率;

子网掩码可以对32位的IP进行任意划分,并不止是以八位八位的方式进行划分,例如子网掩码可以为/28,/30等等;


特殊的IP地址

并不是所有的IP地址都能作为主机的IP地址;

在一个子网中通常存在两种较为特殊的地址为网络号与广播号;

如上文中举例的IP范围为192.168.100.1 ~ 192.168.100.254实际上就是去除了网络号和广播号;

网络号的IP地址通常设主机地址为全0,而广播号的IP地址通常设主机地址为1;

以上面的例子为例,其中192.168.100.0即为网络号,192.168.100.255为广播号;

除了这两个特殊的IP地址外还有一个更为特殊的IP地址,即环回地址;

  • 环回地址(Loopback Address)

    环回地址是一个特殊的IP地址,主要用于网络软件和设备的测试和诊断;

    这个地址不指向任何实际的物理接口和外部网络,而是指向计算机系统自身的内部地址;

    在IPv4中环回地址的范围被定义在127.0.0.0/8的网络内;

    对应的IP范围为127.0.0.0127.255.255.255;

    本地环回的数据会贯穿网络协议栈,但最终不会将数据发送到网络当中;

    本地环回的数据将自顶向下贯穿协议栈进行一次封装的过程,然后通过以太网驱动程序判断该数据是否属于本地环回数据,若是为本地环回数据时已经封装了的数据将再次贯穿协议栈自底向上一次将数据进行解包和分用;


IP地址的数量限制

IP地址(IPv4)是一个四字节的正整数,那么一共只有 232 个IP地址,大概是43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址,虽然采用了DICR缓解了IP地址过于浪费的问题,提高了IP地址的利用率,但实际上IP地址的绝对上限并没有增加;

为了解决IP地址不足的问题有以下解决办法:

  • 动态分配IP地址

    动态分配IP地址为只给接入网络的设备分配IP地址,因此同一个MAC地址的设备每次介入互联网中所得到的IP地址不一定是相同的;

  • NAT技术

    能够让不同局域网当中同时存在两个相同的IP地址,NAT技术不仅能解决IP地址不足,同时能够有效避免外部网络攻击,隐藏并保护网络内部计算机;

  • IPv6

    IPv6技术并不是IPv4的升级,这是两个毫不相关的协议,彼此之间并不兼容;

    IPv6采用16 byte128位来表示一个IP地址,但目前IPv6并未普及;


私有IP和公网IP

通常情况下如果一个组织在内部组建子网,IP地址值用于局域网内进行通信而不与公网进行连接时理论上使用任意的IP地址都是可以的;

RFC1918规定了用于组建局域网的私有IP地址;

  • 10.*

    8bit为网络号,一共16.777.216个地址;

  • 172.16 ~ 172.31

    其中前12bit为网络号,一共1048576个地址;

  • 192.168.*

    其中前16bit为网络号,一共65535个地址;

包含在上面的范围中的IP地址都称为私有IP,其余的则称为全局IP,即公网IP;

通常情况下可以通过ipconfig来查看当前机器的一些网络信息;

   本地链接 IPv6 地址. . . . . . . . : fe80::5747:caab:5a0f:63bc%3
   IPv4 地址 . . . . . . . . . . . . : 192.168.0.101
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.0.1

其中192.168.0.101即为当前的私网IP;


理解运营商

通常情况下入网需要两个设备,分别为调制解调器以及路由器,其中调制解调器用来解析光纤中的光电信号,将光电信号转化为模拟信号,数字信号;

入网时通常会有一个用于入网的账号密码,路由器连接光纤,配置路由器中的入网密码;

使用路由器可以进行无线的局域网连接,即路由器构建了一个局域网,为了防止网络安全,即不被陌生人进行网络连接,路由器本身也将会有一个账号密码用来识别身份从而避免陌生人使用该路由器的网络从而连接该路由器的局域网;

运营商拥有大量的网络基础设施,包括路由器,交换机,光纤线路等,这些设备构建了连接不同网络和主机的物理通道;

运营商之间通过告诉的中继线路相互连接从而形成一个庞大的网络;

  • IP地址分配

    运营商向其用户分配IP地址;

    这些IP地址可以是公网IP地址,也可以是被NAT技术转换后的私有IP地址;

    对于家庭或小型企业用户,通常采用动态IP分配方式,即用户每次连接互联网时都可能获得一个不同的IP地址;

    而对于需要固定IP的用户,如大型企业或服务器提供商,运营商则提供静态IP地址;

  • 域名系统(DNS)

    运营商还提供DNS服务,将人类可读的域名解析为机器可读的IP地址;

    当用户在浏览器输入一个网址时,DNS服务负责查找该网址对应的IP地址,以便用户能够访问目标网站;

  • 网络维护与安全

    运营商还负责网络的维护和安全;

    他们监控网络流量,确保网络畅通无阻,并采取措施保护网络免受恶意攻击;

    同时,运营商还可能提供额外的网络安全服务,如防火墙,入侵检测系统等;

  • 数据中心服务

    许多大型运营商还运营数据中心,为企业提供服务器托管,云计算和大数据处理等服务;

    这可以帮助企业降低建立和维护自有数据中心的成本;

  • 访问控制和服务质量

    运营商根据不同服务套餐,在用户的带宽,数据使用量及其他服务特性上进行限制和控制;

    例如,可能对流量进行优先级排序,使某些服务(如IPTV)具有较高的传输质量;

  • 国际互联

    由于互联网是全球性的,运营商还通过海底光缆,卫星链路等方式与其他国家的网络进行连接;这些国际链路使得跨国数据通讯成为可能;


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[cg] vulkan external_memory

最近在写硬件编码的代码,渲染器渲染出的RT需要给到编码器做硬编,有两种方法能做。 一是通过 map的方式,把显存里的数据读到cpu,拷贝一份cpu data给编码器,但这种方式会有内存拷贝的开销。所以,我们思考是否…

springboot课程答疑系统(代码+数据库+LW)

摘要 随着信息互联网信息的飞速发展,无纸化作业变成了一种趋势,针对这个问题开发一个专门适应师生交流形式的网站。本文介绍了课程答疑系统的开发全过程。通过分析企业对于课程答疑系统的需求,创建了一个计算机管理课程答疑系统的方案。文章…

# issue 4 进程控制函数

目录 一、进程控制函数一 二、进程控制函数二 启动进程:(exec系列) 创建新进程: 测试代码: 测试结果: 三、进程控制函数三 结束进程: 测试代码: 测试结果: 四、…

Linux|进程程序替换

目录 什么是进程替换 替换原理 exec函数 exec* 函数的共性 什么是进程替换 进程程序替换是指将一个进程中正在运行的程序替换为另一个全新的程序的过程,但替换不是创建新进程,只是将对应程序的代码和数据进行替换。具体来说,这个替换过程涉…

2024 APMCM亚太数学建模C题 - 宠物行业及相关产业的发展分析和策略(详细解题思路)

在当下, 日益发展的时代,宠物的数量应该均为稳步上升,在美国出现了下降的趋势, 中国 2019-2020 年也下降,这部分变化可能与疫情相关。需要对该部分进行必要的解释说明。 问题 1: 基于附件 1 中的数据及您的团队收集的…

人工智能(AI)与机器学习(ML)基础知识

目录 1. 人工智能与机器学习的核心概念 什么是人工智能(AI)? 什么是机器学习(ML)? 什么是深度学习(DL)? 2. 机器学习的三大类型 (1)监督式学…

【从零开始的LeetCode-算法】3233. 统计不是特殊数字的数字数量

给你两个 正整数 l 和 r。对于任何数字 x,x 的所有正因数(除了 x 本身)被称为 x 的 真因数。 如果一个数字恰好仅有两个 真因数,则称该数字为 特殊数字。例如: 数字 4 是 特殊数字,因为它的真因数为 1 和…

web——sqliabs靶场——第十二关——(基于错误的双引号 POST 型字符型变形的注入)

判断注入类型 a OR 1 1# 发现没有报错 ,说明单引号不是闭合类型 测试别的注入条件 a) OR 1 1# a)) OR 1 1# a" OR 11 发现可以用双引号闭合 发现是")闭合 之后的流程还是与11关一样 爆破显示位 先抓包 是post传参,用hackbar来传参 unam…

IDEA 下载源码很慢,Download Source使用阿里云镜像仓库

参考: IDEA maven本地仓库、中心仓库、远程仓库配置 在观看第三方jar包的api时,有时候需要下载源码看下注释。 这个时候用idea 上的提示的Download Source会发现一直下载不下来。 因此就怀疑用的是apache的maven仓库,不是我们用的 aliyun 镜…

1+X应急响应(网络)病毒与木马的处置:

病毒与木马的处置: 病毒与木马的简介: 病毒和木马的排查与恢复:

2024年亚太地区数学建模大赛D题-探索量子加速人工智能的前沿领域

量子计算在解决复杂问题和处理大规模数据集方面具有巨大的潜力,远远超过了经典计算机的能力。当与人工智能(AI)集成时,量子计算可以带来革命性的突破。它的并行处理能力能够在更短的时间内解决更复杂的问题,这对优化和…

一个小的可编辑表格问题引起的思考

11.21工作中遇到的问题 预期:当每行获取红包金额的时候若出现错误,右侧当行会出现提示 结果:获取红包金额出现错误,右侧对应行并没有出现错误提示 我发现,当我们设置readonly的时候,其实render函数依旧是…

【Linux课程学习】:进程描述---PCB(Process Control Block)

🎁个人主页:我们的五年 🔍系列专栏:Linux课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 1.基本概念: 🥝进程的…

java基础概念36:正则表达式1

一、正则表达式的作用 作用一:校验字符串是否满足规则;作用二:在一段文本中查找满足要求的内容。——爬虫 二、正则表达式 2-1、字符类 示例: public static void main(String[] args) {System.out.println("a".matc…

设计模式之 命令模式

命令模式(Command Pattern)是行为型设计模式之一,它将请求(或命令)封装成一个对象,从而使用户能够将请求发送者与请求接收者解耦。通过命令模式,调用操作的对象与执行操作的对象不直接关联&…

GRU (门控循环单元 - 基于RNN - 简化LSTM又快又好 - 体现注意力的思想) + 代码实现 —— 笔记3.5《动手学深度学习》

目录 0. 前言 1. 门控隐状态 1.1 重置门和更新门 1.2 候选隐状态 1.3 隐状态 2. 从零开始实现 2.1 初始化模型参数 2.2 定义模型 2.3 训练与预测 3 简洁实现 4. 小结 0. 前言 课程全部代码(pytorch版)已上传到附件看懂上一篇RNN的所有细节&am…

实践篇:青果IP助理跨境电商的高效采集

写在前面: 近年来,跨境电商行业迅速崛起,成为全球贸易的重要组成部分。据市场调研机构Statista数据显示,2024年全球跨境电商市场规模预计将突破5万亿美元,覆盖数十亿消费者。跨境电商的竞争日益激烈,商家不…

电子应用设计方案-16:智能闹钟系统方案设计

智能闹钟系统方案设计 一、系统概述 本智能闹钟系统旨在为用户提供更加个性化、智能化和便捷的闹钟服务,帮助用户更有效地管理时间和起床。 二、系统组成 1. 微控制器 - 选用低功耗、高性能的微控制器,如 STM32 系列,负责整个系统的控制和数据…

QML —— 3种等待指示控件(附源码)

效果如下 说明 BusyIndicator应用于指示在加载内容或UI被阻止等待资源可用时的活动。BusyIndicator类似于一个不确定的ProgressBar。两者都可以用来指示背景活动。主要区别在于视觉效果,ProgressBar还可以显示具体的进度(当可以确定时)。由于视觉差异,繁忙指示器和不确定的…

Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)

链接 链接2 这两道题略微有点难,其中第一道题我自己解出来了,还补充了一个更好的解法,在空间上做了优化。 第二道题看了别人的题解,我正在努力理解。 题目一: 题意:为什么有n个元素,但是还有…