2009-09-29 24 views
1

我正在解决一些通信问题,并且在网络跟踪中偶尔会遇到TCP序列错误。一个例子,我得到的是:应用程序是否可以影响TCP重新传输

  1. 服务器到客户端:SEQ = 3174,长度= 50
  2. 客户端到服务器的ACK = 3224
  3. 服务器到客户端:SEQ = 3224,长度= 50
  4. 客户端到服务器:ACK = 3224
  5. 服务器到客户端:SEQ = 3274,LEN = 10
  6. 客户端到服务器:ACK = 3224,SLE = 3274,SRE = 3284

数据包4几乎完全在同一时间记录在跟踪中(来自客户端和服务器之间的路由器),因此它们很可能在传输过程中发生交叉。

TCP会话与客户端失去了来自服务器的最后两次传输的同步。这两个数据包应该已被重新传输,但它们不是,跟踪中的下一个日志是数据包6 24秒后来自客户端的RST数据包。

我的问题与可能导致重传失败的原因有关来自数据包的服务器数据3 & 5?我会假定重传将在操作系统级别,但无论如何,应用程序可能会影响它并阻止它被发送?一个线程阻塞或睡觉或类似的东西?

回答

2

只有一个数据包从服务器到客户端 - 数据包3丢失。数据包6包含数据包5的选择性确认(SACK),以便通过。

在回答您的具体问题时,不,应用程序级别的问题不应阻止TCP重新传输。

+0

我没有想到应用程序涉及,但这意味着我有一些奇怪的事情发生在网络上,更难以理清:(我把它从数据包5的数据不会传递给应用程序直到收到数据包3的数据? – sipwiz 2009-09-29 11:13:26

+1

sipwiz:正确。您可能需要做的下一步是在两端获取数据包日志,而不是中间的一个。 – caf 2009-09-29 11:25:29

相关问题