网络协议
传输层的网络协议(tcp, udp)
TCP连接
- TCP 提供一种面向连接的、可靠的字节流服务
- 在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCP
- TCP 使用校验和,确认和重传机制来保证可靠传输
- TCP 给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复
- TCP 使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制
三次握手
- 客户端发起连接请求,自身变为SYN_SEND的状态
- 服务端接收到请求,发起确认连接的请求,自身SYN_RCVD状态
- 客户端发送确认包,服务端接收到,两个的状态都变成ESTABLISHED状态,握手结束
四次挥手
- 客户端发起请求,自身进入wait的状态
- 服务端接收到请求,自身进入close_wait的状态,告诉客户端,还没准备好,等一会
- 服务端再次发送请求,进入LAST_ACK状态
- 客户端接收到关闭请求,发送确认包,自己进入time_wait的状态。
- 服务端接收到确认包后,关闭连接;客户端等待一段时间后,没有收到服务端的ack包,关闭自己的连接
keep alive
TCP KeepAlive 的基本原理是,隔一段时间给连接对端发送一个探测包,如果收到对方回应的 ACK,则认为连接还是存活的,在超过一定重试次数之后还是没有收到对方的回应,则丢弃该 TCP 连接。
UDP连接
- 缺乏可靠性,只管发,不管客户端收到还是没有收到
- UDP是无连接状态的,发送数据不要经过创建连接的过程
- 广播和多播支持
网络层IP协议
- 为数据包选择路由
- IP实现两个基本功能:寻址和分段
- IP的责任就是把数据从源传送到目的地。它不负责保证传送可靠性,流控制,包顺序和其它对于主机到主机协议来说很普通的服务。
应用层的HTTP协议
- 建立tcp连接
- 客户端向服务端发送请求
- 客户端发送请求头信息,客户端发送其请求命令之后,还要以头信息的形式向服务器发送一些别的信息,之后客户端发送了一空白行来通知服务器,它已经结束了该头信息的发送
- 服务器应答,响应的第一部分是协议的版本号和响应状态码
- 服务器返回响应头信息
- 服务器向客户端发送数据
- 服务器关闭 TCP 连接,如果客户端或者服务器在其头信息加入了这行代码 Connection:keep-alive ,TCP 连接在发送后将仍然保持打开状态,于是,客户端可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
常用状态码解析
- 200 表示从客户端发来的请求在服务器端被正常处理了。
- 204 No Content, 一般在只需要从客户端向服务器端发送消息,而服务器端不需要向客户端发送新消息内容的情况下使用
- 301 Moved Permanently,永久性重定向。表示请求的资源已被分配了新的 URI。以后应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI 保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存
- 302 临时性重定向。表示请求的资源已被分配了新的 UR
- 400 Bad Request,表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
- 401 Unauthorized,表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息
- 403 Forbidden, 明对请求资源的访问被服务器拒绝了。服务器端没有必要给出详细的拒绝理由,当然也可以在响应报文的实体主体部分对原因进行描述
- 404 Not Found, 表明服务器上无法找到请求的资源。
- 500 nternal Server Error,表明服务器端在执行请求时发生了错误。也可能是 Web 应用存在的 bug 或某些临时的故障。
- 503 Service Unavailable,表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入 Retry-After 首部字段再返回给客户端。