C语言 TCP流量控制错误



我正在尝试实现一个tcp堆栈。我遵循了以下步骤:

    TCP开放:
  1. 。客户端发送初始序列为"C"的SYN报文给服务器,Ack号为"0"。

    b。Server响应SYN + ACK, seq no "S", ACK no "C+1"。

    c。

  2. 客户端发送ACK+PSH,序列不为"C+1",ACK不为"S+1"。
  3. TCP send and recv:

    。客户端将发送带有ACK标志的数据请求和数据序列无"C+1",返回无"S+1"

    b。发送方发送报文段中序列为"S+1+数据"的报文段,接收方发送ACK报文段中序列为"S+1+数据"的报文段,直至FIN或RST发送完毕。

在我的情况下,在数据传输过程中,我没有得到几个数据包,但我可以在wireshark上看到它们。

是否有任何机制来检查乱序数据和数据包丢失使用序列号和ack号,并获得数据包返回

如果您收到的段序列号高于预期的下一个序列,您应该重新发送最后一个ACK。这告诉发送方一些报文段丢失了,它应该立即重传所有正在等待确认的报文段。

一个更好的解决方案是在RFC 2018中实现选择性确认选项。这将允许您确认收到的片段无序,并且发送方只会重新传输丢失的部分。

最新更新