我在Ubuntu主機上運行3個QEMU-KVM虛擬機。每個VM都有一個virt-io nic,並通過主機操作系統中的br0橋連接。每個NIC的MTU配置爲1500.該平臺運行基於消息隊列的應用程序:一個VM作爲生產者,一個VM作爲消息隊列服務器,最後一個VM作爲消費者。QEMU-KVM客戶操作系統不尊重MTU設置
我的問題是:當訪客虛擬機變忙時,消息隊列服務器虛擬機可能偶然發送大小爲2k,4k或5k的數據包。它超過了NIC的MTU值,1500!據我所知,在發送之前,Linux IP協議棧應該將IP構件的尺寸減小到小於MTU的尺寸。爲什麼這個虛擬機在忙時發送大數據包?
下面是平臺的體系結構:
[w2: celery caller (message queue producer) ]
| (messages in TCP)
V
[w3: rabbitmq server]
| (messages in TCP)
V
[w4: celeryd (message queue consumer)]
下面是屏幕在W3捕獲,MTU是1500,並用大小發送分組> 2000
下面是屏幕在W4捕獲,MTU是1500並接收大小> 2000的數據包
TSO = TCP分段卸載,而不是脫機。 – osgx
我曾經遇到同樣的問題:http://stackoverflow.com/questions/2350985/length-of-captured-packets-more-than-mtu – kumar