关于TCP单个数据报的最大长度的修改 (150分)

  • 主题发起人 主题发起人 GipsyCN
  • 开始时间 开始时间
G

GipsyCN

Unregistered / Unconfirmed
GUEST, unregistred user!
我在网上看到下面一段文字:
...
TCPSegMentSize是发送接受时单个数据报的最大长度,系统默认为1460,收发缓冲大小为8192。 在SOCK_STREAM方式下,如果单次发送数据超过1460,系统将分成多个数据报传送,在对方接受到的将是一个数据流,应用程序需要增加断帧的判断。当然可以采用修改注册表的方式改变1460的大小,但MicrcoSoft认为1460是最佳效率的参数,不建议修改。 在工控系统中,建议关闭Nagle算法,每次发送数据小于1460个字节(推荐1400),这样每次发送的是一个完整的数据报,减少对方对数据流的断帧处理。
...
请问:哪位知道Socket编程中如何修改这个最大长度?(通过修改注册表修改也可以。)
修改后的值能大于1460吗?我看了《TCP/IP祥解 卷1:协议》,好像是不可以修改更大值的。 各位有什么看法?
 
没用的,数据报的最大值受很多条件的制约,系统只会选择满足所有条件的最小值。
1460是以太网数据帧的最大值,因为TCP和IP的数据头各占了20至40个字节,为了最小限度地不分包,所以推荐1400。
 
谢谢ego!
希望有更多讨论,提一下。
 
修改注册表 就可以了,具体的看《DELPHI深度历险》
 
多谢张无忌, 可我手头只有《C++ Builder深度历险》,先看看有没有。
 
可惜没找到啊。
 
在《Micorsoft Windows 2000 TCP/IP大全》 中提到:

现在Windows2000能自动改变TCP滑动窗口的尺寸,而不是像Windows NT中那样,使用固定长度的窗口尺寸。另外,Windows 2000中窗口的缺省尺寸刚好是Windows NT的两倍(一个是12块 1460字节段,另一个是6块1460字节段)。

这样看来是不是这个1460字节段是不可以改变的了?

我现在在做一个通过GPRS和单片机通讯的软件,对方希望我这边不要有这个限制,否则对方比较难做。不知道Windows下编程可不可以做到?

希望大家继续关注!
 
收数据的时候可以先判断了,判断是否数据收完呀。没有必要去修改大小的。
 
谢谢cjsam的关注。

单片机上的编程毕竟不同于我们PC机上的编程,那样做对他们来说很麻烦的。
 
我想TCP的滑动窗口不是问题关键,滑动窗口只影响效率。
由于WIN2K的滑动窗口使自己适应的,一般来说你对他的修
改使无效的。
 
谢谢大家的关注。特别是张无忌。

可能这个数值限制是无法变大的,我们的解决方法是更改我们的协议,使每帧数据限制在1460个字节以内。
 
你在WINDOWS下写TCP程序的时候,不用考虑包大小问题,TCP会自动帮你分包发送。[:D]
 
后退
顶部