常见协议号
常见协议号及其分配逻辑
| 协议号 | 协议 | 英文全称 | 说明 |
|---|---|---|---|
| 1 | ICMP | Internet Control Message Protocol | 控制消息,用于网络诊断(ping/traceroute) |
| 2 | IGMP | Internet Group Management Protocol | 组播管理 |
| 4 | IPIP | IP in IP | IP封装,就是我们现在讨论的 |
| 6 | TCP | Transmission Control Protocol | 可靠传输,面向连接 |
| 17 | UDP | User Datagram Protocol | 无连接传输,简单快速 |
| 41 | IPv6 | IPv6 encapsulation | IPv6 over IPv4隧道 |
| 47 | GRE | Generic Routing Encapsulation | 通用路由封装,思科推出 |
| 50 | ESP | Encapsulating Security Payload | IPsec 加密 |
| 51 | AH | Authentication Header | IPsec 认证 |
分配的历史和逻辑
-
早期分配(1-100):
-
很多核心协议都是在互联网发展初期分配的
-
TCP(6)和UDP(17)都是在1981年的RFC 790中首次标准化
-
数字不连续反映了当时不同协议标准化的时间顺序
-
-
技术分组:
-
1-10:基础控制协议(ICMP、IGMP等)
-
传输层协议:TCP(6)、UDP(17)
-
隧道协议:IPIP(4)、GRE(47)等
-
安全协议:ESP(50)、AH(51)等
-
-
为什么是这些特定数字?
-
很大程度上是历史原因,没有特别复杂的数学逻辑
-
早期协议获得较低的号码,后来开发的协议获得较高的号码
-
类似于电话号码的区号分配 - 先到先得
-
实际应用中的意义
当操作系统收到一个IP包时,处理流程如下:
python
# 伪代码:操作系统内核处理IP包
def process_ip_packet(packet):
protocol_number = packet.ip_header.protocol
if protocol_number == 6: # TCP
hand_to_tcp_stack(packet)
elif protocol_number == 17: # UDP
hand_to_udp_stack(packet)
elif protocol_number == 4: # IPIP
hand_to_ipip_tunnel(packet)
elif protocol_number == 1: # ICMP
hand_to_icmp_handler(packet)
# ... 其他协议
与端口号的本质区别
理解这一点很重要:
| 特性 | 协议号 | 端口号 |
|---|---|---|
| 作用范围 | 整个IP包 | 单个主机内的应用程序 |
| 处理层级 | 网络层(OSI第3层) | 传输层(OSI第4层) |
| 用途 | 告诉系统这是什么协议 | 告诉系统交给哪个程序 |
| 类比 | 信封里装的是什么 |
本回答由 AI 生成,内容仅供参考,请仔细甄别。
有一个8位的字段叫做“协议”(Protocol),用来指示IP数据包 怎么表示4 - IPIP (IP in IP encapsulation)
我们讨论的是IPv4数据包头的“协议”字段。这个字段是一个8位的数字,用来指示IP数据包的数据部分使用的是哪种上层协议。
对于IPIP(IP in IP封装),协议号是4。这意味着当IPv4数据包的协议字段被设置为4时,表示这个IP数据包的数据部分是一个完整的IP数据包(即另一个IP头及其数据)。
现在,我们来看一下IPv4数据包头的结构(简化版):
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 版本 | 头长度 | 服务类型 | 总长度 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
时来天地皆同力,运去英雄不自由
浙公网安备 33010602011771号