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

            

##基础##

对应层数据的名称
  - 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协议是一个巨复杂的协议,上面表述仅为个人资料收集的总结结果,所以不能保证完全正确,如果你发现了漏洞,请务必告知。谢谢。

你可能感兴趣的:(计算机网络,Linux开发)