gpt4 book ai didi

c++ - 3次握手丢包

转载 作者:可可西里 更新时间:2023-11-01 02:43:03 27 4
gpt4 key购买 nike

我需要在用 c++(使用 winsock 2)编写的客户端和服务器应用程序之间执行 3way 停止和等待握手以进行分配。客户端发送 SYN。服务器递增客户端序列号并发送 SYN-ACK。客户端递增服务器序列号并发送 ACK。

模拟丢包,客户端和服务端连接一个中间Router程序,偶尔不转发包,造成丢包。我应该如何构建我的 sendto()、select()、recvfrom() 语句以解决可能的数据包丢失问题?

比如SYN丢失,客户端超时,重新发送。如果 SYN-ACK 丢失,客户端超时并重新发送 SYN。但是,如果 ACK 丢失,我不知道该怎么办。

编辑:在我的客户端上基本上是这样的:

  • 发送 SYN。
  • 循环 while select() 语句失败并重新发送 SYN
  • 接收SYN-ACK
  • 发送ACK
  • 如果 ACK 丢失,循环可能重新接收 SYN-ACK。

我怎么知道什么时候停止循环?

最佳答案

select 可用于检查何时可以无阻塞地读取套接字。

至于检查ACK属于哪个发送包,你检查序列号。

如果您在超时时间内没有收到 ACK,您只需重新发送最后一个数据包。不管你发送什么样的数据包,如果你没有收到 ACK,你应该重新发送它。

关于c++ - 3次握手丢包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9389729/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com