TCP
面向连接,可靠的,基于字节流的传输层协议。
报文格式
- 源端口,目的端口:16位+16位(共4字节,4bytes则4*8=32位)
- 序列号:32位
- 确认号:32位
- 首部长度(4位)+保留(6位)+6个标志位(URG\ACK\PSH\PST\SYN\FIN)+窗口大小(16位)
- 16位检验和+16位紧急指针
- 选项+填充(可选,保证报文长度是32的整数倍)
- 数据(可选)
首部:固定20个字节(上面前5行),选项为可选;数据不属于首部报文。
首部长度:1111,十进制的15,表示15*32/8=60字节,即最大长度;最小长度为20字节(没有选项、数据)。
三次握手
SYN:同步序列号标志位,seq:序列号
ACK:确认序列号标志位,ack:确认号
- client->server,SYN=1,seq=j,client进入syn_sent状态;
- server->client,ACK=1,ack=j+1,SYN=1,seq=k,server进入syn_recv状态;
- client->server,ACK=1,ack=k+1,成功建立连接。
四次挥手
双工通信,断开时,2边都要发送FIN,因为第一次FIN只表示一边断开,另一边可能还在发送数据。
- client->server,FIN=1,seq=m,client进入fin_wait状态;
- server->client,ACK=1,ack=m+1,server进入close_wait状态;
- server->client,FIN=1,seq=n,server进入last_ack状态,client进入time_wait状态;
- client->server,ACK=1,ack=n+1,完成4次挥手。
http
HyperText Transfer Protocol,超文本传输协议。
http请求
CRLF:carriage-return line-feed,回车、换行,\r\n
- 请求行:请求方法 url 协议/版本 CRLF
- 请求头:key : value CRLF(N行)
- 空行
- 请求体:get请求没有正文,post请求正文是参数;
http响应
- 状态行:协议/版本 状态码 状态码描述 CRLF
- 响应头:key : value CRLF(N行)
- 空行
- 响应体:html/json等
状态码
1XX,指定客户端的响应动作
- 100,continue,,客户端应当继续发送请求;
- 101,switching protocols,服务器通过Upgrade消息头通知客户端采用不同协议,下个请求将转换协议;
2XX,服务端成功处理了请求
- 200,ok,请求成功;
- 201,created,请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其URI已经随Location头信息返回;
- 202,accepted,服务器已接受请求,但尚未处理;
- 203,non-authoritative information,文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝,非权威性信息;
- 204,no content,服务器成功处理了请求,但没有返回任何内容;
- 205,reset content,没有新内容返回,但是浏览器要清除表单域;
3XX,重定向类
- 300,multiple choices/多重选择,被请求的资源可以在多个地方找到,并返回列表供选择(如有首选项,则在location中指定);
- 301,moved permanently,请求永久重定向;
- 302,found,请求临时重定向;
- 304,not modified,客户端有缓存,可以直接使用;
- 305,use proxy,请求必须通过指定的代理才能被访问(location中指定);
4XX,客户端请求错误
- 400,bad request,客户端请求中有语法错误;
- 401,unauthorized,未授权,客户端请求需要身份验证;
- 403,forbidden,服务器拒绝该请求,权限不足等;
- 404,not found,服务器找不到该请求的任何资源;
- 405,method not allow,请求的方法不允许;
5XX,服务端错误
- 500,internal server error,服务器错误;
- 501,not implemented,服务端不支持请求中要求的功能;
- 502,bad gateway,网关错误,如:php-fpm挂了;
- 503,service unavailable,服务器在维护或已过载,无法处理请求;
- 504,gateway timeout,网关超时;
- 505,http version not supported,不支持该http版本;
http的缺点
- 窃听风险:黑客可以获取通信的内容;
- 篡改风险:黑客可以修改通信的内容;
- 冒充风险:黑客可以冒充他人身份参与通信;
https
http+ssl/tls
对称加密、非对称加密
对称加密效率更高,非对称加密更安全。
https工作流程
- 客户端发出https请求;
- 服务器返回ca证书(公钥、数字签名、相关信息等);
- 客户端验证证书;
- 客户端生成对称秘钥(随机字符串),用公钥加密,并发送服务器;
- 服务器用私钥解密,得到对称秘钥,然后用对称秘钥加密请求的返回内容;
- 客户端用对称秘钥解密返回内容,并处理;
- 后续请求都用该对称秘钥加密、解密通信内容。
https优点
- 解决窃听风险:通信内容加密;
- 解决篡改风险:具有校验机制,一旦被篡改,通信双方会立刻发现;
- 解决冒充风险:配备证书,防止身份被冒充;
https缺点
- ssl证书费用高,增加部署、维护的工作;
- https请求,握手次数增加,降低用户访问速度;
- http重定向到https,增加了用户的访问耗时;
- https涉及的安全算法会增加cpu资源的消耗;