wireshark 分析 TCP 请求

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

public static void main(String[] args) {
		long id = 94105403661579l;
		try {
			Resume r = resumeService.loadByID(id);
			PrintUtil.printObject(r);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 


通过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 等都是优化网络性能很重要的参数。此处不表。

 

 

猜你喜欢

转载自supben.iteye.com/blog/2329780