基于Java NIO的在线聊天工具抓包分析

源码地址:https://coding.net/u/hust_wsh/p/MyChat/git

源码详解:http://www.cnblogs.com/hust_wsh/p/5162412.html

抓包环境:Ubuntu14.04 32+WireShark1.10.6

1.客户端连接服务器端——TCP 3次握手

由于服务器和客户端都在本地,所以源地址和目的地址都是127.0.0.1,但是通过info列的端口可以分辨出来自客户端和服务器端的包。服务器端的监听端口是8909,客户端发送SYN包请求建立TCP连接,服务器端回应SYNACK包确认,客户端收到包后进入ESTABLISHED状态,并最后发送一个ACK包,服务器收到ACK包之后也进入ESTABLISHED状态。

2.退出客户端,中断TCP连接4次挥手

退出客户端时,客户端通过关闭SocketChannel向服务器发送结束连接的FIN包,此时客户端进入FIN_WAIT1状态,服务器收到客户端发送的FIN包发送ACK给客户端,客户端进入FIN_WAIT2状态,之后服务器进入CLOSE_WAIT状态。收到客户端的FIN包时,read()方法会返回-1,从而可以在服务器端通过返回值为-1来调用SocketChannelclose方法,向客户端返回FIN包,这时服务器端进入LAST_ACK状态,客户端进入了TIME_WAIT状态,最后服务器端收到客户端返回的ACK包后彻底释放TCP连接。






 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考链接:

 1.TCP3次握手4次挥手详解:http://www.cnblogs.com/zmlctt/p/3690998.html

 2.TCP3次握手4次挥手图解:http://blog.csdn.net/whuslei/article/details/6667471

posted on 2016-01-28 13:52 pojowsh 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/hust_wsh/p/5166001.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值