当前位置: 技术问答>linux和unix
虚拟机的linux,在其中运行Server和Client,Server端send了一个大小4096B的包,客户端recv到3845B,用netstat查看连接,Recv-Q和Send-Q项显示为0,为什么没收完?其余字节哪去了??
来源: 互联网 发布时间:2016-03-03
本文导语: 问题如题 | tcp还是udp? 如果是udp,那可能是这个原因: 实际上,你发128k也好,32k,4k也好,linux内核都会根据网络协议给拆分成1500个字节左右发送出去,内核不负责重发.就因为如此,你数据包很大的情况...
问题如题
|
tcp还是udp?
如果是udp,那可能是这个原因:
实际上,你发128k也好,32k,4k也好,linux内核都会根据网络协议给拆分成1500个字节左右发送出去,内核不负责重发.就因为如此,你数据包很大的情况下,拆分后的数据包如果有丢失的,那你接收端接收的数据就会不正确的.即是只有一个包失败,所要的数据你都要重发,因为那些分包对于你的程序来说是不可控的.因此在linux下,尽量不要把数据包的大小设置的
超过1500个字节
http://topic.csdn.net/u/20070823/10/47da71cc-7bab-45c5-bf3b-a86b9da29d54.html
这里正再讨论这个问题.
如果是udp,那可能是这个原因:
实际上,你发128k也好,32k,4k也好,linux内核都会根据网络协议给拆分成1500个字节左右发送出去,内核不负责重发.就因为如此,你数据包很大的情况下,拆分后的数据包如果有丢失的,那你接收端接收的数据就会不正确的.即是只有一个包失败,所要的数据你都要重发,因为那些分包对于你的程序来说是不可控的.因此在linux下,尽量不要把数据包的大小设置的
超过1500个字节
http://topic.csdn.net/u/20070823/10/47da71cc-7bab-45c5-bf3b-a86b9da29d54.html
这里正再讨论这个问题.
|
虚拟机和windows其实是使用得相同的网卡,会不会没有走到IP层就直接内部转发了?
个人猜想
个人猜想