安装wireshark
1 | # 添加wireshark 下载链接地址,然后更新软件源 |
TCP协议
概念
TCP是一种面向连接(连接导向)的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。
特点
- TCP是面向连接的运输层协议
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
- TCP提供可靠交付的服务
- TCP提供全双工通信。数据在两个方向上独立的进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号
- 面向字节流。面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但TCP应用程序交下来的数据仅仅是一连串的无结构的字节流
三次握手
抓包的关键
- 确认比特ACK: ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。
- 同步比特SYN: 在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。
- 推送比特PSH: 当发送端PSH=1时,接收端尽快的交付给应用进程。
- 终止比特FIN: FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
第一次握手
建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号Seq=x。
(其中,SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号Seq=X,表明传输数据时的第一个数据字节的序号是x)
第二次握手
服务器收到请求后,必须确认客户的数据包。同时自己也发送一个SYN包,即SYN+ACK包。
(标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含服务端的初始序号Seq(服务器)=Y,以及服务器对客户端初始序号的确认号Ack(服务器)=Seq(客户端)+1=X+1)
第三次握手
客户端收到服务器的SYN+ACK包,向服务器发送一个序列号(Seq=X+1),确认号为Ack(客户端)=Y+1,此包发送完毕,客户端和服务器进入ESTAB_LISHED(TCP连接成功)状态,完成三次握手。
四次挥手
第一次挥手
首先,客户端发送一个FIN,用来关闭客户端到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号Seq=X。
第二次挥手
服务器收到这个FIN,它发送一个ACK,确认Ack为收到的序号加一(X+1)。
第三次挥手
关闭服务器到客户端的连接,发送一个FIN给客户端。
第四次挥手
客户端收到FIN后,并发回一个ACK报文确认,并将确认序号Seq设置为收到Ack序号。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
参考连接
使用wireshark抓包并分析tcp三次握手
Wireshark抓包分析TCP 3次握手、4次挥手过程
通过Wireshark抓包分析TCP的三次握手和四次挥手