TCP/IP协议簇学习笔记(10)TCP的交互数据流

TCP按照分组数量计算可以分为下面2类

  • TCP交互数据流
  • TCP成块数据里

前者用于交互命令产生的数据分组,如telnet和rlogin,特点是交给上层的应用数据少,但是又要为这个很少的数据封包,利用率不高

后者基本是满长度,如ftp、电子邮件等,所以利用率比前者高

TCP交互数据流

提高效率有如下方法

捎带ACK

比如rlogin需要远程服务器回显客户端输入的字符,不做处理的话会产生如下交互

  1. 来自客户端按键输入的字节
  2. 来自服务器的确认
  3. 来自服务器的按键字节回显
  4. 来自客户端的回显确认

注意是客户端每输入一个字节就会产生一个封包,即20字节IP头+20字节TCP头+1字节按键,这样利用率很低

捎带ACK就是把2.3步骤合并,变成如下交互

  1. 来自客户端按键输入的字节
  2. 来自服务器的按键字节回显和按键输入确认
  3. 来自客户端的回显确认
    提高利用率
经受延时的确认,延时确认

是在上面的第2点,再做处理,即服务端收到客户端数据后,延时一段时间(大概40ms),查看这段时间内服务端有没有什么数据要发给客户端,有就把数据捎带上ACK一起发出去,否则就只发ACK

Nagle算法

任意时刻,最多只能有一个未被确认的小段。所谓“小段”,指的是小于MSS尺寸的数据块,所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到。
比如要发送hello给服务端,应用层虽然每次发送一个字节,连续发送5次,由于Nagle算法,ello会被攒成一个包放在缓冲区,直到收到h的ACK才会把ello一起发出去,通过这样来提高利用率
Nagle算法的规则:
(1)如果包长度达到MSS,则允许发送;
(2)如果该包含有FIN,则允许发送;
(3)设置了TCP_NODELAY选项,则允许发送;
(4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
(5)上述条件都未满足,但发生了超时(一般为200ms),则立即发送

TCP_NODELAY选项可以禁止Nagle 算法。

注:TCP的延时确认机制并不会导致发送数据的延时,只有在延时确认机制和Nagle算法共同作用下才会导致后续包(Nagle 算法攒起来包)的发送延时。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值