🌀 鱼油のB10g

✦ 不定期更新技术随想

✦ 分享奇妙发现

📌 近期动态:

探索AI和工具使用...

第三章 第13.1天

同学们!今天咱们来拆解互联网的“快递总调度”——IP协议。它负责把你在宿舍点的外卖(数据包),从美团服务器(源IP)送到你宿舍楼下(目标IP)。虽然它不保证外卖一定送到(可能丢包)、也不管外卖员走哪条路(无连接),但全球几十亿设备能互联,全靠它建立了一套地址体系转运规则!我会用日常上网、开黑卡顿这些例子,带你透视IP数据包里的秘密,并用Wireshark抓包实战验证!( •̀ ω •́ )✧


标题:宿舍上网背后的隐形快递员:IP协议原理拆解与Wireshark抓包实战


一、IP协议原理:互联网的“地址簿”与“转运规则”

1. IP是啥?它管些啥?

定义: Internet Protocol (互联网协议),是 TCP/IP协议栈的核心,工作在网络层(OSI模型的第3层)。它的职责就是把数据包从源设备送到目标设备,跨越多个网络(比如从你宿舍到B站机房)。
核心特性(也是痛点):
面向无连接 (Connectionless): 寄快递前不需要先打电话确认收件人在家! IP发送数据包前,
不会
像TCP那样先握手建立连接。它只管按地址发出去,不管对方能不能收到。想象你给辅导员发了个紧急请假邮件,但不点“已读回执”*——你只知道发出去了,不知道他看没看到。(´・_・) ***不可靠传输 (Unreliable):** **不保证快递一定能送到!** IP协议**不提供**确认、重传、排序这些保证可靠的功能。数据包可能丢失、乱序、重复。保证可靠是上层(如TCP)的事情。想象快递员把包裹放楼下就走了,不通知你,也可能被别人错拿。 ***设备IP地址分配(唯一性):** **每个联网设备必须有个唯一的“门牌号”——IP地址 (IPv4是32位,如 192.168.1.100)。** 就像你宿舍楼 (192.168.1.0/24) 和隔壁女生楼 (10.1.2.0/24`) 的门牌号不能重复,否则快递员(路由器)就迷糊了!分配方式:
手动配置 (Static): 网管手动给你电脑设IP(学校机房常用)。
自动分配 (Dynamic): DHCP协议自动分配(宿舍路由器常用,开机就能上网)。
动态分配 (Dynamic): DHCP协议自动分配(宿舍路由器常用,开机就能上网)。
路由选择 (Routing): 快递中转站接力! IP数据包通常要经过多个路由器(快递中转站)。每个路由器根据
路由表
,决定把包往哪个“下一跳”路由器送,最终到达目标网络和目标主机。想象你的外卖从中央厨房 -> 城市分拣中心 -> 学校配送站 -> 你宿舍楼。

2. IP数据包结构:拆解“快递单”

数据要被IP协议传输,必须封装成标准的IP数据包。这就是Wireshark抓包的核心内容!一个IPv4数据包头部至少20字节,结构如下:

// IPv4 数据包头结构 (关键字段解析) - 20字节起
// --------------------------------------------------------------------
// | 字段 (Field)| 长度 (位) | 说明 & 大学生活案例|
// |-------------------------------|----------|----------------------------------|
// | Version (版本)| 4| **IP版本号:** 4 (IPv4) 或 6 (IPv6) |
// | Header Length (头部长度)| 4| **头部长度 (单位: 4字节):** 最小值5 (20字节),最大值15 (60字节)。带选项时才变长 |
// | Differentiated Services (DS) | 8| **服务质量 (QoS):** 区分流量优先级。 |
// ||| 例:开黑游戏包 (`CS5, 0xB8`) 比下载电影包 (`Best Effort, 0x00`) 优先级高,路由器优先转发!(避免团战卡顿) |
// | Total Length (总长度)| 16| **整个IP包的长度 (头+数据):** 最大值65535字节。宿舍路由器MTU通常1500,超了就要分片! |
// | Identification (标识)| 16| **分片标识符:** 同一个大包分出来的小片,ID值相同,便于接收方重组。(想象大件快递拆箱,所有小箱贴同一个运单号) |
// | Flags (标志)| 3| **分片控制标记:**|
// |- [0] Reserved (保留)|||
// |- [1] Don't Fragment (DF)|| **=1**: 禁止分片!如果包太大路由器直接丢弃并报错(ICMP)。 |
// |- [2] More Fragments (MF)|| **=1**: 后面还有分片;**=0**: 这是最后一个分片或没分片 |
// | Fragment Offset (分片偏移)| 13| **当前分片在原数据中的位置 (单位: 8字节):** 用于重组时排序拼装。 |
// | Time To Live (TTL)| 8| **生存时间:** 防包在环路里转圈。每经过一个路由器减1,减到0就丢弃并报错(ICMP)。 |
// ||| **宿舍案例:** `Windows默认=128`, `Linux默认=64`。`tracert`命令就是利用TTL递增探测路径! |
// | Protocol (协议)| 8| **上层协议号 (关键!):** 告诉接收方IP包里的数据交给哪个传输层协议处理 |
// ||| `1=ICMP(ping)`, `6=TCP(网页/游戏)`, `17=UDP(视频/DNS)`, `89=OSPF(路由协议)` |
// | Header Checksum (头部校验和) | 16| **只校验IP头部**完整性,防止传输中头部损坏。数据部分由上层协议校验。 |
// | Source IP Address (源IP)| 32| **寄件人地址:** 你的电脑IP (e.g., `192.168.1.100`) |
// | Destination IP Address (目标IP)|32| **收件人地址:** 目标服务器IP (e.g., `B站服务器IP`) |
// | Options (选项)| 可变| 额外功能 (如记录路由、时间戳),很少用。头部长度>5时才存在。 |
// | Padding (填充)| 可变| 确保头部长度是4字节的倍数。|
// --------------------------------------------------------------------

*关键字段案例解读:
*TTL (生存时间): ping 你的网关,看返回的TTL。通常是128 (Windows) 或 64 (Linux)。tracert www.baidu.com 能看到路径上每个路由器返回TTL耗尽的包,从而探测路径!
*Protocol (协议号): Wireshark抓包时,看Protocol字段就知道包里是啥:
*6 -> TCP包 (网页、SSH、游戏控制信令)
*17 -> UDP包 (直播视频流、DNS查询)
*1 -> ICMP包 (ping命令、网络错误报告)
*Flags & Fragment (分片): 当你要传输一个大文件 (超过链路层MTU,通常是1500字节),IP层会自动把它分片。比如一个3000字节的TCP包会被分成:
*分片1: IP头(20) + 数据(1480),MF=1, Offset=0
*分片2: IP头(20) + 数据(1480),MF=0, Offset=185 (1480 / 8 = 185)
*分片2: IP头(20) + 数据(1480),MF=0, Offset=185 (1480 / 8 = 185)
*Differentiated Services (DS): 高级路由器可以根据这个字段区分流量优先级。宿舍路由器可能不处理,但企业网/核心网会用。游戏本可以尝试设置QoS规则标记游戏流量。


二、IP协议实战:命令查询与Wireshark抓包分析

1. 基础命令:查看你的“网络门牌”

*Windows:

ipconfig
# 输出示例:
# 无线局域网适配器 WLAN:
#连接特定的 DNS 后缀 . . . . . . . :
#本地链接 IPv6 地址. . . . . . . . : fe80::c123:4567:890a:bcde%15
#IPv4 地址 . . . . . . . . . . . . : 192.168.1.100# <-- 你的IP
#子网掩码. . . . . . . . . . . . : 255.255.255.0
#默认网关. . . . . . . . . . . . . : 192.168.1.1# <-- 路由器/网关IP

ipconfig /all# 查看更多细节,包括物理地址(MAC)、DHCP租期等

*Linux/Mac:

ifconfig# 传统命令,查看IP、掩码、MAC等(部分新系统用ip命令)
# 或
ip addr show# 更现代的iproute2工具
# 输出示例 (精简):
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
#link/ether aa:bb:cc:dd:ee:ff# MAC地址
#inet 192.168.1.100/24 brd 192.168.1.255# IP/子网掩码长度/广播地址
#...

ip route show# 查看路由表,找默认网关
# 输出示例:default via 192.168.1.1 dev eth0 ... # 默认网关是192.168.1.1

2. Wireshark抓包实战:透视IP数据包

让我们通过最常用的 ping 命令,触发IP数据包,并用Wireshark捕获分析。

1.启动Wireshark抓包:
*打开 Wireshark。
选择正确的上网网卡 (WiFi或有线)。
(可选) 设置抓包过滤: 在捕获过滤框输入 icmp,只抓Ping相关的包(方便分析)。
*双击网卡开始捕获。
2.
执行Ping操作:

*打开 CMD (Windows) 或 Terminal (Linux/Mac)。
*输入 ping -n 4 <网关IP> (Windows) 或 ping -c 4 <网关IP> (Linux/Mac)。-n/-c 指定发送4个包。
*等待Ping完成 (Reply from ... 或者 64 bytes from ...)。
3.停止抓包并分析:
*回到Wireshark,点击红色按钮停止捕获。
*过滤: 如果没设抓包过滤,在显示过滤栏输入 icmp
*找到Ping包序列: 你应该能看到至少8个包(4个Request + 4个Reply)。选中一个 Echo (ping) request 包。
*重点分析IP头部 (详情区):
*展开 Internet Protocol Version 4
*0100 .... = Version: 4 -> IP版本是IPv4
*.... 0101 = Header Length: 20 bytes (5) -> 头部长度20字节 (最小标准头,无选项)
*Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) -> QoS默认值 (尽力而为)
*Total Length: 60 -> 整个IP包长度60字节 (头20 + ICMP数据40)
*Identification: 0xabcd (43981) -> 包标识符 (随机值,同一次Ping的4个Request ID相同)
*Flags: 0x00 -> 分片标志
*...0 .... = Don't fragment: Not set -> 允许分片
*.... 0... = More fragments: Not set -> 这是最后一个分片 (或者没分片)
*Fragment offset: 0 -> 分片偏移0 (未分片)
*Time to live: 128 -> TTL=128 (Windows默认) -> 经过第一个路由器后变成127
*Protocol: ICMP (1) -> 上层是ICMP! 对应Ping命令
*Header checksum: 0x1234 [validation disabled] -> 头部校验和 (Wireshark默认不验证)
*Source: 192.168.1.100 -> 源IP (你的电脑)
*Destination: 192.168.1.1 -> 目标IP (你的网关)
*再看一个Echo reply包: 选中对应的Reply包。主要看:
*Source: 192.168.1.1 -> Reply的源IP是网关
*Destination: 192.168.1.100 -> Reply的目标IP是你电脑
*Time to live: ... -> 通常是64 (网关是Linux设备) 或 128/255 (不同路由器系统)

3. 进阶实战:抓取分片IP包

Ping的小包通常不会分片。我们可以强制发送大包触发分片:

1.Windows (发送大包Ping):

ping -l 3000 <网关IP># -l 指定数据部分大小 (字节)。3000 > 通常MTU(1500),会触发分片!

2.Linux/Mac:

ping -s 3000 <网关IP># -s 指定数据部分大小 (字节)

3.在Wireshark中分析 (显示过滤 ip.addr == <网关IP>):
*你会看到多个IP包,它们的 Identification 字段值相同! 属于同一个大包的分片。
*看 第一位分片包:
*Flags: 0x20 (二进制 0010 0000) -> ...0 .... = Don't fragment: Not set, .... 1... = More fragments: Set -> 后面还有分片!
*Fragment offset: 0 -> 偏移量0 (起始位置)
*看 中间分片包 (如果有):
*Flags: 0x20 (More fragments set) -> 后面还有
*Fragment offset: 185 (1480字节 / 8 = 185) -> 偏移185个单位 (1480字节处开始)
*看 最后一位分片包:
*Flags: 0x00 (二进制 0000 0000) -> .... 0... = More fragments: Not set -> 这是最后一片!
*Fragment offset: 370 (2960字节 / 8 = 370) -> 偏移370个单位 (2960字节处开始),剩余数据填不满1480字节。
接收方 (网关或你的电脑收到后) 会根据 Identification, Flags, Fragment Offset 把所有分片按顺序重组*回原始的3000字节数据,再交给上层ICMP处理。


三、总结:IP - 互联网的基石与局限

1.核心角色: 互联网的寻址 (IP地址)路由 (跨越网络) 基础协议。
2.特性双刃剑:
无连接 & 不可靠: 高效 (省去建立连接开销),但可靠性依赖上层* (TCP)。
尽力而为 (Best Effort): 网络繁忙时可能丢包、乱序* (导致卡顿、延迟)。
3.关键机制:
TTL: 防环路,也是tracert探测路径的核心。
分片与重组: 解决大包传输问题 (效率不高,尽量避免)。
协议号: 连接网络层与上层传输层/应用层的桥梁。
4.
排错关联:
*
*ping 不通?先看IP层通不通! (检查IP配置、ARP是否解析成功、TTL是否耗尽)。
*下载大文件慢?可能IP分片效率低或丢失 (尝试调小上层应用MTU)。
*跨网段访问失败?检查路由表 (route print / ip route show) 和防火墙规则

学长最后叮嘱: 理解IP协议的原理,是诊断任何网络问题的起点。下次再遇到“能上QQ不能开网页”(DNS问题在传输层/应用层)、“游戏延迟高但能Ping通”(IP层通,问题可能在传输层拥塞或上层应用)这类经典问题时,你就能清晰地定位问题层次了!拿起Wireshark,抓个包,看看IP头里的故事,你会对宿舍的网络世界有全新的认识!(◕‿◕) 动手试试吧!

posted on 2025-08-04 06:19  鱼油YOU  阅读(35)  评论(0)    收藏  举报