TCP6种标识符
- SYN(synchronous),建立联机
- ACK(acknowledgement),确认
- PSH(push),传输
- FIN(finish),结束
- RST(reset),重置
- URG(urgent),紧急
三次握手
-
发送数据的准备阶段,服务器要和浏览器进行三次交互(建立TCP连接)
- 第一次握手:客户端向服务端发送一个SYN包,进入SYN_SENT状态,等待服务器确认
- 第二次握手:服务端收到客户端请求后,给客户端发送一个ACK,同时发送SYN包,进入SYN_RECV状态
- 第三次握手:客户端收到服务器发送的ACK和SYN包后,向服务器发送ACK,客户端和服务器都进入ESTABLISED(TCP连接成功)状态
四次挥手
-
发送数据的结束阶段,服务器要和浏览器进行四次交互(断开TCP连接)
- 第一次挥手:客户端向服务器发送一个FIN包,关闭客户端到服务端的数据传输,客户端进入FIN_WAIT_1状态
- 第二次挥手:服务端收到客户端发送的FIN后,给客户端发送一个ACK,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态
- 第三次挥手:服务端发送一个FIN,关闭服务器到客户端的数据传输,服务器进入LAST_ACK状态
- 第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务端,确认序号为收到序号+1,服务器进入CLOSED状态
为什么建立是三次,断开是四次?
- 服务端在LISTEN状态下,收到建立请求的SYN报文后,把ACK和SYN放到一个报文里发送给了客户端,关闭连接时,当收到对方的FIN报文,仅仅表示对方不再发送数据,但是还能接收数据,所以服务端可以立即close,也可以继续发送数据,结束后再发送FIN报文来表示同意现在关闭连接,因此,服务端ACK和FIN一般会分开发送
HTTP 请求响应常见状态码
- 100~199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。
- 200~299:表示成功接收请求并已完成整个处理过程。常用200
- 300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(意味着你请求我,我让你去找别人),307和304(我不给你这个资源,自己拿缓存)
- 400~499:客户端的请求有错误,常用404(意味着你请求的资源在web服务器中没有)403(服务器拒绝访问,权限不够)
- 500~599:服务器端出现错误,常用500