http的握手过程

本文详细解析了HTTP连接的建立与断开流程,包括三次握手与四次挥手的具体步骤,阐述了TCP连接如何从建立到关闭的完整过程。

http的握手过程:

建立起一个TCP连接需要经过“三次握手”:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主 动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客 户端交互,最终确定断开)

四次挥手:

由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN,首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
第一次挥手:client发送了一个FIN,用来关闭client到server的数据传送,client进入FIN_WAIT_1状态
第二次挥手:server收到FIN后,发送一个ACK给client,确认序号为收到序号+1,server进行CLOSE_WAIT状态
第三次挥手:server发送一个FIN,用来关闭server到client的数据传送,server进入LAST_ACK状态
第四次挥手:client收到FIN后,client进入TIME_WAIT状态,接着发送一个ACK给server,确认序号为收到序号+1,server进入CLOSED状态,完成四次挥手

<think>好的,用户想了解如何使用Wireshark捕获HTTP握手过程。首先,我需要回忆HTTP握手的基本知识。HTTP通常基于TCP,所以三次握手是必须的。用户可能想看到TCP连接的建立,然后是HTTP请求和响应。 接下来,关于Wireshark的使用步骤。首先,用户需要选择正确的网络接口进行抓包,比如以太网或Wi-Fi。然后,设置捕获过滤器可能有助于减少噪音,例如只捕获80端口(HTTP)和443端口(HTTPS)的流量。不过,用户可能更倾向于使用显示过滤器,因为捕获过滤器可能会遗漏一些相关数据包。 启动捕获后,用户需要进行实际的HTTP访问,比如打开浏览器访问一个网站。停止捕获后,使用显示过滤器tcp.port == 80或者http来查看相关流量。但要注意,HTTPS是加密的,直接捕获可能看不到内容,所以用户可能需要配置SSL解密,但这可能比较复杂。 分析三次握手时,用户需要找到SYN、SYN-ACK、ACK三个数据包。每个数据包的长度需要检查,比如SYN通常是66字节,但可能因操作系统而异。随后,HTTP请求如GET方法和服务器的200 OK响应是接下来要关注的。 用户的问题还可能涉及如何验证握手是否成功,或者遇到问题时的排查方法,比如连接超时或重置。此外,生成的相关问题需要考虑用户可能的后续疑问,比如过滤器的使用、HTTPS的处理、优化捕获的方法,以及常见状态码的分析。 需要确保回答中引用了提供的参考资料,比如引用USBPcap工具[^3],或者复杂过滤器的应用[^4]。同时,要提醒用户注意HTTPS加密的影响,以及如何保存过滤器配置以提高效率。 最后,检查步骤是否清晰,是否覆盖了捕获、过滤、分析的整个流程,并确保语言简洁,符合中文表达习惯。可能还需要补充关于握手失败的常见原因和解决方法,帮助用户全面理解。</think>### Wireshark捕获HTTP握手过程的步骤详解 #### 1. HTTP握手基础原理 HTTP协议基于TCP协议,完整通信包含三个阶段: - **TCP三次握手**:建立可靠连接 - **HTTP请求/响应**:传输应用层数据 - **TCP四次挥手**:终止连接 其中握手过程使用SYN/ACK控制位标识: $$SYN \rightarrow SYN/ACK \rightarrow ACK$$ #### 2. 具体捕获步骤 **步骤1:启动Wireshark** - 选择正确的网络接口(如以太网/Wi-Fi) - 推荐使用捕获过滤器:`tcp port 80`(仅抓取HTTP流量)[^3] **步骤2:开始捕获** ```bash # 点击"Start"按钮或使用快捷键Ctrl+E # 建议立即进行HTTP访问操作(如浏览器打开http网站) ``` **步骤3:触发HTTP通信** - 浏览器访问`http://example.com` - 执行`curl http://example.com`命令 **步骤4:停止捕获** - 使用快捷键Ctrl+E停止 - 应用显示过滤器:`http || tcp.flags.syn==1`[^4] #### 3. 关键数据包分析 1. **TCP握手包**(示例): | 数据包 | 方向 | 长度 | 特征 | |--------|-------------|--------|-------------------| | #1 | Client→Server | 66字节 | SYN=1, Seq=x | | #2 | Server→Client | 66字节 | SYN=1, ACK=1, Seq=y, Ack=x+1 | | #3 | Client→Server | 54字节 | ACK=1, Seq=x+1, Ack=y+1 | 2. **HTTP通信包**: - GET / HTTP/1.1 - HTTP/1.1 200 OK #### 4. 常见问题排查 - **无握手包**:检查防火墙设置/目标服务状态 - **握手失败**:观察RST包或重复SYN包 - **HTTPS抓包**:需配置SSL密钥 ```wireshark # SSL解密配置路径: Edit → Preferences → Protocols → TLS → (Pre)-Master-Secret log ``` #### 5. 高级分析技巧 - **时间序列图**:Statistics → Flow Graph - **握手延迟计算**:右键数据包 → "Set Time Reference" - **过滤特定会话**:`tcp.stream eq <num>`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值