TCP是怎么判定需要延迟响应的?

femalelover 2010-03-17 09:52:39
<<TCP/IP详解>>卷1 的19.3节讲到"经受时延的确认":
在TCP用作交互式应用的时候, 比如远程登录, 为了减少报文传送, 接收方往往会等待200ms, 以便将前一个段的响应与本段的数据一块发送.

请问, 难道TCP协议会判定当前是传送交互式的数据还是大块的数据, 然后作出是否要作200ms延时的决定? 感觉不可能.
...全文
345 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2010-05-17
  • 打赏
  • 举报
回复
结贴通知:
请lz注意结贴。。。。
sanguomi 2010-05-17
  • 打赏
  • 举报
回复
里边是有个200MS的定时器,使用Nagle来组包,如果接受端产生一个回应报文通知发送端没有接受空间了,发送端哪怕缓冲区已经满了,也不会启动发送
howema 2010-05-17
  • 打赏
  • 举报
回复
学习了...
WinEggDrop 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 femalelover 的回复:]
<<TCP/IP详解>>卷1 的19.3节讲到"经受时延的确认":
在TCP用作交互式应用的时候, 比如远程登录, 为了减少报文传送, 接收方往往会等待200ms, 以便将前一个段的响应与本段的数据一块发送.

请问, 难道TCP协议会判定当前是传送交互式的数据还是大块的数据, 然后作出是否要作200ms延时的决定? 感觉不可能.
[/Quote]

"Delayed Acknowledgments
As specified in RFC 1122: Requirements for Internet Hosts -- Communication Layers, Transmission Control Protocol (TCP) uses delayed acknowledgments (ACKs) to reduce the number of packets sent on the transmission media.

In Windows Transmission Control Protocol/Internet Protocol (TCP/IP), the stack takes a common approach to implementing delayed ACKs. As data is received by TCP on a connection, the stack only sends an acknowledgment back if one of the following conditions is met:


No ACK was sent for the previous segment received.
A segment is received, but no other segment arrives within 200 milliseconds for that connection.
In other words, an ACK is sent for every other TCP segment received on a connection, unless the delayed ACK timer expires after 200 milliseconds pass.
"

以上的自己慢慢看吧,MSDN文档的东西。这个是可以通过修改注册表增加或降些这个等待时间的。
bragi523 2010-03-18
  • 打赏
  • 举报
回复
TCP的平滑窗口机制,Nagle算法,就是假如发送缓冲没满就等一下
hnoe 2010-03-18
  • 打赏
  • 举报
回复
就是所谓的粘包控制,这样如果有多个数据需要发送的话,可以尽可能的合并到一个数据报发送
不一定是缓冲满才发送,因为接收或者发送缓冲可能很大的
每次能发送包大小应该是受MTU控制的,而且IPV4一个包最大也不能超过32K吧

可以通过设置打开或者关闭这个功能,如果关闭的话,则数据将立即发送。
WizardK 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wenxy1 的回复:]

引用楼主 femalelover 的回复:
<<TCP/IP详解>>卷1 的19.3节讲到"经受时延的确认":
在TCP用作交互式应用的时候, 比如远程登录, 为了减少报文传送, 接收方往往会等待200ms, 以便将前一个段的响应与本段的数据一块发送.

请问, 难道TCP协议会判定当前是传送交互式的数据还是大块的数据, 然后作出是否要作200ms延时的决定? 感觉不可能.


有……
[/Quote]

UP,LS说的明确
Wenxy1 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 femalelover 的回复:]
<<TCP/IP详解>>卷1 的19.3节讲到"经受时延的确认":
在TCP用作交互式应用的时候, 比如远程登录, 为了减少报文传送, 接收方往往会等待200ms, 以便将前一个段的响应与本段的数据一块发送.

请问, 难道TCP协议会判定当前是传送交互式的数据还是大块的数据, 然后作出是否要作200ms延时的决定? 感觉不可能.
[/Quote]

有一个Nagle算法,建议楼主看看RFC,或者<<TCP/IP详解>>卷1的第19章。
yekoufeng 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cnzdgs 的回复:]
缓冲区满了就立即发出去,缓冲区没满就等200ms再发。
[/Quote]
可以参考
cnzdgs 2010-03-18
  • 打赏
  • 举报
回复
缓冲区满了就立即发出去,缓冲区没满就等200ms再发。
cpp_crab 2010-03-17
  • 打赏
  • 举报
回复

Mark

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧