网络7层结构对应关系
TCP包协议对应关系
HTTP抓包
curl -I baidu.com
1. 基于TCP的HTTP请求前,需要先通过 三次握手 建立连接
- 第一次握手:源端向目标(110.242.68.66)发送 SYN,建立连接请求
- 第二次握手:目标(110.242.68.66)响应源端 SYN+ACK,接受连接的应答
- 第三次握手:源端向目标(110.242.68.66)发送 ACK,确认请求
- 发送完确认请求后,开启到源端的「单向连接通道」;百度收到确认请求后,开启到源端的单向连接通道;「两边通道」都开启以后,就可以通信了。
2. TCP 连接建立后,开始HTTP的请求和响应
- 第一个包发起HTTP请求
- 第三个包接收到HTTP响应
3. 请求响应结束后,TCP四次挥手 断开连接
- 第一个包 第一次挥手,发送 FIN+ACK 释放连接的请求
- 第二个包 第二次挥手,发送 ACK 确认请求,源端收到后释放到目标的单向连接
- 第三个包 第三次挥手,法功 FIN+ACK 释放连接的请求
- 第四个包 第四次回收,发送 ACK 确认请求,目标收到后释放到源端的单向连接
- 双向连接释放后,TCP连接关闭,通信结束
4. 分析HTTP协议报文
- 请求报文分为三个部分:请求行、请求头、请求体
- 响应报文分为四个部分:状态行、响应头、响应空行、响应体
- Request Method:请求方法
- Request URI:请求地址
- Request Version:请求版本
- Host:目标主机
- User-Agent:用户代理
- Accetp:浏览器可接受的MIME类型
- Response Version:响应版本
- Status Code:响应状态码
- Response Phrase:响应状态码的提示信息
- Date:服务端发送响应报文的时间
- Server:服务器信息
- Last-Modified:最后修改的时间
- ETag:对象的标志值,如果对象修改了,这个值也会变,用来判断对象是否改变
- Accept-Ranges:支持的范围单位
- Content-Length:内容长度
- Cache-Control:缓存控制
- Expires:过期时间,过期前可以直接访问缓存副本
- Connection:连接类型,Keep-Alive表示这是一个长链接,可以继续用这个连接通信
- Content-Type:资源文件类型
5. 查看HTTP/TCP追踪流
选中数据包-->右键-->follow-->http数据流/TCP数据流,可以查看到请求、响应的报文