2007年8月17日星期五

TCP 数据包的合适大小?(MAX1460Bytes)

TCP 数据包的合适大小?1460Bytes

楼主thesea1978(一切随风)2005-11-23 11:25:10 在 VC/MFC / 网络编程 提问

使用TCP链接发送数据的时候,自定义的数据包如果过长,则会被自动分段发送。如果过短,则会被自动复合成较长的数据包再发送。特别是在数据量比较大且连续发送的时候更为明显。

不管自定义的包的长度如何,我希望我自定义的包被完整的发送过去,既不希望被分段发送,也不希望被复合发送。在此,向各位请教解决办法。

我想,定义一个合适的包长,且要发送定长的数据。是不是可以解决?比如,1460字节。

实在不行的话,就要在接收端加上特别的处理了。 问题点数:20、回复次数:10Top

1 楼lemony8734(lemony)回复于 2005-11-23 11:49:23 得分 0

TCP传输都会有这个问题~~

一般来说要在包中加入包体大小~

然后接收的时候根据这个大小来判断是否这个数据包已经接收完整~

如果使用UDP就不会碰到这样的问题~Top

2 楼lemony8734(lemony)回复于 2005-11-23 11:50:14 得分 0

还有,一般来说,一次send出去的包,控制在1024×4为最佳包体大小~~~Top

3 楼jia20003(『gloomy fish』兄弟们一个一个结婚刺激我想跳楼!)回复于 2005-11-23 11:56:49 得分 0

1024Top

4 楼flashboy(爱写程序的小绵羊)回复于 2005-11-23 14:39:40 得分 10

1.3K左右,另外把NANGLE算法关闭掉Top

5 楼lmf_1(lmf)回复于 2005-11-25 16:39:37 得分 10

以太网最大MSS为1460
考虑到目前大家常用的网络环境,最好在1400--1460之间较好Top

6 楼Delphityro(下岗工人)回复于 2005-11-25 23:21:10 得分 0

1024最好。Top

7 楼somexing(somexing)回复于 2005-11-26 11:41:07 得分 0

1400Top

8 楼vicky_jam(★天使亲蛙☆)回复于 2005-11-26 16:28:20 得分 0

<1024*2Top

9 楼orbit(走了走了)回复于 2005-11-26 16:36:40 得分 0

做好将自己的数据进行封装,也就是自定义一个简单的包协议,每次发送数据都包含一个描述数据大小的包头,接收端每次固定的接收一个包头大小的数据,然后根据包头中的数据大小读取相应的数据,然后再读取下一个包头,就可以保证数据的同步Top

10 楼winnuke(x86)回复于 2005-11-26 18:19:00 得分 0

一个tcp包最大可传输1432 byte

没有评论: