【计算机网络】网络层IP协议
文章目录
- 一、认识IP协议
- 二、IP协议头部格式
- 三、IP地址划分
- 1. IP地址分类
- 2. 子网划分
- 四、IP地址数量危机
- 1. IP地址的数量限制
- 2. NAT技术
- 五、私网IP和公网IP
- 六、路由
- 1. 认识路由
- 2. 路由表生成算法
一、认识IP协议
IP协议是Internet Protocol(互联网协议)的简称,它是一种网络层的协议。IP协议的主要作用是在互联网中传输数据包(也称为IP数据包),它定义了数据包在互联网上如何寻址、路由和传输的方式。
IP协议是一种面向无连接的协议,不保证数据包的可靠传输,也不保证数据包的传输顺序。因此,IP协议一般与传输层的协议(如TCP协议)一起使用,以保证数据包的可靠传输和有序性。
IP协议还定义了IP地址的格式和分配方式。IP地址是一个32位的二进制数,通常用点分十进制表示法来表示。在互联网中,每个设备都必须拥有唯一的IP地址,这样才能与互联网相通。
IP协议是互联网中最基本的协议之一,它为互联网上的数据通信提供了基础的支持。
二、IP协议头部格式
IP协议头部格式如下:

各协议字段说明:
- 版本:占4位,协议版本号,通常为4,表示IPv4。
- 首部长度:占4位,IP协议头部长度,即头部中有多少个32位字节,通常为5个。
- 服务类型:占8位,用于标记数据包的优先级、延迟、可靠等。其中3位优先权字段(已经弃用),4位TOS字段和1位保留字段。4位TOS字段分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。这四者之间相互冲突,只能选择一个。对于SSH和Telnet这样的程序,最小延时比较重要;对于FTP这样的程序,最大吞吐量比较重要。
- 总长度:占16位,表示整个IP数据包的长度,包括头部和数据部分。
- 标识:占16位,用于唯一标识一个 IP 数据包的片段。如果IP数据包在数据链路层被分片,那么每一个片段中的标识相同。
- 标志:占3位,第一位保留;第二位为 1 表示禁止分片,为 0 则允许分片;第三位表示分片的情况,如果为 0 表示后面还有分片,为 1 则表示当前是最后一个分片。
- 片偏移:占13位,用于指示当前分片在原始数据包中的偏移量。实际偏移的字节数就是片偏移量乘以 8 得到的。因此,除了最后一个报文外,其他报文的长度必须是 8 的整数倍。
- 生存时间(Time To Live,TTL):占8位,表示数据包到达目的地的最大跳数。一般是64,每次经过一个路由,TTL的值减 1 ,一直减到 0 还没有到达,那么该数据包就会被丢弃。该字段主要是用来防止出现路由循环。
- 协议:占8位,表示数据包的上层协议类型,如TCP、UDP、ICMP等。
- 首部校验和:占16位,用于检测头部在传输过程中出现的错误。
- 源地址:源IP地址。
- 目的地址:目的IP地址。
- 可选字段:可选字段,用于扩展头部,通常不使用。
- 填充:填充字段,用于保证头部长度位 32 位的整数倍。
三、IP地址划分
1. IP地址分类
IP地址分为两个部分:网络号和主机号
- 网络号:保证互相连接的两个网段具有不同的标识。
- 主机号:同一个网段内,主机之间有相同的网络号,但主机号不同,以便区分不同的主机。
如下图:

不同的子网其实就是把网络号相同的主机放到一起。如果在子网中新增一台主机,则该主机的网络号与这个子网的网络号一致,但是主机号必须保证和该子网中的其他主机不同。
在刚开始设计互联网络时,为了便于寻址以及层次化构造网络,IP地址根据网络号划分出五种IP类型:A类地址、B类地址、C类地址、D类地址和E类地址。如下图所示:

- A类地址:以0开头,第一个字节(8位)用于网络地址,后面三个字节(24位)用于主机地址。它的网络号可以表示1~126之间的数字,它的默认子网掩码为255.0.0.0。
- B类地址:以10开头,前两个字节(16位)用于网络地址,后面两个字节(16位)用于主机地址。它的网络号可以表示128~191之间的数字,它的默认子网掩码为255.255.0.0。
- C类地址:以110开头,前三个字节(24位)用于网络地址,后面一个字节(8位)用于主机地址。它的网络号可以表示192~223之间的数字,它的默认子网掩码为255.255.255.0。
- D类地址:以1110开头,用于多播地址(multicast addresses),不用于单个主机或网络。
- E类地址:以1111开头,保留地址,不分配给主机或网络使用。
其各自的范围如下:
A类:0.0.0.0 到 127.255.255.255
B类:128.0.0.0 到 191.255.255.255
C类:192.0.0.0 到 223.255.255.255
D类:224.0.0.0 到 239.255.255.255
E类:240.0.0.0 到 247.255.255.255
2. 子网划分
随着互联网的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址:
- 例如,申请了一个B类地址,理论上一个子网内能允许6万5千多个主机。A类地址的子网内的主机数更多,然而实际网络架设中,不会存在一个子网内有这么多的情况,因此大量的IP地址都被浪费掉了。
针对这种情况提出了新的划分方案,称为CIDR(Classless Interdomain Routing,无类别域间路由)。
CIDR是一种用于分配IP地址的方法,与传统的IP地址划分方式不同,CIDR将IP地址划分为一个个的子网,每个子网的大小可以根据需要灵活调整。CIDR可以在不改变网络地址和主机地址划分的基础上,更好地利用IP地址空间,避免浪费IP地址,提高IP地址的使用效率。
利用CIDR划分子网的步骤如下:
-
确定需要划分的IP地址范围,例如:192.168.0.0~192.168.0.255。
-
根据需要分配的子网数量,确定网络前缀长度。例如,如果需要将该地址范围分为4个子网,则网络前缀长度为26位(2的2次方等于4,需要2个二进制位来表示4个子网)。
-
将IP地址范围划分为多个子网,每个子网的大小由网络前缀长度确定。
-
为每个子网分配一个独立的网络地址和主机地址范围。
例如,将192.168.0.0/24划分为4个子网,每个子网大小相同,即每个子网有64个IP地址。根据CIDR表示法,网络前缀长度为26位,子网划分如下所示:
- 子网1:192.168.0.0/26,网络地址为192.168.0.0,广播地址为192.168.0.63。
- 子网2:192.168.0.64/26,网络地址为192.168.0.64,广播地址为192.168.0.127。
- 子网3:192.168.0.128/26,网络地址为192.168.0.128,广播地址为192.168.0.191。
- 子网4:192.168.0.192/26,网络地址为192.168.0.192,广播地址为192.168.0.255。
CIDR IP子网划分可以更好地利用IP地址空间,并提供更灵活的子网划分方式。它也更容易管理,因为每个子网都有一个独立的网络地址和主机地址范围,这使得网络管理更加简单和高效。
四、IP地址数量危机
1. IP地址的数量限制
我们知道,IP地址(IPv4)是一个4字节32位的正整数。那么一共只有 2^32 次方个IP地址,大概是43亿左右。而TCP/IP协议规定,每个主机都需要有一个IP地址,这意味着,一共只有43亿台主机能接入网络吗?
实际上,由于一些特殊的IP地址的存在,数量远不足43亿。另外 IP 地址并非是按照主机台数来配置的,而是每一个网卡都需要配置一个或多个IP地址。
CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率、减少了浪费,但是IP地址的绝对上限并没有增加),但仍然不够用。这时候有三种方式来解决:
- 动态分配IP地址:只给接入网络的设备分配IP地址。因此同一个MAC地址的设备,每次接入互联网,得到的IP地址不一定是相同的。
- NAT技术:网络地址转换。
- IPv6::IPv6并不是IPv4的简单升级版。这是互不相干的两个协议,彼此并不兼容。IPv6 用 16 字节 128 位来表示一个 IP 地址,但是目前还没有普及。
2. NAT技术
网络地址转换(NAT)是一种网络协议,用于在私有网络和公共网络之间转换IP地址。它通常用于家庭、小型办公室或企业网络,以便在一个公共IP地址下运行多个私有IP地址。
NAT技术可以隐藏内部网络的真实IP地址,从而增加了网络安全性。它可以防止来自互联网的未经请求的数据包进入内部网络,并且可以使内部网络中的主机更难受到攻击。
在NAT中,路由器会分配一个公共IP地址给内部网络中的每一个主机,并在必要时将数据包从公共IP地址转换到内部主机的私有IP地址。这使得内部网络中的多个主机可以共享单个公共IP地址,从而减少了IP地址的使用量。
然而,NAT技术也存在一些限制,例如它可能会影响某些应用程序的性能,特别是需要建立点对点连接的应用程序,例如视频会议或P2P文件共享。
五、私网IP和公网IP
如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到因特网上。理论上使用任意的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地址,一个是 WAN 口 IP ,一个是 LAN 口 IP (子网IP)。
- 路由器 LAN 口连接的主机,都从属于当前这个路由器的子网中。
- 不同的路由器,子网IP其实都是一样的(通常都是 192.168.1.1)。子网内的主机 IP 地址不能重复,但是子网之间的 IP 地址可以重复。
- 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级,最外层的运营商路由器,WAN口 IP 就是一个公网IP了。
- 子网内的主机需要和外网进行通信时,路由器将 IP 首部中的 IP 地址进行替换(替换成 WAN 口 IP)。这样逐级替换,最终数据包中的IP地址成为一个公网 IP 。 这种技术就是 NAT(Network Address Translation,网络地址转换)。
六、路由
1. 认识路由
路由是将网络数据包从一个网络节点传递到另一个网络节点的过程。在网络中,路由器是负责路由数据包的设备。当一个数据包进入路由器时,路由器会根据其目标IP地址来确定数据包应该转发到哪个网络节点。
在路由的过程中,路由器需要查找路由表以确定数据包应该转发到哪个节点。路由表是一个数据结构,它包含了网络中的所有节点和它们之间的联系。当一个数据包到达路由器时,路由器会将其目标IP地址与路由表中的地址进行匹配,以便找到下一个节点的地址。

那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表:

- 路由表可以通过
route命令查看。 - 如果目的IP命中了路由表,就直接转发即可。
- 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。
假设某主机上的网络接口配置和路由表如下:

- 这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络。
- 路由表的 Destination 是目的网络地址,Genmask 是子网掩码,Gateway 是下一跳地址,Iface 是发送接口,Flags 中的 U 标志表示此条目有效(可以禁用某些条目),G 标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。
2. 路由表生成算法
路由表是用于将IP地址映射到网络路径的数据结构,路由表生成算法用于确定路由表中的网络路径。常见的路由表生成算法包括以下几种:
-
静态路由:管理员手动配置的路由,它们不会自动更新或更改。静态路由比较容易实现,但需要管理员手动配置,并且不适用于复杂的网络环境。
-
RIP(Routing Information Protocol):是一种距离向量路由协议,使用跳数作为距离指标,每个路由器将其邻居的路由表传递给其它路由器,以便每个路由器都能获得整个网络的路由信息。
-
OSPF(Open Shortest Path First):是一种链路状态路由协议,每个路由器将其连接到的所有路由器和网络的信息发送给其它路由器,以便每个路由器都能计算出整个网络的最短路径。
-
BGP(Border Gateway Protocol):是一种路径向量路由协议,用于在互联网上交换路由信息。它使用AS路径作为路由选择的标准,每个AS(自治系统)都将其拥有的网络告知其它AS,以便确定全局路由。
这些算法都有其优点和局限性,网络管理员需要根据网络拓扑、带宽、延迟等因素来选择适合的路由表生成算法。
相关文章:
【计算机网络】网络层IP协议
文章目录一、认识IP协议二、IP协议头部格式三、IP地址划分1. IP地址分类2. 子网划分四、IP地址数量危机1. IP地址的数量限制2. NAT技术五、私网IP和公网IP六、路由1. 认识路由2. 路由表生成算法一、认识IP协议 IP协议是Internet Protocol(互联网协议)的…...
Eclipse快捷键大全
编辑类快捷键Ctrl1: 快速修复(最经典的快捷键, 可以解决很多问题, 比如import类、try catch包围等)CtrlShiftF: 格式化当前代码CtrlShiftM: 添加类的import导入CtrlShiftO: 组织类的导入(既有CtrlShiftM的作用,又可以去除没用的导入, 一般用这个导入包)CtrlY: 重做(与CtrlZ相反…...
JavaScript 高级2 :构造函数和原型 d331702016e84f54b3594ae05e0eeac
JavaScript 高级2 :构造函数和原型 Date: January 16, 2023 Text: 构造函数和原型、继承、ES5中的新增方法 目标 能够使用构造函数创建对象 能够说出原型的作用 能够说出访问对象成员的规则 能够使用 ES5新增的一些方法 构造函数和原型 概述 在典型的 OOP 的…...
maven-war-plugin插件 overlays maven-war-plugin翻译
说明 翻译maven-war-plugin插件的部分内容 官方地址为:https://maven.apache.org/plugins/maven-war-plugin/index.html Overview 概述 Introduction 介绍 Apache Maven WAR Plugin apache maven war 插件 The WAR Plugin is responsible for collecting all artifa…...
【数据结构】初识二叉树(二叉树的入门知识)
初识二叉树一、树概念及结构1、树的概念2、树的相关概念3、树的表示4、树在实际中的运用(表示文件系统的目录树结构)二、二叉树概念及结构1、概念2、特殊的二叉树3、二叉树的性质4、二叉树的存储结构三、结语一、树概念及结构 1、树的概念 树是一种非线…...
RV1126笔记三十二:基于 FastDeploy 在 RV1126 上的部署示例(RV1126 上部署 YOLOv5 检测模型测试)
若该文为原创文章,转载请注明原文出处。 FastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具, 支持云边端部署。提供超过 🔥160+ Text,Vision, Speech和跨模态模型📦开箱即用的部署体验,并实现🔚端到端的推理性能优化。包括 物体检测、字符识别(OCR)、…...
JVM垃圾回收——G1垃圾收集器
目录 一、什么是G1垃圾收集器 二、G1垃圾收集器的内存划分 三、G1垃圾收集器的收集过程 四、G1收集器的优缺点 五、G1收集器的JVM参数配置 一、什么是G1垃圾收集器 Garbage First(简称G1)收集器是垃圾收集器技术发展史上里程碑式的成果,它摒弃了传统垃圾收集器的…...
C语言深度剖析:关键字
C语言深度剖析:关键字C语言深度剖析:关键字前言定义与声明(补充内容)最宏大的关键字-auto最快的关键字-register关键字static被冤枉的关键字-sizeof整型在内存中的存储原码、反码、补码大小端补充理解变量内容的存储和取出为什么都是补码整型取值范围关于…...
聊一聊过度设计!
文章目录什么是过度设计?过度设计的坏处如何避免过度设计充分理解问题本身保持简单小步快跑征求其他人的意见总结新手程序员在做设计时,因为缺乏经验,很容易写出欠设计的代码,但有一些经验的程序员,尤其是在刚学习过设…...
程序员在小公司(没有大牛,人少)怎么成长?
大多数小公司都是创业公司,所以它们有着非常独特的“创业心态”。所谓创业心态通常表现为关注快速增长,竭尽所能让公司盈利,或者达成其他一些迫切目标。 在这样一家公司工作的软件开发人员,你极有可能要身兼多职,不能…...
【Fastdfs实战】在本地如何将文件上传到Linux虚拟机
作者:狮子也疯狂 专栏:《Fastdfs连续剧》 坚持做好每一步,幸运之神自然会驾凌在你的身上 目录一. 🦁 前言二. 🦁 上传原理Ⅰ. 🐇 原理图解Ⅱ. 🐇 传输原理三. 🦁 实战演示Ⅰ. &…...
ERP 系统的应用对企业财务会计信息系统内部控制的影响
(一)对企业的财务信息数据进行实时和动态管理传统的财务会计信息系统一般都是采用单一的软件系统,所以在信息的传递及处理上常常不能满足企业的需要,信息与其他部门存在不对称及滞后的现象。而ERP 系统是通过有效的技术手段将企业的各种分散的数据进行完…...
智慧物联网源码带手机端源码 物联网系统源码
在智慧工厂领域,智慧城市领域,都需要对设备进行监控。比如工厂需要对周围环境温度、湿度、气压、电压,灯的开关进行监控。这时候就需要物联网平台来进行管理。 推荐一个基于java开发的物联网平台,前端HTML带云组态、可接入视频监…...
AI绘画进军三次元,有人用它打造赛博女友?(diffusion)
目录0 写在前面1 AI绘画技术飞跃2 效果展示3 环境配置3.1 下载基础模型3.2 更新.NET和模型3.3 下载绘画模型3.4 启动项目3.5 标签配置4 结语0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&a…...
计算机网络高频知识点
目录 一、http状态码 二、浏览器怎么数据缓存 三、强缓存与协商缓存 1、强缓存 2、协商缓存 四、简单请求与复杂请求 五、PUT 请求类型 六、GET请求类型 七、GET 和 POST 的区别 八、跨域 1、什么时候会跨域 2、解决方式 九、计算机网络的七层协议与五层协议分别指…...
谈谈前端性能优化-面试版
前言 当我们去面试的时候,很大概率会被面试官问这么一个问题:你有尝试过对项目做性能优化吗?或者你了解哪些性能优化的方法?听到这个问题的你可能是这样的: 似曾相识但又说不清楚,往往只能零散地说出那么几…...
JAVA连接数据库——JDBC的简单使用
JDBC即Java数据库连接.用来实现Java程序对数据库增删查改。 为了对接Java程序和数据库,java.sql提供了很多api包含在java.sql和javax.sql里面 结构: DriverManager接口: 每一个数据库的驱动程序都必须去到DriverManager注册,生成一个Connection Conn…...
Pandas数据查询
Pandas数据查询 Pandas查询数据的几种方法 df.loc方法,根据行、列的标签值查询 df.iloc方法,根据行、列的数字位置查询 df.where方法 df.query方法 .loc既能查询,又能覆盖写入,强烈推荐! Pandas使用df.loc查询数据…...
NLP-统计词频之处理停用词
前言 本文是该专栏的第1篇,后面会持续分享NLP的各种干货知识,值得关注。 一般来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或者应用服务。 举个例子,如Facebook News Feed这种社交网站推送,它的算法知道你的兴趣是自然语言处理,就会推送相关的广告或者…...
sort 定制排序规则(配合functools.cmp_to_key())
sort 定制排序规则(配合functools.cmp_to_key()) 配合例题学习 题目链接:179. 最大数 题目大意:给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意&a…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
C#中用于控制自定义特性(Attribute)
我们来详细解释一下 [AttributeUsage(AttributeTargets.Class, AllowMultiple false, Inherited false)] 这个 C# 属性。 在 C# 中,Attribute(特性)是一种用于向程序元素(如类、方法、属性等)添加元数据的机制。Attr…...
构建Docker镜像的Dockerfile文件详解
文章目录 前言Dockerfile 案例docker build1. 基本构建2. 指定 Dockerfile 路径3. 设置构建时变量4. 不使用缓存5. 删除中间容器6. 拉取最新基础镜像7. 静默输出完整示例 docker runDockerFile 入门syntax指定构造器FROM基础镜像RUN命令注释COPY复制ENV设置环境变量EXPOSE暴露端…...
