在IP数据包标头中,有一个8位协议字段(在偏移9处),该字段包含“下一层协议”,并在RFC 790中指定了分配的编号。例如,TCP为6。



知道网络堆栈中的高层吗?

评论

有什么答案对您有帮助吗?如果是这样,您应该接受答案,这样问题就不会永远弹出来寻找答案。或者,您可以发布并接受自己的答案。

#1 楼

每个“标题”都有某种“下一个协议”标识字段。这是必要的,因为在网络上,数据只不过是1和0的字符串。接收端点必须具有一种解释下一位所指的方式。

如果没有这样一个明确表示如何解释下一组1和0的字段,则无法确定接下来的32位是TCP序列号还是IP源地址(例如)。这两个字段确实都是32位,因此除了某种类型的“下一个协议”字段外,无法以编程方式确定那些1和0的实际含义。

评论


这不是100%正确的,不是每个协议都有这个,当然不是明确的。例如在tcp / udp中,它是从协议派生的,仅具有本地含义。浏览器首先可以将端口17782用于HTTP,而下次使用FTP的下载客户端可以使用端口17782。同样,例如MPLS根本没有这样的字段,它全部由上下文定义。

– KillianDS
2015年2月9日,12:21

@KillianDS我明白你的意思了。您可能会争辩说,一旦TCP / UDP到达各自的目的地,那么剩下的就是让应用程序简单地接收/发送位流了……到那时,它就取决于应用程序了。确定是否需要进一步的封装/会话标识。对于MPLS,确实如此,它不在标头中,但是接口被配置为显式地期望MPLS标签,因此我认为这更多的是例外而不是规则。但是,尽管如此,我明白并认可了您的观点-随时编辑和改进我的答案。

–艾迪
2015年2月10日在5:43



@KillianDS-我认为它是100%正确,除了在保证已知下一个协议的情况下,在协议标头中为其分配了0位(信息理论为0熵的数据分配0位) 。我不明白“当地意思”。网络中几乎没有任何东西可以保证具有一致的全局含义(由于地址转换和实现方面的调整)。

–洞穴人
20 Dec 20'4:23

@KillianDS-Wireshark与此处无关。它是一个中间人,在通信结束时不知道管理员的配置。对于MPLS,所涉及的端点本身不使用启发式方法;相反,它们不使用启发式方法。他们宁愿拥有系统管理员在其中明确定义的下一个协议ID(因此,由于信息论的缘故,协议头本身分配了0位)。如果某人想在中间嗅探MPLS数据包,而最终却不了解系统管理员的配置,那么该人将使用试探法,但MPLS不是为他而做。

–洞穴人
20/12/23在13:49

@KillianDS-MPLS标头确实具有标记系统,该系统用作通用的下一跳协议规范,该规范可以表示“ IP为下一个”(并最终是IP)。 MPLS RFC讨论了标签如何指定网络协议规范。只是因为此类标记没有全局默认值(例如80 = HTTP),并不意味着它没有下一跳映射。

–洞穴人
20/12/25在16:12

#2 楼

IPv4协议字段允许端点确定数据包中的数据类型。端点的IP层使用协议字段来确定将数据包传递给哪个协议。

#3 楼


为什么IP层可以识别网络堆栈中的更高层?

IP数据包具有必须传递给其他进程的有效负载。 IPv4协议字段(IPv6下一标头字段具有相同的功能)告诉IP将IP数据包的有效负载传递到哪里。例如,以太网具有Ethertype字段以告知将有效负载传递给哪个进程(ARP,IPv4,IPX,IPV6,AppleTalk等),并且传输协议具有地址(端口)以告知它们将哪个进程传递给其负载


为什么IP层知道网络堆栈中的高层?每一层都需要知道将其有效载荷发送到哪里,但这并不意味着任何一层都真正知道有效载荷中有什么,或者下一层实际是什么或对有效载荷起作用。就IP而言,它会将数据包有效负载传递给在协议号处向其注册的进程,而不是因为IP对传输协议一无所知,因此该有效负载将用于任何特定的传输协议。

#4 楼

摘自Wikipedia:第3层:网络层

网络层提供了传输可变长度数据序列(称为数据报)的功能和过程方式。 )从一个节点到另一个连接到同一网络的节点。网络是一种可以连接许多节点的介质,每个节点都具有一个地址,并且允许与之连接的节点仅将消息传递给与之连接的其他节点提供消息的内容和目标节点的地址,并让网络找到将消息传递(路由)到目标节点的方式。除了消息路由之外,网络还可以
(也可以不)通过将消息拆分为
几个片段,通过单独的路由传递每个片段并重新组合这些片段来实现消息传递,传递错误等。

网络层的数据报传递不能保证可靠。许多层管理协议(在管理附件ISO 7498/4中定义的功能
)都属于网络层。
包括路由协议,多播组管理,
network-层信息和错误,以及网络层地址
分配。使它们属于网络层的是负载的功能,而不是承载它们的协议。 OSI模型的设计方式。



评论


欢迎来到NE社区。我继续引用了看起来像直接来自Wikipedia的内容。在Stack Exchange网站上,我们希望确保在应得的信用额中给予信用,并避免任何any窃的指控。引用其他站点的内容很好,但是请提供将来起源的参考。

– YLearn♦
2014年12月29日在16:11

#5 楼

可以封装多个上层协议的协议需要某种方式来指示该上层协议是什么。以太网使用以太类型字段,其中0x0800表示IP,0x0806表示ARP。 TCP使用众所周知的端口号,例如80代表HTTP。 HTTP使用Content-Type:标头字段。