zoukankan      html  css  js  c++  java
  • wireshark 分析 TCP 请求(转)

    转自:http://supben.iteye.com/blog/2329780

    先看一段代码  程序片段是一个RPC调用 ,根据简历id获取简历实体。
    本地IP 10.252.156.132, 远程ip 10.126.83.105

    Java代码  收藏代码
    1. public static void main(String[] args) {  
    2.         long id = 94105403661579l;  
    3.         try {  
    4.             Resume r = resumeService.loadByID(id);  
    5.             PrintUtil.printObject(r);  
    6.         } catch (Exception e) {  
    7.             e.printStackTrace();  
    8.         }  
    9.     }  

     


    通过wireshark 抓包,得到下边的结果

     直接上结论

     1).Source 发送方IP ,Destination 接收方IP,Protocol 协议类型 Length 包长度 Info 包内容

     2). 前三帧是三次握手,

          第四帧客户端把方法调用(包括参数)发送到服务端。包长139,

          第五帧,服务端应答。

          第六帧,服务端传输结果给客户端。长度952,

          第七帧,客户端应答,

          第八帧:服务端重传,

          第九帧:客户端重答。

          第十帧:客户端强行关闭,客户端通知服务端RST。

     3).Info栏 49999 → 17019 表示了 发送者和接受者的端口

     4). FLAGS 常见的有5种类型,分别是

           SYN 表示建立连接,

           FIN 表示关闭连接,

           ACK 表示响应,

           PSH 表示有 DATA数据传输,

           RST 表示连接重置

    5)Seq= 上一次的Ack,  Ack = 上一次的Seq+ Len,如 4 5两帧,6 7两帧

    6)第六帧,服务端发送的时间点 17:25:16.790782,而客户端相应ACK的发送时间为17:25:16.991076,

         超过了200ms,大于RTO的时间,触发了TCP Retransmission (TCP重传),即第8帧

    7)服务端收到客户端的调用,是先回了一个ACK包,然后再在新的一帧传输返回数据。而不是理解的直接回复返回值。

    8)  注意看 4,5,6 三帧  客户端发起调用,服务端回ACK,服务端返回查询结果。  三次请求Seq的值是一样的,可见Seq并不是调用一次升级一次。而是有点类似于回合的概念。一个回合升级一次

    9 ) 笔者第10帧的时候是ctrl+c直接关闭的客户端。 如果友好断开的话,会经过TCP 4次挥手关闭。最后Info体里应该会有FIN标识。 有兴趣的同学可以自测下。

    10) INFO包体里的 WIN, MSS,WS,SACK_PERM 等都是优化网络性能很重要的参数。此处不表。

  • 相关阅读:
    ubuntu18.04 复制或剪切某文件夹下的前x个文件到另一个文件夹下
    VOC2012数据集提取自己需要的类的图片和对应的xml标签
    python面试题
    vi命令使用
    缓冲(Buffer)和缓存(Cache)区别和联系
    cpu相关概念
    pycharm
    jmeter分布式部署
    LeetCode#67 Add Binary
    LeetCode#70 Climbing Stairs
  • 原文地址:https://www.cnblogs.com/weizhxa/p/6571228.html
Copyright © 2011-2022 走看看