路由器如何判定接收到的数据包对应何种特定网络协议?
关于路由器识别OSPF等网络协议的原理说明
首先先纠正一个常见认知误区:端口号是传输层(TCP/UDP/SCTP等)的专属字段,作用是区分同一台设备上传输层之上的不同应用进程,从来不是用来给路由器识别网络层协议的依据。
路由器判断数据包所属协议,靠的是不同网络封装层自带的类型标识字段,完全不需要依赖端口,OSPF的识别也完全遵循这个规则,具体逻辑如下:
- 二层封装阶段:比如最常见的以太网帧,帧头固定有2字节的
EtherType字段,设备收到帧先读这个字段判断三层载荷类型:值为0x0800代表载荷是IPv4报文,0x86DD代表是IPv6报文,0x0806代表是ARP报文。 - 三层IP封装阶段:IPv4报文头固定有1字节的
Protocol字段,IPv6报文头对应的是Next Header字段,这个字段的作用就是标注当前IP报文封装的上层协议类型,常见取值对应关系:1:ICMP协议6:TCP协议17:UDP协议89:OSPF协议
路由器拆包到IP头时,只要读到Protocol字段值为89,就会直接把报文交给本机的OSPF协议进程处理,根本不会继续往上层拆解找所谓的端口号——因为OSPF是直接运行在IP层之上的协议,和TCP、UDP、ICMP属于同一层级的IP上层协议,根本没有传输层头部,自然不存在端口字段。
只有当IP头的Protocol字段标注上层是TCP(值为6)或UDP(值为17)时,设备才会继续解析到传输层头部,读取其中的源/目的端口字段来区分上层应用。比如同样是路由协议,BGP基于TCP、目的端口179,RIP基于UDP、目的端口520,这两类协议才需要靠端口号识别,和OSPF的封装逻辑完全不同。
内容的提问来源于stack exchange,提问作者asp
相关产品推荐
相关产品推荐

