TCP协议有一个缓冲区,当你需要发送数据时先将数据存储在缓冲区,然后tcp协议按照与服务器约定的滑动窗口的大小从缓冲区取数据发送,这个时候取多少数据时应用层无法控制的,并且取完后还需要等待确认后才可以将数据从缓冲区删除掉,所以有时候使用TCP协议发现,明明发送了一次数据确要接受好多次,要么就是发现TCP协议有数据丢失,TCP取数据的时候会可以避免MTU,来防止IP层分片。
那么UDP协议为什么不会出现这种情况呢,UDP是没有缓冲区的,当你发送数据时,直接将你的数据加上UDP的头发送,不需要确认,这个时候如果负载数据过大,就会在IP层出现分片。