首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

再次记录使用tcpdump+wireshark分析TCP握手连接与断开

前言 刚好公司有个项目出现客户端访问服务器提示连接超时的情况,具体log信息显示如下: [21:29:48(1518)]*[TestService]*[getDeviceInfoFromCloud->onFailure...] [21:29:51(1518)]*[TestService]*[getDeviceInfoFromCloud->onFailure: java.net.SocketTimeoutException:...2、设备发送消息给服务器,服务器没有接收到信息?? 3、设备没有把信息发送到服务器?? 4、设备与服务器通讯期间数据有丢失??...TCP第三次连接 4、结论 1、从TCP握手连接过程来看,第二次握手连接不成功(即服务器可能存在没有接收到消息或者接收到消息后没有返回给客服端),接下来就得分析服务器端的日志信息了 2、从服务端分析的原因为...:服务器刚好在释放资源时,客户端发来请求,导致服务器没有及时做处理导致出现超时等异常。

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

干货 | QMQ在携程的落地实践

50MB是个特殊的数字,我们有一个消息索引备份服务,会实时从slave上拉取消息索引,我们设置了每次拉取的上限。10秒则是索引备份服务请求的超时时间。...为了保证可靠,tcp采用超时重传机制,重试间隔根据退避算法计算得出,相关代码位于net/ipv4/tcp_timer.c#tcp_retransmit_timer,截取部分如图8所示。 ?...图8 rto退避算法 简言之,tcp重传定时器定时时间是上次rto的两倍,最大不超过TCP_RTO_MAX(120S),最小不能小于TCP_RTO_MIN(200ms),而最终判定是否超时,则与内核参数...图9 重传超时判定算法 默认net.ipv4.tcp_retries2取值15,即代码截图中的boundary,rto_base对于ESTABLISHED状态的连接取值TCP_RTO_MIN(200ms...图12 消息接收流程 无界接收队列不应该承担全部的责任,其本质还是需要有套回压机制,譬如,当检测到接受队列大小超过阈值后,关闭channel的auto read机制。

1.3K10

初探java安全之RMI(1)

通信过程分析 使用 wireshark 抓下包 这是完整的通信过程,我们可以发现,整个过程进行了两次TCP握手,也就是我们实际建立了两次 TCP连接。...第⼀次建立TCP连接是连接远端 127.0.0.1 的 1099 端口 ,就是我们在代码里看到的端口,⼆ 者进行沟通后,客户端向远端发送了⼀个 “Call” 消息,远端回复了⼀个 “ReturnData...” 消息,然后客户端新建了⼀ 个TCP连接,连到远端的 2802 端口。...所以整个过程,就是客户端先连接Registry,并在其中寻找Name是execMethod的对象,这个对应数据流中的Call消息 然后Registry返回⼀个序列化的数据,这个就是找到的 RemoteMethod...的对象,这个对应 数据流中的ReturnData消息;客户端反序列化该对象,发现该对象是⼀个远程对象,地址在 172.28.128.1:2802 ,于是再与这个地址建立TCP连接;在这个新的连接中,才执行真正远程方法调用

39630

初探java安全之RMI

通信过程分析 使用 wireshark 抓下包 这是完整的通信过程,我们可以发现,整个过程进行了两次TCP握手,也就是我们实际建立了两次 TCP连接。...第⼀次建立TCP连接是连接远端 127.0.0.1 的 1099 端口 ,就是我们在代码里看到的端口,⼆ 者进行沟通后,客户端向远端发送了⼀个 “Call” 消息,远端回复了⼀个 “ReturnData...” 消息,然后客户端新建了⼀ 个TCP连接,连到远端的 2802 端口。...所以整个过程,就是客户端先连接Registry,并在其中寻找Name是execMethod的对象,这个对应数据流中的Call消息 然后Registry返回⼀个序列化的数据,这个就是找到的 RemoteMethod...的对象,这个对应 数据流中的ReturnData消息;客户端反序列化该对象,发现该对象是⼀个远程对象,地址在 172.28.128.1:2802 ,于是再与这个地址建立TCP连接;在这个新的连接中,才执行真正远程方法调用

41110

分布式通信的几种基本方式RPC、RMI、JMS、EJB、WebService

RPC假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发分布式应用更加容易。RPC采用C/S架构。...RMI 远程方法调用(Remote Method Invocation, RMI)是Java的一组拥护开发分布式应用程序的API。...由于J2EE是分布式程序平台,它以RMI机制实现程序组件在不同操作系统之间的通信。比如,一个EJB可以通过RMI调用Web上另一台机器上的EJB远程方法。...JMS定义了5种消息正文格式,以及调用的消息类型,允许发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。 ❑ StreamMessage:Java原始值的数据流。...❑ BytesMessage:一个未解释字节的数据流。 EJB JavaEE服务器端组件模型(Enterprise JavaBean, EJB)的设计目标是部署分布式应用程序。

1.6K50

Apache Dubbo模块19道面试题附参考答案

传输协议 TCP,异步 Hessian 序列化。...RMI: 采用 JDK 标准的 RMI 协议实现,传输参数和返回参数对象需要实现 Serializable 接口,使用 Java 标准序列化机制,使用阻塞式短连接,传输数据包大小混合,消费者和提供者个数差不多...,可传文件,传输协议 TCP。...多个短连接 TCP 协议传输,同步传输,适用常规的远程服务调用和 RMI 互操作。在依赖低版本的 Common-Collections 包,Java 序列化存在安全漏洞。...服务消费者端设置超时时间,如果在消费者端设置了超时时间,以消费者端为主,即优先级更高。因为服务调用方设置超时时间控制性更灵活。如果消费方超时,服务端线程不会定制,会产生警告

31020

Redis客户端常见异常分析

二、 客户端读写超时 Jedis在调用Redis时,如果出现了读写超时后,会出现下面的异常: redis.clients.jedis.exceptions.JedisConnectionException...: java.net.SocketTimeoutException: Read timed out 造成该异常的原因也有以下几种: 读写超时设置的过短。...三、客户端连接超时 Jedis在调用Redis时,如果出现了读写超时后,会出现下面的异常: redis.clients.jedis.exceptions.JedisConnectionException...: java.net.SocketTimeoutException: connect timed out 造成该异常的原因也有以下几种: 连接超时设置的过短。...Redis发生阻塞,造成tcp-backlog已满,造成新的连接失败。 客户端与服务端网络不正常。 四、客户端缓冲区异常 Jedis在调用Redis时,如果出现客户端数据流异常,会出现下面的异常。

3.1K20

Tcp是什么?_跟你说完了

的数据交互规则(这一章比较小,主要讲了几个数据交互的规则) 4、TCP成块的数据流(主要讲解了TCP数据传输中会出现的问题和问题解决方案,主要是滑动窗口,面试常问) 5、TCP超时与重传(主要讲解了当...这个机制就好比我们经常在电视上看到人们经常用对讲机说话,当你收到别人发送的语音时,你都需要回复一句“收到”让发送者明确知道这条消息,可以安心的知道消息已被接受接受。...当发送者在一定时间内没有收到接受者的回复时,发送者可以根据重传策略(后面会介绍)进行消息重传,保证消息能真正的发到接受者手中。...3.3、数据段丢失重传 当数据包丢失的时候,TCP会根据重传策略(后面会介绍)进行消息重传,重传策略包含快速重传,还有超时重传两种场景。...如果应用层不能及时接受已被TCP接受的链接,这些连接可能占满整个连接队列,客户的主动打开最终将超时 四、数据交互规则 这一章节是一个小章节,主要讲一下玉数据交换有关的规则,主要是ACK的延迟确认、Nagle

96830

Log4j2 RCE 漏洞之续集

对于 ELProcessor 类中有一个叫 eval 的方法,该方法接受一个字符串参数,然后就可以当代码运行,该例子中就是利用这个类运行危险代码 System.exit(1) 。...引用官网的一段原文如下: 官网已经说的很清楚了,查询功能在日记消息里默认被禁用了,但是在配置里还在。...本机当然没有这个服务了,然后就会有 tcp 握手不上一直等到超时的情况。请注意默认 socket 去连接 jndi 是同步的,不是异步的。...当然这个风险是有前提的,就是我们需要把日记发送到消息队列,然后黑客还可以修改到生产上的配置文件。...我们再来看看 log4j1 中的 socket server,它是可以启动一个基于 tcp 的 socket 网络服务,用来接受远端发送过来的日志: 从源码里我们发现这个服务是有反序列化对象的操作的,

72410

Java核心知识点整理大全16-笔记

运行 RMI 编译器(rmic),创建客户端 stub 类和服务端 skeleton 类; 4. 启动一个 RMI 注册表,以便驻留这些服务; 5. 在 RMI 注册表中注册服务; 6....目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式 的 RESTful 服务等。...主要在你的系统之间 发起会话或或者接受会话请求(设备之间需要互相认识可以是 IP 也可以是 MAC 或者是主机名) 6.... FIN :用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流。 8. 窗口大小( 16 位):数据字节数,表示从确认号开始,本报文的源方可以接收的字节数,即源 方接收窗口大小。...在处理超时的许多情况中,也会发送不带任何数据的报文段。 9.1.3.2.

9010

深入理解数据库编程中的超时设置

1 connectTimeout与socketTimeout connect timeout和socket timeout都属于TCP层面的超时。...socketTimeout:是通过TCP连接发送数据(在这里就是要执行的sql)后,等待响应的超时时间。...一些内核参数,如net.ipv4.tcp_syn_retries可以影响connectTimeout,这里不做深入介绍。..."select sleep(5)"); ps.executeQuery();} 在这个案例中,我们模拟了一个慢查询,通过执行"select sleep(5)",sleep是mysql提供的函数,其接受一个休眠时间...最后,需要提醒的是,socket timeout是TCP层面的超时,是操作系统层面进行的控制,statement timeout是驱动层面实现的超时,是应用层面进行的控制,如果同时设置了二者,那么后者必须比前者大

8.1K31

面试突击69:TCP 可靠吗?为什么?

相比于 UDP 来说,TCP 的主要特性是三个:有连接、可靠、面向数据流。...校验和基本算法 TCP/UDP/IP 等协议的校验和算法都是相同的,采用的都是将数据流视为 16 位整数流进行重复叠加计算。...消息丢了没关系,发送端在确认了消息丢失之后,再补偿一个同样的消息给接收端不就解决了?这就是超时重传机制。...巧妙的超时重传机制 TCP超时重传机制在设计上也非常巧妙,它为了保证消息在任何环境中,都能高效的通讯,所以 TCP 采用的是“动态时间”的超时重传机制。...,如果累计了一定的次数,消息还没有成功的发送,那么 TCP 会认为对方主机存在异常,会强制关闭连接,这就是 TCP 超时重传的主要执行流程。

24630

消息推送原理

消息传递流程 发起请求将消息序列化传递→接受请求将消息反序列化→返回结果给请求端将消息序列化传递 按照网络通信原理,需要实现这个需要做的就是将请求转换成流,通过传输协议传输至远端,远端计算机在接收到请求的流后进行处理...特点 生产者和消费者必须知道通道资源的位置,否则无法知道从哪里发送(接受消息(考虑引用Lookup服务进行查找) 以队列形式存在,先进先出 可以存在多个生产者和消费者 关键字解释 Lookup服务 Lookup...当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP...RMI 采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。...Webservice与RMI RMI是在tcp协议上传递可序列化的java对象,只能用在java虚拟机上,绑定语言,客户端和服务端都必须是java。

3.3K30

osi七层网络模型及网络基础知识

数据流方式的套接字,必须在传输数据前,调用connect()构造一个与目的地的TCP连接,并在不能构造连接时返回一个差错代码。如果是数据报方式,则不是必须在传输数据前调用connect。...在数据流方式中,一个连接建立以后,或者在数据报方式下,调用了connect()进行了套接字与目的地址的绑定后,就可以调用send()和reev()函数进行数据传输。...当服务器端发送过来消息或接收到本地管道消息,select立即结束等待并且返回是超时还是收到消息或socket异常。 ?...ACK:代表确认接受,从上面可以发现,不管是三次握手还是四次分手,在回应的时候都会加上ACK=1,表示消息接收到了, 并且在建立连接以后的发送数据时,都需加上ACK=1,来表示数据接收成功。...1.客户端首先要SYN=1,表示要创建连接, 2.服务端接收到后,要告诉客户端:我接受到了!

87230

八股文!!

OSI分层协议 TCP/IP协议分层 各层协议概述 tcp/ip协议族数据流 各层协议标识 tcp/ip协议中数据转发 ARP地址解析协议 ARP报文头格式 arp协议 arp高速缓存 3 IP逐跳协议...坚持定时器 拥塞窗口 慢启动 tcp吞吐量 带宽时延乘积 糊涂窗口综合症 解决方案 超时重传 快速重传 网络拥塞 rto超时的拥塞避免 重复确认的拥塞避免 TCP常见异常 应用崩溃 机器崩溃 机器崩溃并重启...以此共勉 tcp/ip协议存在的意义 协议分层 各层协议概述 OSI分层协议 TCP/IP协议分层 各层协议概述 tcp/ip协议族数据流 各层协议标识 IP地址:在网络层唯一确定一个具体的网络...确认号:该确认号的发送方期待下一次接收的序列号 头部长度:以32位为单位的tcp报文头长度,最大值60字节 窗口大小:从接收方的确认号开始的窗口大小,也是tcp接受缓冲区的大小。...,就暂存乱序到达的后续消息,重复确认处于空洞中的报文序号,等待缺失消息到达后推送给应用。

91211

Java输入流read()和readline()方法对比分析【实例讲解】

大家好哇,我是灰小猿,一个超会写bug的程序猿, 最近一直在做项目的开发,所以很少有时间来打理博客,今天抽出一点时间来对我在开发中遇到的一些小问题和大家分享一下, 在做使用TCP/IP协议进行网络通信时...就是在同一个局域网中,我作为客户端,以另一台电脑作为服务器进行通信时发现,两者之间可以建立C/S连接,但是对于服务器发送过来的数据,我这边以read()方法来读取字符的输入流的长度时却显示读取失败,报错类型为; java.net.SocketTimeoutException...: Read timed out 即读取时间超时,但是从服务器发送过来的数据并不很长,所以按照正常情况下读取超时的情况一般是不会出现的,经过仔细研究发现是因为read()方法读取的是单个字符,会以流末尾作为结束...,也就是说只要连接方一直在重复的发送数据,那么read()就会一直在读取一个很长的输入流,这样的话当然就会很容易造成读取超时的问题了,而我做的测试也正是让服务器端一直在向客户端发送相同的数据。...(b); //由于信息的传输是以二进制的形式,所以要以二进制的形式进行数据的读取 String data = new String(b, 0,len); System.out.println("输入流消息

48620

基于 Nginx 实现 10万+ 并发,Linux 内核优化

发送keepalive消息的频度;默认是2小时,将其设置为10分钟,可以更快的清理无效链接。...net.ipv4.tcp_rmem = 10240 87380 12582912 #定义了TCP接受缓存的最小值、默认值、较大值。...net.ipv4.tcp_max_syn_backlog = 8192 #这个参数表示TCP三次握手建立阶段接受SYN请求列队的较大长度,默认1024,将其设置的大一些可以使出现Nginx繁忙来不及accept...net.core.somaxconn=262114 选项默认值是128,这个参数用于调节系统同时发起的TCP连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此需要结合高并发请求数来调节此值...net.ipv4.tcp_max_orphans=262114 #选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立链接将立即被复位并输出警告信息。

2.9K30
领券