TCP中在发送的数据的ACK未回来前,能继续发送其他数据包吗?

本文介绍了TCP协议的基础知识,包括数据包名称对应、TCP的字节流特性及ACK机制。重点讨论了TCP在ACK未返回时是否能继续发送数据的条件,如包长度、MSS协商、流量控制中的CWND和AWND,以及TCP_NODELAY和TCP_CORK选项的影响。还提到了超时情况下的数据发送策略,并声明内容为个人理解,可能存在不准确之处。

            

##基础##

对应层数据的名称
  - Application  <->  Package 
  - Translation  <->  Segment 
  - Networking   <->  Packet 
  - DataLink     <->  Frame

- TCP是一种基于字节流的协议,TCP 中的ACK是接收端期待发送端下一个发来的数据包的序列号

MSS 是在建立连接时通过SYN数据包中的MSS选项里进行协商的(以太网的MTU能到1500,所以MSS可以为1460),如果没有协商,默认为536,MSS是数据净负荷,协议保证最小支持536(加上TCP和IP的头部后packet为576)

TCP是一种有流量控制的协议,有CWND和AWND的概念  


##正题##

能不能发,取决于下面的条件是否满足:

1. 如果包长度达到MSS,则再根据CWND、AWND来做决定;
2. 如果该包含有FIN,则允许发送;
3. 如果没达到MSS且不包含FIN:
  
3.1. 设置了TCP_NODELAY选项,则允许发送;
3.2. 没设置TCP_NODELAY, 未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送(nagel算法起作用);设置了TCP_CORK选项时,需要包长度到MSS。

4. 上述条件都未满足,但发生了超时(一般为200ms),则立即发送。

TCP协议是一个巨复杂的协议,上面表述仅为个人资料收集的总结结果,所以不能保证完全正确,如果你发现了漏洞,请务必告知。谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值