【问题标题】:What will happen if the final ACK for three-way handshake is dropped?如果三次握手的最终 ACK 被丢弃会发生什么?
【发布时间】:2016-11-18 08:38:50
【问题描述】:

基于TCP state transition graph,当server(passive open end)发送SYN,ACK给client(active open end),client收到后发送ACK给server,但是掉线了,会发生什么?

看起来,客户端会进入 ESTABLISHED 状态,而服务器不会,但客户端不知道这个......

【问题讨论】:

  • 首先,TCP 没有服务器或客户端。客户端/服务器概念是 TCP 没有的应用概念。 TCP 在对等点之间建立连接。任何一个对等点都可以是应用程序的客户端或服务器,但 TCP 不在乎。
  • 服务器会重新发送SYN/ACK。
  • @EJP 有什么参考资料吗?
  • @RonMaupin 我改写了条款
  • 我的参考是 RFC 793。SYN-ACK 的 SYN 部分与任何其他部分一样是 TCP 段,因此在 ACK 或计时器到期之前会重新传输,此时连接是重置。

标签: networking tcp


【解决方案1】:

SYN/ACK 被重传。请参阅 RFC 793。SYN-ACK 的 SYN 部分与任何其他部分一样是 TCP 段,因此在它被 ACK 或计时器到期之前会重新传输,这会导致连接被重置。

【讨论】:

  • 那么此时客户端已经处于ESTABLISHED状态,可以向服务器发送数据,但是服务器还没有准备好。所以服务器不会接受数据,强制客户端重新发送数据。直到某个时候客户端收到服务器的 SYN-ACK(即重新发送),然后客户端将为此重新发送 ACK。我的理解对吗?那么客户端会同时重发两个包?
  • ACK 可以捎带到数据上。我不相信服务器在收到 ACK 之前不能接受数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
相关资源
最近更新 更多