HTTP
是目前应用最广泛的应用层协议,它规定了浏览器和服务器通信的数据格式。就像写信要按照某种格式写一样。
http请求:
包括请求行、请求头、请求正文
- 请求行:请求方法(GET OR POST OR 其他) + 请求URL + http版本号
- 空行
请求头:包括很多可选的键值对,通过百度进行抓包,得到几个
- Accept-Encoding:指定网页编码,例如gzip、deflate、sdch、br
- Accept-Language:指定网页自然语言
Cache-Control:控制缓存
常用字段
Public:所有内容缓存
Private:缓存到私有缓存
no-cache:所有内容不缓存
no-store:所有内容不缓存且不存到临时文件中
max-age:最大持续时间Connection:一种在http中的长连接的选项
- Cookie:小甜饼,用于保存信息
- Host:对方的主机名
- Referer:指定从什么URL过来的
- User-Agent:提供一些浏览器的信息
空行
- 请求正文,里面一般存放了post时的数据
http响应
包括状态行、响应头、响应正文
状态行:http版本 + 状态码 + 状态码的描述
状态码
1XX:表示请求已接收,继续处理
2XX:请求成功
3XX:请求重定向
4XX:客户端错误
5XX:服务器错误> 常用状态码: 200:客户端请求成功 302:临时重定向,跳转地址通过Location指定 400:客户端请求有语法错误 403:服务器收到请求,但是拒绝提供服务 404:请求资源不存在 500:服务器发生不可预计错误
响应头:
- Cache-Control、Connection等有些是请求相应共有的
- Content-Encoding:指定相应的编码
- Content-Type:指定相应的媒体类型
- Server:服务器名称
- Content-Length:指定实体正文的长度
空行
响应正文:就是准备显示在浏览器窗口上的东西
实际上,www.baidu.com这个文件只有两行
<!DOCTYPE html> <!--STATUS OK-->
所谓的http,主要就是在学习请求头和响应报头
TCP
TCP向上层提供面向连接的、可靠的连接服务,通过多种方式保证其发送的数据一定会传送给对方。就像写完信然后封装好寄出去一样
TCP对来自上层的数据进行分组,加上相应的TCP头部,构成一定的格式,然后发送出去。
TCP 数据包
这是一个TCP数据包的基本形式。- 端口号:16位端口对应电脑上的16位端口
- 序号确认号:是TCP面向连接的一部分,通过不同数据包的号码来控制发送和接收
- 首部长度:每增加一代表首部增加4个字节,最小为5(0101),代表首部最小为20字节
- (保留及)六个标志位:每个标志位为1或者0,用来在传输过程中发送某种关键信息,常用为ACK、SYN、FIN。
- 窗口大小:TCP协议通过一个滑动窗口来控制发送接收流量。简单说的说就是一次发送多个,每收到一个ACK就将窗口移动一位。
- 16位检验和:同时校验首部和数据
- 16位紧急指针:指示紧急指针的个数(之后是普通数据),仅在标志位URG=1时启用
- 选项:最长40个字节
IP
这是在网络层起作用的协议,发送数据到确定主机。
IP协议是一种!尽力而为!的协议,它会尽量发送数据包,而不会保证数据包的完整。
IP数据包的格式为:
版本:主要指明是IPV4还是IPV6
- 首部长度:至少为5,至多为15,每一对应四字节,即 5 * 4 = 20是首部的最小长度,若首部长度不是4的整数倍会有填充
- 服务类型:
- 总长度:指明这个IP数据包的总长度,最大65535,但是由于链路层限制,所以最大1500
- 16位标识:在IP分割数据时,指明是同一个数据的IP包
- 标志:表示还有无分片和能不能分片
- 片偏移:指明前面来自同一个数据的IP包的相对位置
- 生存时间:指明这个IP数据包可以被转发多少次,每转发一次减一。
- 8位协议:指定所携带的数据是什么协议(用的TCP还是UDP还是什么什么。。)
- 首部校验和:只检验数据包的首部,不检验数据。使用CRC算法。
- 原地址和目标地址:各32位,对应IPV4的32位地址。