网络协议分层
- TCP/IP四层模型
- **OSI 7层协议模型 **
TCP
三次握手目的及流程
- TCP Flags 8个
URG:紧急指针标志
ACK:确认序号标志(1:确认序号有效 0:报文不含确认信息)
PSH
RST:重置链接标志
SYN:同步序号,用于建立连接过程
FIN: finish标志 用于释放连接
目的:通过三次握手建立连接
流程:
第一次握手:建立连接时,客户端发送SYN包【seq=j】到服务器,并进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器通过监听LISTEN收到SYN包,必须确认客户的SYN(ack=j+1),同时自己发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK【ack=k+1】,此包发送完毕,客户端和服务端进入ESTABLISHED 状态,完成三次握手。
TCP四次挥手目的及流程
目的:终止连接
流程:
第一次挥手:Client发送一个FIN报文,来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态;
第二次挥手:Server收到FIN后,发动一个ACK包给Client,确认序列号为收到序号+1(ack=seq+1)(一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序列号为收到序列号+1(ack=seq+1),Server进入CLOSED状态,完成四次挥手。
TCP的滑动窗口
TCP使用滑动窗口做流量控制与乱序重排
- 保证TCP的可靠性
- 保证TCP的流控特性
UDP协议
特点:
- 面向非连接
- 不维护链接状态,支持同时向多个客户端传输相同的消息
- 数据包包头只有8个字节,额外开销小
- 吞吐量只受限于数据生成速率,传输速率以及机器性能
- 尽最大努力交付,不保证可靠交付,不需要维持复杂的连接状态表
- 面向报文,不对应用程序提交的报文信息进行拆分或者合并
TCP和UDP的区别
- 面向连接vs无连接
- 可靠vs不可靠
- 有序vs无序
- 慢vs快
- 重量级(头部20bit)vs轻量级(头部8bit)
Http协议
http状态码
- 1XX : 指示信息–表示请求已接收,继续处理
- 2XX: 请求成功
- 3XX : 重定向–要完成请求必须进行更进一步的操作
- 4XX: 客户端错误-- 请求有语法错误或请求无法实现
- 5XX : 服务端错误–服务器未能实现合法的请求
get和post请求的区别
- Http报文层面:get将请求信息放在URL中,post请求放在请求体中
get不安全,post安全
get最大提交3kb,post无限制 - 数据库层面: get符合幂等性和安全性,post不符合
- 其他层面:get可以被缓存,被存储,post不行