我尝试使用UDP通过本地网络传输大量数据,并使用QT作为Socket访问的框架。发送简单消息到目前为止不是问题。 但是,我没有(完全)理解如何处理包的分割以及由谁来完成。UDP拆分/合并。哪一层处理它? (QT Networking)
所以QT指出:
发送数据包大于512个字节是一般disadvised,因为即使它们被成功发送,他们很可能要由IP层在他们到达最终目的地之前支离破碎。
因此我实现了我自己的小协议来处理大数据的拆分和合并。具有更大的尺寸大于512个字节(在10kBytes的顺序)播放的时候,我遇到了下面的代码片段从Wireshark的:
"17","0.145050","192.168.2.111","192.168.2.222","IPv4","1514","Fragmented IP protocol (proto=UDP 17, off=0, ID=3a47) [Reassembled in #23]"
"18","0.145051","192.168.2.111","192.168.2.222","IPv4","1514","Fragmented IP protocol (proto=UDP 17, off=1480, ID=3a47) [Reassembled in #23]"
"19","0.145051","192.168.2.111","192.168.2.222","IPv4","1514","Fragmented IP protocol (proto=UDP 17, off=2960, ID=3a47) [Reassembled in #23]"
"20","0.145051","192.168.2.111","192.168.2.222","IPv4","1514","Fragmented IP protocol (proto=UDP 17, off=4440, ID=3a47) [Reassembled in #23]"
"21","0.145052","192.168.2.111","192.168.2.222","IPv4","1514","Fragmented IP protocol (proto=UDP 17, off=5920, ID=3a47) [Reassembled in #23]"
"22","0.145052","192.168.2.111","192.168.2.222","IPv4","1514","Fragmented IP protocol (proto=UDP 17, off=7400, ID=3a47) [Reassembled in #23]"
"23","0.145052","192.168.2.111","192.168.2.222","UDP","1186","63230 > 8007 Len=10024"
,并从我得到一个数据报在QT。 对我来说,似乎IP层已经在分解/合并我的(太大)UDP数据包了。 所以:
- 为什么建议我自己拆分UDP数据?
- “谁”处理IP层? (QT,Windows,网络硬件?)
- 我假设在UDP套接字中有读写缓冲区产生的第二个限制,我可以在哪里检查?