Wireshark抓包分析 TCP三次握手/四次挥手详解
抓包界面显示的结果和协议栈的层次关系正好相反,最上面的是物理层,最下面是应用层。具体的对应关系如下:
Frame: 物理层的数据帧概况
Ethernet II: 数据链路层以太网帧头部信息
Internet Protocol Version 4: 互联网层IP包头部信息
Transmission Control Protocol: 传输层的数据段头部信息,此处是TCP
Hypertext Transfer Protocol: 应用层的信息
详细实现三次握手和四次挥手步骤:
先打开root用户终端,输入tcpdump -i any tcp and host XX
再在另外一个新的root用户终端,输入curl http://XX
最后打开wireshark分析
第一次握手: 客户端向服务器发送连接请求包,标志位SYN(同步序号)置为1,序号为X=0
第二次握手: 服务器收到客户端发过来报文,由SYN=1知道客户端要求建立联机。向客户端发送一个SYN和ACK都置为1的TCP报文,设置初始序号Y=0,将确认序号(Acknowledgement Number)设置为客户的序列号加1,即X+1 = 0+1=1, 如下图:
第三次握手: 客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号加1(X+1=1)。以及标志位ACK是否为1。若正确,客户端再次发送确认包,ACK标志位为1,SYN标志位为0。确认序号(Acknowledgement Number)=Y+1=0+1=1,发送序号为X+1=1。服务器收到后确认序号值与ACK=1则连接建立成功,可以传送数据了。
TCP四次挥手
TCP断开连接时,会有四次挥手过程,如下图所示,wireshark截获到了四次挥手的四个数据包。
第一次挥手: 客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号为X=1,确认序号为Z=1。
第二次挥手:服务器收到FIN后,发回一个ACK(标志位ACK=1),确认序号为收到的序号加1,即X=X+1=2。序号为收到的确认序号=Z。
第三次挥手:服务器关闭与客户端的连接,发送一个FIN。标志位FIN和ACK置为1,序号为Y=1,确认序号为X=2。
第四次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号加1,即Y+1=2。序号为收到的确认序号X=2。
总结:
第一次握手:seq:0 ack:0
第二次握手:seq:0 ack:1
第三次握手:seq:1 ack:1
第一次挥手:seq:1 ack:1
第二次挥手:seq:1 ack:2
第三次挥手:seq:1 ack:2
第四次挥手:seq:2 ack:2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix