假设在应用层正在运行一些应用程序。并且应用程序具有各自的源端口号和目标端口号。并且知道该n
层没有身份验证来了解n+1
级别有效负载。
但是我们在 TCP 或 UDP 标头中看到有源应用程序端口号和目标应用程序端口号。Ipv4 头协议字段有传输层协议号和 Ipv6 扩展头。同理,Ethernet header 有 Ethertype 字段,有 layer3 协议信息。
我的问题是,尽管不知道级别有效负载,但层如何n
知道哪个端口/协议在级别上运行?n+1
n+1
假设在应用层正在运行一些应用程序。并且应用程序具有各自的源端口号和目标端口号。并且知道该n
层没有身份验证来了解n+1
级别有效负载。
但是我们在 TCP 或 UDP 标头中看到有源应用程序端口号和目标应用程序端口号。Ipv4 头协议字段有传输层协议号和 Ipv6 扩展头。同理,Ethernet header 有 Ethertype 字段,有 layer3 协议信息。
我的问题是,尽管不知道级别有效负载,但层如何n
知道哪个端口/协议在级别上运行?n+1
n+1
协议的标头具有告诉每个协议将其有效负载发送到何处的字段。
例如,以太网具有 EtherType 字段。如果以太网接收到 EtherType 字段值为 的帧0x0800
,则以太网将其有效负载发送到与 EtherType 值对应的进程地址,该值是 IPv4。
IPv4 具有以相同方式工作的协议标头字段(IPv6 下一个标头)。
一些传输协议具有执行相同功能的端口。
操作系统将维护这些表,以便协议可以查找该字段中是否存在有效值,并知道将特定值的任何有效负载发送到何处(或丢弃该主机中无效值的有效负载)。
当 IP 收到一个协议号为 的数据包时17
,它会在表格中查看是否使用该号码注册了传输协议,如果有(UDP),那么它可以从表格中获取发送有效载荷的位置对于那个数据包。如果操作系统中未安装 UDP,则 IP 会丢弃有效负载,可能会将 ICMP 错误发送回源。