查看: 13865|回复: 20

讨论:TCP是如何探测路径MTU的

[复制链接]
发表于 2011-9-21 17:23:28 | 显示全部楼层 |阅读模式
TCP是如何探测路径MTU的呢?
一直有个疑问,TCP虽然可以在建立连接的两端能进行MTU协商,如果中间的设备的MTU小于两端的MTU,那如何来检测呢?

自己描述不清楚。修改一下:
在TCP三次握手过程中,有没有响应的技术可以实现检测路径MTU。
回复

使用道具 举报

发表于 2011-9-21 17:46:10 | 显示全部楼层
好难哦~ 谁给个答案,等解
回复

使用道具 举报

发表于 2011-9-21 21:25:13 | 显示全部楼层
个人感觉,与其说是TCP如何探测路径mtu的,不如说端系统是如何探测路径MTU的,这样表述应该更加科学一些,因为TCP才不会管那些中间系统的事情呢
回复

使用道具 举报

发表于 2011-9-21 21:25:42 | 显示全部楼层
个人感觉,与其说是TCP如何探测路径mtu的,不如说端系统是如何探测路径MTU的,这样表述应该更加科学一些,因为TCP才不会管那些中间系统的事情呢
回复

使用道具 举报

发表于 2011-9-21 21:31:35 | 显示全部楼层
TCP虽然可以在建立连接的两端能进行MSS协商,这个协商的过程,还看中间设备的工作机制和模式,我们知道,中间设备会更改经过它们的数据报文结构,比如,修改窗口大小、协商的MSS大小等,一般而言有些设备会替代端系统与对端系统协商MSS,这样就避免了中间路径MTU发现的问题,有些纯路由模式的中间设备是不会干这些事情的,它们指负责根据目的IP或源IP进行路由选择和转发,那么在这种情况下,如果遇到一个TCP层面不允许分片,同时IP报文长度大于中间设备MTU值的情况,则该中间设备丢弃此IP报文,并向发送端系统发送ICMP差错报文,并在ICMP差错报文中封装该设备允许的MTU值。
回复

使用道具 举报

 楼主| 发表于 2011-9-21 22:35:59 | 显示全部楼层
TCP虽然可以在建立连接的两端能进行MSS协商,这个协商的过程,还看中间设备的工作机制和模式,我们知道,中间设备会更改经过它们的数据报文结构,比如,修改窗口大小、协商的MSS大小等,一般而言有些设备会替代端系统 ... 孤独的意尹者 发表于 2011-9-21 21:31

恩,也在考虑是不是ICMP报错。不过在TCP建立连接的时候,根本就不会涉及到分片的,更不可能有icmp了,也就是说这种机制在路径MTU较小的时候,也会产生问题,导致分片了。
回复

使用道具 举报

发表于 2011-9-22 14:19:10 | 显示全部楼层
6# long_323
端系统在接收到icmp差错报文的时候,不会告知TCP层做相应调整吗
回复

使用道具 举报

发表于 2011-9-22 14:24:51 | 显示全部楼层
本帖最后由 steve-zhu 于 2011-9-22 14:27 编辑

有个机制叫Path MTU Discovery (PMTUD),发送DF置位的IP报文,如果中间设备回应ICMP分片不可达的消息,就逐渐减MTU,直到可以部分片到达目的地。不过这种机制如果中间设备不回应ICMP Type 3就没用了。
回复

使用道具 举报

发表于 2011-9-22 15:53:29 | 显示全部楼层
本帖最后由 Se7en 于 2011-9-22 15:56 编辑

晕,我一直以为TCP的MTU是65535.看书……
回复

使用道具 举报

发表于 2011-9-22 16:50:10 | 显示全部楼层
ICMP告知的吧
回复

使用道具 举报

 楼主| 发表于 2011-9-22 17:43:52 | 显示全部楼层
7# 孤独的意尹者
这个应该是,不过缺少数据包验证。
现在想问的是,TCP在建立过程中,也就是三次握手过程中。
在这个过程中都是TCP的小包,不会导致中间路由器发送ICMP报错的。
回复

使用道具 举报

 楼主| 发表于 2011-9-22 17:46:27 | 显示全部楼层
8# steve-zhu

哎,大家都误会了。你说的这种技术应该是有的,能避免更过的分片。
在这里我想问的是在TCP三次握手的过程中,咋实现路径MTU的检测。
有没有相应的技术。谢谢
回复

使用道具 举报

发表于 2011-9-22 19:50:25 | 显示全部楼层
7# 孤独的意尹者  
这个应该是,不过缺少数据包验证。
现在想问的是,TCP在建立过程中,也就是三次握手过程中。
在这个过程中都是TCP的小包,不会导致中间路由器发送ICMP报错的。
long_323 发表于 2011-9-22 17:43

我可以明确的告诉你,没有。
因为TCP是端到端的,而路径MTU不是端系统的问题,是中间系统的问题
回复

使用道具 举报

 楼主| 发表于 2011-9-22 21:36:12 | 显示全部楼层
我可以明确的告诉你,没有。
因为TCP是端到端的,而路径MTU不是端系统的问题,是中间系统的问题
孤独的意尹者 发表于 2011-9-22 19:50


OK,非常感谢王总。
顺便请教一句,中间系统有没有类似的机制呢?或IPv6中有没有提供类似的机制?
回复

使用道具 举报

发表于 2011-9-23 08:56:26 | 显示全部楼层
14# long_323

中间系统用的就是PMTU,IPv6没怎么了解,就不清楚了。
回复

使用道具 举报

发表于 2011-9-23 09:10:27 | 显示全部楼层
PMTUD在IPv4中由路由器执行,IPv6改为由端设备执行;
MSS不考虑中间设备的MTU,不过有的路由设备可以更改回话的MSS选项(称为MSS clamping)。

评分

1

查看全部评分

回复

使用道具 举报

发表于 2011-9-23 12:17:35 | 显示全部楼层
基于ICMP的机制效率很低,况且互联网设备基本都是禁用ICMP的。
MSS=MTU-40,TCP通过拥塞机制发送几个数据包即可以判断出来MSS=?,然后MSS就可以固定下来,也就不用判断中间设备的MTU了,保证了数据传输的稳定。应该现在的IP网络都是基于这种机制。(以上观点纯属猜测)
回复

使用道具 举报

发表于 2011-9-23 15:47:41 | 显示全部楼层
TCP是如何探测路径MTU的呢?
一直有个疑问,TCP虽然可以在建立连接的两端能进行MTU协商,如果中间的设备的MTU小于两端的MTU,那如何来检测呢?

自己描述不清楚。修改一下:
在TCP三次握手过程中,有没有响应的技 ...
long_323 发表于 2011-9-21 17:23


TCP建立连接时只需协商MSS(即Payload),不会协商MTU
就是说 通信2端的主机不会根据双方的MTU大小而决定取用谁的值

之所以在常见的网络中看到的MUT都相同,主要原因是由于
1 系统、系统对以太网的支持、常见网络设备默认MTU相同
2 双方协商的MSS大小相同

TCP在三次握手中,貌似没有检测MTU的方法

评分

1

查看全部评分

回复

使用道具 举报

发表于 2011-9-25 18:26:18 | 显示全部楼层
TCP建立连接时,会根据PAYLOAD大小协商MSS,而不是根据网络设备的MTU值。

当数据包大小超过网络设备的MTU值时,会把数据包分段,或者丢弃,如果丢弃会返回ICMP Type3 Code 4数据包,主机收到会调节MSS去适应。

但如果ICMP包由于网络策略无法返回主机,就会造成丢包了。
回复

使用道具 举报

发表于 2011-9-25 18:28:55 | 显示全部楼层
楼主概念搞混了。

MTU对TCP和UDP包都回检测;TCP协商是MSS,而不是MTU
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表