Netty做tcp长连接服务器有大量坏包

天探女
  • 37

使用Netty做TCP长连接服务器,多个设备连接该服务器,都在局域网内
业务上,大部分帧都是客户端上报,服务器不用回复,服务器发送到设备的帧设备也不用回复

在使用wireshark抓包,服务器发送到客户端,有大量黑底红字的坏包
我的ip192.168.1.168 设备的ip192.168.1.150
抓包发现客户端每发上来一帧,虽然我业务上无需回复,但tcp自己还是有个ACK的正常包发回到设备,并紧跟着一个一模一样的坏包,显示tcp dup ack

我自己发给客户端的帧,也同样都是一个正常包后面跟一个坏包,坏包显示 tcp retransmission

而且客户端是能收到帧的

为什么我发给客户端的都是一正常包紧跟一个坏包?而且有大量的不是我业务上的包,这些都是啥?是服务器收到帧后必须要回复一帧才行吗?


try {
    ServerBootstrap bootstrap = new ServerBootstrap()
        .group(boss, worker)
        .channel(NioServerSocketChannel.class)
        .localAddress(inetSocketAddress)
        .childOption(ChannelOption.TCP_NODELAY, true)
        .childOption(ChannelOption.SO_KEEPALIVE, true)
        .childHandler(new HvacChannelInitializer(context));
    ChannelFuture future = bootstrap.bind().sync();
    if (future.isSuccess()) {
        log.info("[TCP Server] server started @ {}:{}", ip, tcpPort);
    }
    future.channel().closeFuture().sync();
} catch (InterruptedException e) {
    log.error("[TCP Server] server started failed", e);
} finally {
    boss.shutdownGracefully();
    worker.shutdownGracefully();
    preDestroy();
}
回复
阅读 1.7k
2 个回答
✓ 已被采纳

设备 192.168.1.150 丢包了,检查网线、网卡接口、CPU 内存等占用情况。

ACK 是接收方在收到数据后,反馈给发送方的确认机制。

  1. 如果数据没有送达,发送方会重发,你便看到 “tcp retransmission”。
  2. 如果 ACK 没有送达,接收方会重发,便出现 “tcp dup ack”。

TCP 协议详细说明了如何判断数据或 ACK 是否丢失,详情请查标准文档。

一般情况下,当网络延时增大导致网络速度变慢,是产生重复ACK的一个主要原因。或者是服务端或者客户端响应速度变慢或者没没有响应。

 

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

宣传栏