MTU 和 UDP (以及基于 UDP 的协议)
💡
原文中文,约3100字,阅读约需8分钟。
📝
内容提要
本文讨论了UDP协议中,当发送方不知道接收方的MTU大小时,如何拆包发送。PMTUD方法不适用于UDP协议,文章提到了DNS、TFTP、KCP和QUIC等协议的解决方法。QUIC的处理方法是每个IP包大小相同,如果传不过去,握手包也会被丢弃。
🎯
关键要点
- UDP协议在发送方不知道接收方MTU大小时如何拆包发送的问题。
- TCP协议通过MSS协商解决MTU问题,而UDP是无连接协议,没有类似机制。
- PMTUD方法不适用于UDP,UDP包过大时会被丢弃,发送方无法得知。
- 接收方会发送ICMP报文告知发送方包过大,但UDP没有重传机制。
- UDP协议本身不处理MTU问题,开发者需自行实现相关机制。
- DNS协议规定响应不能超过512字节,确保在大多数情况下安全传输。
- TFTP协议默认512字节,用户需自行配置,配置不当会导致丢包。
- KCP协议有默认值1400字节,支持通过函数设置MTU。
- QUIC协议使用PMTUD,记录每个源IP和目的IP的MTU,默认MTU为1280字节。
- QUIC的每个IP包大小相同,若传输失败,握手包也会被丢弃,确保协议的可靠性。
➡️