首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCP段如何与较小的IP数据包相匹配?

TCP段如何与较小的IP数据包相匹配?
EN

Network Engineering用户
提问于 2019-01-19 19:33:13
回答 2查看 2.1K关注 0票数 5

IP协议可以处理碎片,它包括碎片偏移和标识符。我知道,当您的IP包太大,对于某个特定的网络或链路,MTU比前一个要低的时候,这就起作用了。

例如,MTU为1000字节,IP数据包为900 (+20)字节。再往下看,MTU只有500,所以您必须提取IP数据,并将其放入两个数据包中,一个是480 (+20),另一个是420 (+20)。

但据我所知,这是网络层的碎片,将一个IP包转换为多个IP数据包。这意味着您只有一个传输层报头出现一次,和一个新的网络层报头为每个较小的IP包。

我希望我对此的理解是正确的。总之,在这张照片出现之后,我的实际问题是:

假设您的IP数据包长度被限制为1000字节(包括报头),这是由于MTU为1000字节。

如果由于某种原因,TCP段大于980,从而超过最大IP数据包大小,实际会发生什么情况?

如果您的TCP段是1960字节呢?这里的碎片是如何处理的?它是否被放入一个1980年的IP包中,然后被分割成两个980 (+20)个IP数据包?

在此之前,在传输层中会发生碎片吗?是否有多个较小的传输层段,每个都有自己的报头发送到具有正确大小的IP层?

EN

回答 2

Network Engineering用户

回答已采纳

发布于 2019-01-19 19:39:49

在对给定的数据包作出路由决定之后,它将被调度出特定的接口。如果该数据包对于链路的MTU来说太大,则将其作为两个或多个包含碎片的IP数据包发送。细节在因特网协议RFC 760第2.2节中,但简单地说,第一个部分包含了包的开头,包括TCP报头,而后面的部分只是连续的。接收方可以通过标题中的“更多片段”标志来识别更多的片段,并通过片段偏移量查看它们的去向。

由于IP数据包有效负载的开始位于第一个片段中,因此只有第一个片段具有TCP报头。随后的片段将从有效负载的适当部分开始,可能是来自TCP流中间的字节。

这种机制是特定于IPv4 4的,与数据包的内容没有直接关系。TCP试图通过调整TCP流的最大段大小来保持MTU中的数据包,但是如果MSS太高,您将得到碎片。

请记住,还有一个“不要碎片”标志,如果实现了,意味着系统将丢弃数据包并发送ICMP错误(除非配置为),而不是转发片段。

还请记住,“我是否需要分割这个包”的问题发生在每个包离开每个接口时。即使一个服务器的接口有一个足够大的MTU来处理一个给定的数据包,一些路由器可能会有一个更小的MTU --这就是“路径MTU”的问题。任何路由更改,例如负载平衡或故障恢复,都可以更改路径MTU。因此,片段以正确的顺序到达,重叠,部分复制是合法的。

最后,不要忘记碎片可能是故意错误的:例如发送重复的数据部分,这可能导致一些不愉快的安全问题。因此,许多路由器和防火墙进行了一定量的重组,尽管严格地说,它们不需要这样做--这不是路由器的工作所必需的--它只需要转发碎片。

票数 4
EN

Network Engineering用户

发布于 2019-01-19 21:38:46

这里的碎片是如何处理的?

我们必须区分两种情况:

案例1:第二层不允许这样长的帧。

在这种情况下,生成一个2000字节大小的IP数据包(或任何需要的大小),并将TCP段插入到该2000字节IP数据包中。

这个数据包将在IP层(第3层)上被碎片化,因此它可以以500字节大小的片段传输。

这完全发生在IP层上;TCP层不知道2000字节大小的IP数据包是分段的。

案例2: IP数据包大小受到限制

在某些情况下,IP分组的大小可能受到限制。(例如,有一些CGNATs只允许有限大小的IP数据包。

在这种情况下,TCP层(第4层)根本无法发送如此长的大小的段。

在TCP连接的第一个数据包中,涉及连接的两台计算机都可以告诉另一台计算机计算机所能接收的TCP段的最大大小。

如果一台计算机只支持高达800字节的IP数据包,它可能会告诉另一台计算机支持多达700字节的TCP段,因此产生的IP数据包将小于800字节。

票数 3
EN
页面原文内容由Network Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://networkengineering.stackexchange.com/questions/56254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档