一、网络协议
tcp与udp的区别
- TCP:面向连接、错误重传、拥堵控制、适用于可靠性高的场景
- UDP:不需要提前建立连接,实现简单,适用于实时性高的场景
Restful 软件架构风格
借助于http协议的基本请求方法代表资源的状态切换
- post:新增或者更新
- get:获取资源
- put:更新资源
- delete:删除资源
RPC协议
以本地代码调用的方式实现远程执行
Dubbo、gRPC、Thrift
1.1、HTTP协议常见状态码
状态码有5个大类,由第一位数字进行区分,每个大类下面还有不同的子类,每种子类的长度都是3位,都代表一个状态码,即一种类型的返回的信息。
- 1xx表示通知信息,如请求收到了或正在进行处理
- 2xx表示成功
- 3xx表示重定向,如果要完成请求还必须进行下一步请求
- 4xx表示客户端的错误
- 5xx表示服务器的错误
1.2、请求与响应格式分析
- 开发者工具f12,右键左侧数据,选择 Copy -> copy as curl,即可把请求内容转化为curl命令
- 将命令copy在gitbash或bash上并运行,则会看到返回消息
- 对上面命令进行细化,加入‘-v’参数可以打印更详细的内容,用‘2>&1’将标准错误重定向到标准输出,发送此命令将得到细化后的内容。
1.3、get与post的区别
常见区别:
1、http的method字段不同
2、post可以附加body,可以支持form、json、xml、binary等各种数据格式
3、 行业通用规范
- 无状态变化的建议使用get请求
- 数据的写入与状态的修改建议使用post
1.4、cookie、session和token
cookie与session的区别
- cookie:浏览器接受服务器的Set-Cookie指令,并把cookie保存到电脑上,每个网站保存的cookie只作用于自己的网站
- session:数据存储到服务器,只把关联数据的一个加密串(sessionid)保存到cookie中标记
tooken的应用场景
- 凭借认证信息获取token,或通过后台配置好token
- 在相关请求中使用token,多数是以query参数的心态提供
session与token的区别
1、token是一个用户请求时附带的请求字段,用于验证身份与权限;
2、session可以基于cookie,也可以基于query参数,用于关联用户相关数据;
3、跨域应用的时候,比如android原生系统不支持cookie
- 需要用token识别用户
- 需要把sessionid保存到http请求中的header或者query字段中
二、协议分析工具
网络监听(偏底层的协议):TcpDump + WireShark
代理Proxy
- 推荐工具:手工测试charles[全平台]、安全测试burpsuite[全平台java]
- 自动化测试:mitmproxy
- 其它代理:fiddler everywhere[全平台]、AnyProxy[全平台]
协议客户端工具:curl、postman
2.1、tcpdump(linux)
需要root权限
参数
- -x 抓取到的数据包以十六进制展示
- -w file 抓取的数据包保存到文件
表达式
- ip tcp 协议
- host 主机名
- port 80
- src 来源dst目的
- and or () 逻辑表达式
示例:抓取访问百度的数据包
步骤
- 启动一个窗口启动抓包命令:tcpdump host www.baidu.com -w /tmp/tcpdump.log
- 再启动一个窗口发送请求(模拟一次比较干净的请求):curl http://www.baidu.com/
- 停止tcpdump:crtl+c
- 使用wireshark打开/tmp/tcpdump.log
TCP连接的三次握手和四次挥手