深入解析 IP 协议:从基础核心机制到地址管理、路由选择的全方位指南
目录
- 一、IP 的基础核心要素
- 1. IP 的协议定位:在哪一层?
- 2. 网络层做什么
- 3. IP的基本概念
- 4.IP的协议头格式
- 二、地址管理
- 1. 动态地址分配ip
- 2. NAT机制 (网络地址转换,当前网络世界最主要的方式)
- IP地址划分
- NAT机制的作用
- NAT背景下,网络通信如何进行的?
- 1.同一个局域网下,设备A访问设备B
- 2. 公网设备A访问公网设备B
- 3. 不同局域网,设备A访问设备B
- 4. 局域网设备A访问公网设备B
- 5. 公网设备A访问局域网设备B
- 3. 使用IPV6协议
- 4. IP地址的其他划分
- 网段划分
- 网络号和主机号的配置
- 特殊的IP地址
- 三、路由选择
- 四、最后说一下
一、IP 的基础核心要素
1. IP 的协议定位:在哪一层?
在TCP/IP 四层模型中,IP 协议位于网络层,上接传输层(如 UDP,TCP 等传输层协议),下连数据链路层

2. 网络层做什么
IP位于网络层,网络层主要做的事情就两个
- 地址管理:使用 IP 地址,这样的概念,标识网络上的某个设备的位置
- 路由选择:在两个通信的节点之间,规划出一个合理的路径
3. IP的基本概念

- 主机:配有IP地址,但是不进⾏路由控制的设备
- 路由器:即配有IP地址,⼜能进⾏路由控制
- 节点:主机和路由器的统称
4.IP的协议头格式

- 版本(4位)
标识ip协议版本(商用主要有ipv4,ipv6。开发阶段主要针对ipv4,本篇讲解ipv4为主) - 首部长度(4位)
IP协议的报头,表示指示 IP 首部的总长度(含选项字段),和TCP的协议报头也是一样的,单位也是以4字节为单位,总长为0xF(15)*4 >= 60 - 服务类型(TOS,8 位)
决定了ip协议的工作方式,8位服务类型:3位优先权字段(已经弃⽤),4位TOS字段,和1位保留字段(必须置为0). 4位TOS分别表⽰: 最⼩延时,最⼤吞吐量,最⾼可靠性,最⼩成本 .这四者相互冲突,只能选择⼀个.对于ssh/telnet这样的应⽤程序,最⼩延时⽐较重要;对于ftp这样的程序,最⼤吞吐量⽐较重要
IP可以切换工作状态:最小延时,最大吞吐量,最高可靠性,最小成本
工作状态也有 api 可以用来设置开发中很少直接涉及到咱们 Java 程序员主要写 web 类应用
- 总长度(16 位)
单位为 “字节”,表示整个 IP 数据报(首部 + 数据)的总长度,总长为64K
总长为64K不是和UDP一样吗,岂不是很容易满,但是IP和UDP不一样的是,IP协议内置了拆包组包的功能,由标识,标志,片偏移相互协作,比如,IP 携带一个比较大的 TCP 数据报,IP 协议就会自动拆成多个,通过多个 IP 数据报共同传输一个 TCP 数据报
-
标识(16 位)
拆包: 把拆出来的多个包,设为相同的标识
组包: 把相同标识的数据包组合到一起 -
标志(3 位)
其中一个标志位,表示是否触发了拆包操作还有一个表示,当前包是否是最后一个 -
片偏移(13 位)
描述了先后顺序,偏移小的放前面,大的放后面 -
生存时间(TTL,8 位)
一个IP 数据报,能够在网络上传输的最大时间
注意这个时间不是平时我们所见的时间单位,而是“次数”为单位
IP 数据报每次经过一个路由器转发一次,TTL 的值就-1,TTL减到 0,就说明包到不了,就要被丢弃掉
用次数作为单位的合理性体现在:如果你发了一个错误的数据报(目的ip地址错误),无论如何都到达不了目的地,但是包肯定不能无线传输
但是有没有存在一种可能,通过64转发还是到达不了目的地呢,64会不会太少呢?
理论上存在,实际上可能性不大
1.初始值可以发送改变不一定都是64,可以发生变化
2.网络中,有一个“六度空间"这样的理论~~ 两个设备之间,不需要那么多次转发,就足够了
- 协议(8位)
标识传输层使用哪种协议
分用的时候,IP 协议解析 IP 数据报的时候,拿到载荷,交给上层处理此处 8 位协议编号,就能起到区分效果
传输层到应用层 =>端口号
网络层到传输层 =>8 位协议
数据链路层到网络层=>也有一个类似的协议编号的
- 首部检验和(16 位)
仅校验 IP 首部的完整性(数据部分由上层协议校验(TCP,UDP自行校验)) - 源目IP地址和目的IP地址(IP协议中最核心的部分)
分别标识发送方和接收方的 IP 地址,是 IP 寻址的核心标识。
IP 地址本质上是通过 32 位的整数来表示的,由于 32 位整数不方便阅读,通常会把 |P 写作点分十进制 表示方式用三个点,分出四个部分,每个部分两个字节长度(0~255)
二、地址管理
大家都知道到,要发挥ip地址的作用,肯定是都希望ip地址是唯一的,32位的ip地址最多能表示大约42亿9千万个不同的ip地址,够用吗?不够,在2025年的今天,上网的设备太多了,PC,服务器,移动设备和物联网设备等等,那咋办呢,这就引入了两个主要方法:动态地址分配ip 和 NAT机制
1. 动态地址分配ip
由DHCP(动态主机配置协议)服务器自动为网络中的设备分配 IP 地址的机制,简单的说就是,就是上网在分配,不上网就不分配
ip的数量还是有限的,只能有所缓解,但是还是治标不治本
2. NAT机制 (网络地址转换,当前网络世界最主要的方式)
IP地址划分
可以把所以的ip分成两大类:公网ip/外网ip,私网ip/内网ip
-
公网ip/外网ip
公网ip是唯一的

-
私网ip/内网ip
以[10.* ] [172.16-172.31.* ] [ 192.168.* ] 为开头的ip地址

私网在不同局域网中可以重复,你家的局域网中与我学校的局域网就可能存在一样的私网地址,但是单独在我学校局域网中就不能重复这个私网ip地址
NAT机制的作用
在NAT机制下,可以用一个 外网 IP 对应到一系列的内网的设备,也就是让一个公网 IP 对应多个内网 IP,实现多设备共用一个公网地址访问互联网
一个设备有一个独立的局域网 IP(允许重复)
但是多个设备共用同一个外网 IP(不允许重复)

这就使得在有限的IP地址下,节省 IPv4 公网 IP 资源,让多个内网设备共用 1 个公网 IP 访问互联网,缓解 IPv4 地址枯竭问题
扩展
静态ip与动态ip
动态 IP:你的电脑查到路由器上,默认会通过 DHCP 机制,自动分配一个局域网 ip就可以上网了(自动分配,每次分的都可能不一样)
静态ip:手动固定分配,地址长期不变,稳定性高,适用于服务器、需要外网固定访问的设备
NAT背景下,网络通信如何进行的?
1.同一个局域网下,设备A访问设备B
由于IP本身不允许重复,自然不受任何影响,NAT不起作用
2. 公网设备A访问公网设备B
由于公网IP本身也不重复,也不受影响,NAT不起作用
3. 不同局域网,设备A访问设备B
不允许的,NAT机制禁止这样的访问方式
4. 局域网设备A访问公网设备B
采用网络地址映射

如果同一个局域网中,又来了个设备B,IP仍然转换为公网ip:10.1.1.1,端口号为:源端口号,返回响应的时候通过NAT 映射表 + 端口号识别,返回设备B
如果又来了个设备C且端口,碰巧和设备B一样怎么办,答仍然可以正常传输,NAT设备进行替换的时候,端口号是可以修改随意进行修改的

5. 公网设备A访问局域网设备B
是不允许的,只能通过特殊的手段,比如内网穿透,VPN
3. 使用IPV6协议
IPv4 是使用 4 个字节作为 ,IP 地址IPv6而是使用 16 个字节作为 IP 地址,也是就说128个bit,足以应付全球范围内ip不够的问题
既然ipv6可以包含地球上所以的ip需求了,那为什么全球范围内普及率这么低呢
笼统的说,升级ipv6需要升级路由器设备,需要金钱的成本,而ipv4只需要给路由器的软件升级就可以了
4. IP地址的其他划分
网段划分
可以把一个IP地址划分成两个部分:
1.前半部分:称为“网络号”
2.后半部分:称为“主机号”

同一个局域网中,网络号必须相同,主机号必须不同
两个相邻的局域网中,网络号必须不同,主机号无限制
网络号和主机号的配置
哪个部分是网络号,哪个部分是主机号是可以配置的

上古时期的划分方式,现在已经不用了,了解一下即可

特殊的IP地址
- 将IP地址中的主机地址全部设为0,就成为了⽹络号,代表这个局域⽹
- 将IP地址中的主机地址全部设为1,就成为了⼴播地址,⽤于给同⼀个链路中相互连接的所有主机发送数据包
- 127.*的IP地址⽤于本机环回(loopback)测试,通常是127.0.0.1
三、路由选择
IP 协议中的第二个要点,通过IP 协议,进行数据转发的过程,转发的过程及其复杂,这变只讨论一下简化的模型
举个例子:
假设你住在城东小区,想去城西的市图书馆,且没有导航,只能 “问路”(对应网络中数据包通过 “路由器” 逐跳选路):
从小区出发,问路人 A
路人 A 知道图书馆在城西,建议你先坐 101 路公交往西走 —— 这就像网络中第一个路由器,根据目标位置给出 “第一跳” 的路径决策。坐 101 路到中心广场站,问司机 B司机 B
告诉你:在中心广场站下车,换乘地铁 3 号线 —— 这就像第二个路由器,基于当前位置和目标,指引 “下一跳” 的换乘(路径转发)。坐地铁 3 号线到文化街站,问乘客 C
乘客 C 告诉你:坐到图书馆站下车,再问路边行人 —— 这就像第三个路由器,继续细化路径,指引到更接近目标的节点。出图书馆站,问店员 D店员
D 告诉你:往南走 50 米,左转进小巷,再走一段就到了 —— 这就像最后一个 “边缘路由器”,直接指引到最终目的地。
每次问的时候,都会更接近
这里谈到的路由选择,对于路由器来说,也是这样的,网络环境非常复杂的环境,任何一个路由器,无法存储所有的网络信息的,但是每个路由器,是可以知道附近的网络情况(至少知道谁和他相连),当数据包到达某个路由器的时候就会匹配这个路由器的“路由表”(路由表就记录了这个路由器周围的设备的 IP 是啥,以及也会记录每个设备要通过哪个口转发过去)

四、最后说一下
本章内容虽然面试可能不考,写代码可能也用不到,毕竟在网络层平时不直接接触,但是或许之后的搭建某个环境进行某些测试是就用到了,并且也对于程序员来说也属于”常识“类的内容,还是值得得花点时间来整理一下的,希望这篇文章能帮助到你们







