抓包分析TCP的三次握手和四次握手
问题描写叙述:
在上一篇《怎样对Android设备进行抓包》中提到了,server的开发者须要我bug重现然后提供抓包给他们分析。所以抓好包自己也试着分析了一下。发现里面全是一些TCP协议和HTTP协议。所以要想进行抓包分析,必须先了解TCP的原理。这里介绍了TCP的建立连接的三次握手和断开连接的四次握手。
问题分析:
1、TCP建立连接的三次握手
1、1前言:介绍三次握手之前,先介绍TCP层的几个FLAGS字段,这个字段有例如以下的几种标示
SYN表示建立连接,
FIN表示关闭连接。
ACK表示响应,
PSH表示有 DATA传输数据,
RST表示连接重置。
1、2 三次握手的步骤
第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到server,主机B由SYN=1知道,A要求建立联机;
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1。ack=1,随机产生seq=7654321的包。
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1。以及位码ack是否为1。若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
完毕三次握手,主机A与主机B開始传送数据。
从抓包分析中能够非常清晰的看到TCP三次握手。下图就是完整的三次握手。client41826port和server的80port建立了连接
2、tcp断开连接的四次握手
tcp断开连接有两种方式,第一种是正常的四次握手断开的,另外一种是RST异常断开的
2、1 正常断开的四次握手:
下图来自网络
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
假设Client端发起中断连接请求,也就是发送FIN报文。
Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了"。可是假设你还有数据没有发送完毕。则不必急着关闭Socket,能够继续发送数据。所以你先发送ACK。"告诉Client端,你的请求我收到了,可是我还没准备好。请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完毕,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。Client端收到FIN报文后,"就知道能够关闭连接了。可是他还是不相信网络。怕Server端不知道要关闭。所以发送ACK后进入TIME_WAIT状态。假设Server端没有收到ACK则能够重传。
“。Server端收到ACK后,"就知道能够断开连接了"。Client端等待了2MSL后依旧没有收到回复。则证明Server端已正常关闭,那好。我Client端也能够关闭连接了。
Ok,TCP连接就这样关闭了!
2、2 用抓包来看断开连接的四次握手
下图中的四个箭头就是标准的四次握手了。
首先server80port想41826port发出FIN的断开连接请求
然后第二个箭头41826收到请求之后想server80port回复了一个ACK
接着第三个箭头41826向server80port发送断开请求FIN
最后第四个箭头,server80向client发送断开的回复ACK
这样四次握手之后,server和client都确认了断开连接,能够看到断开连接是双向的。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
2、3 RST异常关闭连接
有时候也会出现异常断开连接的情况,也就是RST。比方说下图,server80向client32875发送断开请求FIN,client也通过这条链路回复了ACK,可是此时还有数据须要发送。所以没有急着回复FIN,而是先将get请求发送出去,发送了get请求之后再发送的断开请求FIN。可是此时server不知道什么原因在没有确认client的确认前就断开了,所以在接到get请求之后,返回了一个RST,异常断开了这条链路。
结论:
TCP的三次握手和四次握手平时看书本看起来非常生涩难懂,可是通过一次http的抓包分析之后,对于tcp的七次握手有了新的了解和认识。
这些理论知识我还是了解的不够深入,仅仅是学以致用,用来分析网络抓包。只是要想做好网络应用,还是非常有必要对tcp,http做深入一点的了解
抓包分析TCP的三次握手和四次握手的更多相关文章
- linux下使用tcpdump抓包分析tcp的三次握手
首先贴上tcp 三次握手的原理图服务器开启ftp服务并执行tcpdump抓包服务器:192.168.3.14 ftp服务客户端:192.168.3.100 服务器执行以下命令,客户端访问服务器ftp: ...
- 基于wireshark抓包分析TCP的三次握手
1. TCP的三次握手 在TCP/IP协议通讯过程中,采用三次握手建立连接,从而保证连接的安全可靠. 所有基于TCP的通信都需要以两台主机的握手开始.这个握手过程主要是希望能达到以下不同的目的.[1] ...
- 抓包分析TCP的三次握手和四次分手
一:三次握手 三次的握手的过程是: 1.由发起方HostA向被叫方HostB发出请求报文段,此时首部中的同步位SYN=1,同时选择一个序列号seq=x.TCP规定,SYN报文(即SYN=1的报文段)不 ...
- 使用 tcpdump 抓包分析 TCP 三次握手、四次挥手与 TCP 状态转移
目录 文章目录 目录 前文列表 TCP 协议 图示三次握手与四次挥手 抓包结果 抓包分析 TCP 三次握手 数据传输 四次挥手 TCP 端口状态转移 状态转移 前文列表 <常用 tcpdump ...
- Wireshark抓包分析TCP“三次握手,四次挥手”
1.目的 客户端与服务器之间建立TCP/IP连接,我们知道是通过三次握手,四次挥手实现的,但是很多地方对这个知识的描述仅限于理论层面,这次我们通过网络抓包的方式来看一下实际的TCP/IP传输过程. 2 ...
- 网络协议抓包分析——TCP传输控制协议(连接建立、释放)
前言 TCP协议为数据提供可靠的端到端的传输,处理数据的顺序和错误恢复,保证数据能够到达其应到达的地方.TCP协议是面向连接的,在两台主机使用TCP协议进行通信之前,会先建立一个TCP连接(三次握手) ...
- Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析
Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...
- wireshark抓包分析——TCP/IP协议
本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...
- Java网络编程学习A轮_02_抓包分析TCP三次握手过程
参考资料: https://huoding.com/2013/11/21/299 https://hpbn.co/building-blocks-of-tcp/#three-way-handshake ...
随机推荐
- cloudera-scm-server启动时出现Caused by: java.io.FileNotFoundException: /var/lib/cloudera-scm-server/.keystore (No such file or directory)问题解决方法(图文详解)
不多说,直接上干货! 问题详情 查看/var/log/cloudera-scm-server.log的启动日志 问题来源 我在用cloudermanager安装好之后,然后,在对如下. 配置kerbe ...
- JS高级——面向对象方式解决tab栏切换问题
注意事项 1.给li元素注册事件,函数里面的this指的li元素,那么我们可以在注册事件之前将Tab对象用that=this进行保存 2.使用沙箱模式,所以暴露给外面的变量使用的是window.tab ...
- 将vim的UltiSnips的快捷键彻底从tab键中分离
在我之前的<<vim之补全1>>和<<vim之补全2>>中曾经成功的将vim的supertab和UltiSnips共用一个tab键, 这样做的优点的两种 ...
- JavaScript面试题链接汇总
最新JavaScript笔试题(含答案) - 爱思资源网 前端工程师面试问题列表 - 爱思资源网 腾讯最新前端面试题记录分享 - 爱思资源网 优酷前端JS部分面试题 - 爱思资源网 百度校园招聘web ...
- sqlserver 2014 删除主键约束
truncate table menu SELECT * FROM sys.foreign_keys WHERE referenced_object_id=OBJECT_ID('menu'); --找 ...
- appium 使用send_keys方法时报错: driver.find_element_by_id("com.hmkx.zgjkj:id/layout_search_bar_input").send_keys("123")
新手 使用send_keys方法时一直报错,上网查这个方法的用法,看着大家都是这么写的啊,后来直接搜索 报错信息,搜索结果的针对性就清楚多了. 原来是seleium版本太高导致的问题. 可以先在cmd ...
- js中关于new Object时传参的一些细节分析
1, 参数是一个对象,核心js对象(native ECMAScript object)或宿主对象(host object),那么将直接返回该对象. 其生成的对象构造器仍然是所传参数对象的构造器.这样造 ...
- ARX自定义实体
本文介绍了构造自定义实体的步骤.必须继承的函数和必须注意的事项 1.新建一个从AcDbEntity继承的类,如EntTest,必须添加的头文件: "stdarx.h"," ...
- 蓝桥-区间K大数查询
问题描述: 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个包含一个正整数m,表示询问个 ...
- 优化JAVA查询Mongodb数量过大,查询熟读慢的方法
前言:2018年的时候优化了一个项目,该项目从MOngodb中获取数据的时候一次去十万百万千万的数据过慢,往往每次都要二十秒,三十秒,今天提出了一个代码优化的方案 项目查从mongodb中获取数据:代 ...