如果传入数据应该分段或不分段,OSI 模型中的应用程序层如何将此信息传递到网络层?

问题描述 投票:0回答:1

我想问一件事

当在我们的浏览器上运行的应用程序不希望其数据包分段时,它使用“不分段”位来表示该数据包不得分段,这可能是在共享令牌、密码或密钥等情况下,即在安全情况下。

但是,由于 Do Not Fragment 是 Ip 标头中的一个字段,作用于网络层,并且应用层和网络层之间存在传输层,那么传输层如何从应用层到网络层共享传入数据报的信息一定不能支离破碎吗?传输层有类似的字段吗? 或者什么时候决定数据包是否应该分片?

我有点困惑,有人可以解释一下吗? 预先感谢。

networking ip network-protocols
1个回答
0
投票

你是对的,传输层在选择“不分段”数据的应用层和实际在数据包上设置 DF 信息的 IP 层之间进行“调解”。这种“中介”是由套接字完成的 - 应用程序在传输层中设置套接字选项或标志来请求 DF 行为。例如,在 C++ 中,您可以使用 IP_DONTFRAG 选项通过setsockopt() 调用来完成此操作:

int val = 1;
setsockopt(sd, IPPROTO_IP, IP_DONTFRAG, &val, sizeof(val));

您可以在此处阅读有关此标志的更多信息。

IP 层检查应用程序通过传输层设置的套接字选项或标志。如果请求 DF 行为,则基于从传输层接收到的信息,IP 层会将传出数据包的 IP 标头中的 DF 位设置为 1(表示“不分段”)。如果应用程序未请求设置 DF 位,则 IP 层会将 DF 位保留为 0。

© www.soinside.com 2019 - 2024. All rights reserved.