网络层ip协议

在复杂的网络环境中,确定合适的路径是数据传输的关键环节,而网络层正是负责这一核心功能的网络协议栈层级。

相关概念

路由(Routing) :确定数据从源节点(如主机)到目标节点(如另一台主机或服务器)的最佳传输路径,并将数据沿着该路径转发的过程;

主机:配有 IP 地址,但是不进行路由控制的设备;

路由器:即配有 IP 地址,又能进行路由控制;

节点:主机和路由器的统称。

1. IP协议头格式

4 位版本号(version):指定 IP 协议的版本,对于 IPv4 来说,就是 4。

4位头部长度:IP头部的长度是多少个32bit,4bit 表示最大的数字是 15,因此 IP 头部最大长度是 60 字节。

8 位服务类型(Type Of Service):3 位优先权字段(已经弃用),4 位 TOS 字段,和 1 位保留字段(必须置为 0)。4 位 TOS 分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于 ssh/telnet 这样的应用程序,最小延时比较重要;对于 ftp 这样的程序, 最大吞吐量比较重要。

16 位总长度(total length):IP 数据报整体占多少个字节。

16 位标识(id):唯一的标识主机发送的报文。如果 IP 报文在数据链路层被分片了,那么每一个片里面的这个 id 都是相同的。

3 位标志字段:

   - 第一位保留位表示目前未被使用(值为 0),仅作为预留,供未来可能的新功能扩展。

   - 第二位 置为1 表示禁止分片,这时候如果报文长度超过 MTU,IP 模块就会丢弃报文。

   - 第三位表示"更多分片",如果分片了的话,最后一个分片置为 0,其他是 1。类似于一个结束标记。

13 位分片偏移(framegament offset):是分片相对于原始 IP 报文开始处以 8 字节为单位的偏移。

因此,实际偏移字节数 = 分片偏移字段的值 × 8 字节。 因此,除了最后一个报文之外,其他报文的长度必须是 8 的整数倍(否则报文就不连续了)。

8 位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数,一般是 64。每次经过一个路由,TTL -= 1,一直减到 0 还没到达,那么就丢弃该数据包。这个字段主要是用来防止出现路由循环。

8 位协议:表示上层协议的类型

16 位头部校验和:使用 CRC 进行校验,来鉴别头部是否损坏。

32 位源地址和 32 位目标地址:表示发送端和接收端。

2.网络划分

IP 地址分为两个部分,网络号和主机号

 - 网络号:保证相互连接的两个网段具有不同的标识;

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

 - 子网本质上是一个 “逻辑分组”:将网络号完全相同的主机归为同一子网,意味着这些主机在网络层属于 “同一个本地网络”,可以直接通信(无需经过路由器转发)。

 - 如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复。

通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的 IP 地址都不相同。

手动管理子网内的 IP,是一个相当麻烦的事情,而 DHCP技术,能够自动的给子网内新增主机节点分配 IP 地址,避免了手动管理 IP 的不便。

一般的路由器都带有 DHCP 功能,因此路由器也可以看做一个 DHCP 服务器。

过去曾经提出一种划分网络号和主机号的方案,把所有 IP 地址分为五类,如下图所示 (该图出自[TCPIP])。

 - 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

 但是这种划分方案存在明显缺陷:

(1)地址浪费严重

 - A 类地址(网络号 8 位)支持 1600 多万台主机 / 子网,但实际中几乎没有组织需要如此多的主机,导致大量地址闲置。

 - B 类地址(网络号 16 位)支持 65534 台主机 / 子网,成为多数中型组织的首选,结果 B 类地址很快耗尽,而 A 类地址仍有大量剩余。

(2)灵活性不足

分类划分强制网络号长度固定(A 类 8 位、B 类 16 位、C 类 24 位),无法根据组织规模灵活调整子网大小。例如,一个需要 1000 台主机的组织,只能申请 B 类地址(浪费 6 万多地址),而 C 类地址(最多 254 台主机)又不够用。

针对这种情况提出了新的划分方案,称为 CIDR(Classless Interdomain Routing)。

CIDR 通过 子网掩码 + 无类别划分 解决了上述问题,核心规则如下:

1. 子网掩码:明确网络号与主机号的边

- 子网掩码是 32 位二进制数,格式为 “连续的 1 + 连续的 0”(1 表示网络号部分,0 表示主机号部分)。例如:255.255.255.128(二进制11111111 11111111 11111111 10000000)。

 - 通过 IP 地址与子网掩码的 按位与 运算 ,可直接得到网络号。

2. 无类别划分:网络号长度可变

 - 彻底抛弃 A/B/C 类的固定网络号长度,网络号可以是任意位数(1-30 位,因为主机号至少需要 2 位,支持 2 台主机)。

- 表示方法:IP地址/网络号位数(称为 “CIDR 记法”)。例如:192.168.1.0/25 表示网络号为 25 位(子网掩码前 25 位为 1),主机号为 7 位(支持 126 台主机)。

可见,IP 地址与子网掩码做与运算可以得到网络号,主机号从全 0 到全 1 就是子网的地址范围;

IP 地址和子网掩码还有一种更简洁的表示方法,例如 140.252.20.68/24,表示 IP 地址为140.252.20.68,子网掩码的高 24 位是 1,也就是 255.255.255.0。

特殊的IP地址

将 IP 地址中的主机地址全部设为 0,就成为了网络号代表这个局域网

将 IP 地址中的主机地址全部设为 1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;

127.*的 IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1。

3.私有和公网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(LAN口+WAN口)设计是实现这一功能的关键:

1. LAN口IP(子网IP,Local Area Network):内网的网关地址

   - 通常为 192.168.1.1 或 192.168.0.1,是路由器为内网(LAN侧)分配的IP,作为子网内所有主机的“出口网关”。  

   - 子网内的主机(手机、电脑等)通过DHCP自动获取IP(如192.168.1.2、192.168.1.3),这些IP必须唯一(避免冲突),且网络号与LAN口IP一致(同属 192.168.1.0/24 子网)。  

2. WAN口IP(Wide Area Network):连接上层网络的身份标识

   - 由运营商动态分配(少数情况为固定公网IP),属于运营商路由器的子网。例如,家用路由器的 WAN口IP 可能是 100.64.xx.xx(运营商内网)或 223.xx.xx.xx(公网IP)。  

   - 此时,家用路由器本身成为运营商子网中的一个“主机”,与其他家庭的路由器共享运营商的网络资源。  

 二、子网IP的“重复性”与网络隔离

- 子网内唯一,子网间可重复:  

不同家庭的路由器 LAN口IP(如 192.168.1.1)可以完全相同,因为它们属于彼此隔离的子网(物理或逻辑上不直接互通)。子网内的主机IP(如`192.168.1.5`)仅在本子网内有意义,跨子网时会被 NAT替换,因此无需担心全网冲突。  

三、NAT 技术(Network Address Translation):内网访问外网的 “地址翻译器”

当子网内的主机(如192.168.1.2)访问外网(如 www.baidu.com 的公网 IP 180.101.50.242)时,NAT 的工作流程如下:

出站时替换源 IP:

主机发送的数据包源 IP 为192.168.1.2,经路由器时,NAT 将源 IP 替换为路由器的 WAN 口 IP(如100.64.1.10),并记录 “192.168.1.2:端口 ↔ 100.64.1.10:端口” 的映射关系。

入站时还原目标 IP:

外网服务器的响应数据包目标 IP 为100.64.1.10,路由器收到后,通过映射关系将目标 IP 还原为192.168.1.2,转发给内网主机。

家用路由器通过“双IP+NAT”机制,实现了内网(子网)与外网的隔离与通信:LAN口管理内网主机,WAN口连接上层网络,NAT负责地址转换,既解决了公网IP短缺问题,又保障了内网安全。而公网服务器的核心是拥有“可被全网访问的IP”,这也是云服务器能提供公共服务的基础。

4. 路由

路由:确定数据从源节点(如主机)到目标节点(如另一台主机或服务器)的最佳传输路径,并将数据沿着该路径转发的过程。

一、路由的本质:基于路由表的“逐跳决策”

IP数据包的传输并非直接从源主机“直达”目标主机,而是像“接力赛”一样,通过多个路由器(节点)逐跳转发。每一跳的决策依据是节点(路由器或主机)内部的路由表,它相当于节点的“地图”,记录了“到达某目标网络应走哪条路”的规则。

二、路由表的核心要素与作用

路由表通常包含以下关键信息:

Destination:目的网络地址(如192.168.56.0),表示要到达的网络。
Genmask:子网掩码(如255.255.255.0),用于计算目的IP的网络号。
Gateway:下一跳地址(如192.168.10.1),表示数据包应转发给哪个路由器。
Iface:发送接口(如eth0、eth1),表示从哪个网络接口发送数据包。
Flags:(标志) - U:条目有效;- G:需要通过路由器(下一跳是路由器IP);-无G:目标网络与本机直接相连,可直接通信。 |

作用:当节点收到数据包时,会用目的IP与路由表中各条目的子网掩码做“按位与”运算,得到目的网络号,再匹配路由表中的`Destination`,从而确定转发方向。

三、转发过程详解

假设某主机上的网络接口配置和路由表如下:

这台主机有两个网络接口,一个网络接口连到 192.168.10.0/24 网络,另一个网络接口连到 192.168.56.0/24 网络。

例1:目标地址 192.168.56.3(同一子网内的直接通信)

(1)计算网络号: 

目的IP 192.168.56.3 与第二行的子网掩码(假设为255.255.255.0)做“按位与”,结果为192.168.56.0,与其 Destination(192.168.56.0)完全匹配。  

(2)判断转发方式: 

该条目无 G 标志,说明目标网络与本机的 eth1 接口直接相连(属于同一子网)。因此,数据包无需经过路由器,直接从 eth1 接口发送到目标主机(通过数据链路层的MAC地址交互)。  

例2:目标地址 202.10.1.2(跨子网的路由转发)

(1)匹配路由表

目的IP与路由表中前几项的子网掩码运算后,均无法匹配对应的 Destination(即不在本机直接相连的子网中)。  

(2)使用缺省路由: 

触发路由表最后一行的“缺省路由”(所有不匹配的情况都走这条),规则为:从 eth0 接口发送,下一跳地址为 192.168.10.1(路由器)。  

(3)逐跳接力

数据包被转发到 192.168.10.1 路由器后,该路由器会用自己的路由表重复上述过程,继续决定下一跳,直到数据包到达目标网络。  

四、“一跳”的具体含义
“一跳是数据链路层中的一个区间”,这一点非常关键:  

- 在以太网中,“一跳”指的是从一个数据链路层设备到另一个直接相连的设备(如主机到路由器、路由器到路由器),通过MAC地址完成帧的传输。  

- 每一跳的范围被限制在“同一个数据链路层网络”(如同一以太网、同一WiFi网络),而路由表的作用就是将跨网络的传输分解为多段“一跳”,实现从源到目标的完整路径。  

总结
路由的过程本质是“基于路由表的逐跳决策+数据链路层的帧传输”:  
1. 节点通过路由表确定“下一跳”地址和发送接口(网络层决策);  
2. 数据在“一跳”范围内通过MAC地址完成帧的传输(数据链路层执行);  
3. 重复上述步骤,直到数据包到达目标主机。  

这种机制既灵活适应了复杂的网络拓扑,又通过“分而治之”的方式降低了单节点的决策复杂度,是互联网能够高效运转的核心逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值