网络协议

网络协议

传输层的网络协议(tcp, udp)

TCP连接

  • TCP 提供一种面向连接的、可靠的字节流服务
  • 在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCP
  • TCP 使用校验和,确认和重传机制来保证可靠传输
  • TCP 给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复
  • TCP 使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制

三次握手

  1. 客户端发起连接请求,自身变为SYN_SEND的状态
  2. 服务端接收到请求,发起确认连接的请求,自身SYN_RCVD状态
  3. 客户端发送确认包,服务端接收到,两个的状态都变成ESTABLISHED状态,握手结束

四次挥手

  1. 客户端发起请求,自身进入wait的状态
  2. 服务端接收到请求,自身进入close_wait的状态,告诉客户端,还没准备好,等一会
  3. 服务端再次发送请求,进入LAST_ACK状态
  4. 客户端接收到关闭请求,发送确认包,自己进入time_wait的状态。
  5. 服务端接收到确认包后,关闭连接;客户端等待一段时间后,没有收到服务端的ack包,关闭自己的连接

keep alive

TCP KeepAlive 的基本原理是,隔一段时间给连接对端发送一个探测包,如果收到对方回应的 ACK,则认为连接还是存活的,在超过一定重试次数之后还是没有收到对方的回应,则丢弃该 TCP 连接。

UDP连接

  • 缺乏可靠性,只管发,不管客户端收到还是没有收到
  • UDP是无连接状态的,发送数据不要经过创建连接的过程
  • 广播和多播支持

网络层IP协议

  • 为数据包选择路由
  • IP实现两个基本功能:寻址和分段
  • IP的责任就是把数据从源传送到目的地。它不负责保证传送可靠性,流控制,包顺序和其它对于主机到主机协议来说很普通的服务。

应用层的HTTP协议

  1. 建立tcp连接
  2. 客户端向服务端发送请求
  3. 客户端发送请求头信息,客户端发送其请求命令之后,还要以头信息的形式向服务器发送一些别的信息,之后客户端发送了一空白行来通知服务器,它已经结束了该头信息的发送
  4. 服务器应答,响应的第一部分是协议的版本号和响应状态码
  5. 服务器返回响应头信息
  6. 服务器向客户端发送数据
  7. 服务器关闭 TCP 连接,如果客户端或者服务器在其头信息加入了这行代码 Connection:keep-alive ,TCP 连接在发送后将仍然保持打开状态,于是,客户端可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

常用状态码解析

  1. 200 表示从客户端发来的请求在服务器端被正常处理了。
  2. 204 No Content, 一般在只需要从客户端向服务器端发送消息,而服务器端不需要向客户端发送新消息内容的情况下使用
  3. 301 Moved Permanently,永久性重定向。表示请求的资源已被分配了新的 URI。以后应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI 保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存
  4. 302 临时性重定向。表示请求的资源已被分配了新的 UR
  5. 400 Bad Request,表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
  6. 401 Unauthorized,表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息
  7. 403 Forbidden, 明对请求资源的访问被服务器拒绝了。服务器端没有必要给出详细的拒绝理由,当然也可以在响应报文的实体主体部分对原因进行描述
  8. 404 Not Found, 表明服务器上无法找到请求的资源。
  9. 500 nternal Server Error,表明服务器端在执行请求时发生了错误。也可能是 Web 应用存在的 bug 或某些临时的故障。
  10. 503 Service Unavailable,表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入 Retry-After 首部字段再返回给客户端。

大致流程图