应用层TCP的确认机制

请问在实际商业项目中,用TCP传输自定义协议的时候是不是都得让对方回复确认收到了?那么为了在对方没收到的情况下重传,是不是还得将之前发送的信息保存下来,这样会空间消耗会比较大。。有没有更好的方法?

阅读 6k
5 个回答

你是说TCP协议?
TCP协议本身就包含了确认送达和自动重传的机制,只要你使用TCP连接,就不需要考虑这个问题。

TCP是一种协议,一般由你的机器设备进行实现,你无需关注TCP的重传。一般你的应用层,例如HTTP,网络层就是TCP,在调用HTTP协议时无需关注下层协议实现,下层网络协议对上层协议是透明的

新手上路,请多包涵

用Modbus协议的机制跟你探讨一下,主站和从站通讯属于请示应答机制。当主站给从站发送一个请求时,假如从站未及时回复,超过延时时间之后,主站会连续给从站下发5次。通过超时时间和重发次数来尽可能保证每次的请求都成功,假如重发5次均失败,则判定此次发送失败,此时物理链路可能发生异常,后续未发完的数据也不再发送。

TCP是可靠传输的协议,你发的每一个包,对端都需要ACK确认.
比如你传了5个包给对端, 其中3号包丢了,
那么当对端收到4号包时, 对端会给你发ACK 3,同时对端会把4号包保存下来
当对端又收到5号包时, 对端还是会给你发ACK 3, 同时对端会把5号包保存下来.
TCP协议中,当你连续收到3个 “ACK 3”时, 你这边就知道 3号包丢了,要重发, 这就叫快速重传机制.

当你重发3号包 给到对端后, 对端接收成功后,会回 ACK 6,因为4号 5号包,对端之前已经收成功了.

这个TCP帮你保证的,
如果3号包在TCP层重发多次后,还是失败,那整个发送就失败了.
需要检查下网络连接并在应用层重新发送一次.

新手上路,请多包涵

不用,你说的这些由TCP协议层实现,你只管用就是了.
如果想知道细节,你可以参考 这篇文章

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题