tcp/ip 19 经受时延的确认。。
来源:互联网 发布:mysql 默认开启事件 编辑:程序博客网 时间:2024/05/21 08:10
原话:通常TCP在接收到数据时并不立即发送ACK;相反,它推迟发送,以便将 ACK与需要沿该方向发送的数据一起发送(有时称这种现象为数据捎带 ACK)。绝大多数实现采用的时延为 200 ms,也就是说, TCP将以最大200 ms 的时延等待是否有数据一起发送。
TCP使用了一个 200 ms的定时器,该定时器以相对于内核引导的 200 ms固定时间溢出。由于将要确认的数据是随机到达的(在时刻 16.4, 474.3, 831.1等), TCP在内核的 200 ms定时器的下一次溢出时得到通知。这有可能是将来1~200 ms中的任何一刻。
意思是:tcp不可能这样子干活,比如一个包接收到了,好,那从接收到这个包开始计时200ms,然后若期间有数据传回去,则立刻携带ack一起发送,如果到了200ms还没有,那就只能传送一个不携带数据的ack了,也称经受时延的ack。因为数据传过来的时间是随机的,如果为每一个包都搞一个计时器,那工作量就太大了。
所以,tcp会在内核搞一个定时器,200ms的。数据包收到之后,如果下一个定时器溢出(计算到200ms)的时候,还没有什么数据要跟着ack一起传过去的话,那就只能单独发送一个ack了(书上也称其为一个经受时延的ack,说实话,这个翻译感觉一般)
原话:如果观察s v r 4为产生所收到的每个字符的回显所使用的时间,则这些时间分别为 1 6 . 5、1 6 . 3、 1 6 . 5、 1 6 . 4和17.3 ms。由于这个时间小于 200 ms,因此我们在另一端从来没有观察到一个经受时延的A C K。在经受时延的定时器溢出前总是有数据需要发送(如果有一个约为 16 ms等待时间越过了内核的 200 ms时钟滴答的边界,则仍可以看到一个经受时延的 A C K。在本例中我们一个也没有看到)。
那么这个图中svr4为啥没经受时延的ack就好理解了,说明在接收到bsdi发送的包,到svr4有数据发送的这段时间中,svr4的200ms定时器没有溢出,因为这段时间理论上小于16ms。要让200ms的定时器恰好在这段时间触发(刚好数到200ms),几率还是有点低的。
那要如何才能让svr4发送一个确认时延的ack呢?就是svr4收到包,等着有数据捎带ack一起传到bsdi的时候,刚好!数据还没来,定时器200ms来了!这时候就会单独发给bsdi一个ack,这个包里没有什么数据,只有tcp首部带一个ack确认位。
解释完毕,这本书有些翻译看着还挺难懂。
- tcp/ip 19 经受时延的确认。。
- 经受时延的确认(Delay ACK)
- TCP的数据流——滑动窗口,拥塞窗口,慢启动,Nagle算法,经受时延的确认等
- TCP的数据流——滑动窗口,拥塞窗口,慢启动,Nagle算法,经受时延的确认等
- TCP数据流—滑动窗口,拥塞窗口,慢启动,Nagle算法,经受时延的确认等
- tcp 经受时延确认
- TCP:经受时延的Ack
- TCP的确认延时机制及Windows系统的确认延时修改
- TCP的确认延时机制及Windows系统的确认延时修改
- 删除条目时的确认对话框
- 设置关闭网页时的确认效果
- JS的确认DIV
- 实现模式的确认
- TCP—经受时延、nagle算法、滑动窗口、拥塞窗口
- TCP交互数据流之经受时延的ACK和Nagle算法
- 恢复 OE 打开特定类型附件时的确认提示。
- WINDOWS PHONE 7 实现退出时的确认对话框
- VS恢复调试时出现的确认对话框
- LPC2368 P0.29 P0.30不能只用一个管脚作为输出
- ios 常用字符串的操作
- Android .9.png制作、使用以及遇到的问题
- Java导出Excel表格
- ANDROID 'xcopy' 不是内部或外部命令,也不是可运行的程序 【by徐玉丽】
- tcp/ip 19 经受时延的确认。。
- ubuntu 14.04 server 编译安装最新版git V2.11-rc2
- Git Bash提交代码避免每次输入用户密码
- python 计时
- iOS如何使用自己添加的字体库
- JS中的堆栈与拷贝(转载)
- java设计模式之外观设计模式
- vbox安装ukylin 16.10
- 按钮实现鼠标悬停背景色渐变的动画特效