问答

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

作者:admin 2021-07-12 我要评论

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

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

使用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();
}
###

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

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

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

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

###

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

?

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Netty做tcp长连接服务器有大量坏包

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

  • mysql 联合索引失效的问题?

    mysql 联合索引失效的问题?

  • Mac下使用electron-builder  打包

    Mac下使用electron-builder 打包

  • 让导出的axure组件主题色可变

    让导出的axure组件主题色可变

腾讯云代理商
海外云服务器