HTTP相关知识回顾

1、网络模型

1.1 OSI七层网络模型

  • 物理层、数据链路层(MAC定位)、网络层(IP地址定义子网)、传输层(TCP/UDP)、会话层、表示层、应用层

1.2 TCP/IP四层网络模型

  • 链路层、网络层、传输层、应用层

链路层:将网络层的数据封装成以太网帧,包含源MAC地址与目标MAC地址,以太网采取广播的方式,将数据包发给子网内的所有主机,核对MAC地址,如果成功则接受数据,否则丢弃。
网络层:划分子网(IP协议),寻找目的主机(ARP协议),不同子网数据传输(路由协议)。

  • IP协议:IPV4划分子网,网络地址与子网掩码与运算得到网络地址,网络地址判断是否在同一个子网内。
  • ARP协议:源主机广播一个数据包,子网内的所有主机判断IP地址是否匹配,如果匹配,返回自己的MAC地址,并放入ARP缓存。
  • 路由协议:若在一个子网内通过ARP协议未找到主机,则通过路由协议,在与之相邻的子网内寻找。

传输层:定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议可以保证数据传输的可靠性。
TCP(面向连接、可靠)、UDP(速度快,效率高)

  • Tcp引入三次握手与四次挥手,做连接的建立与断开。
  • 三次握手:client发送seq = x(序列号)与SYN(请求建立连接包),之后客户端进入SYN-SENT状态,server收到客户端的连接建立请求后,返回SYN=1,ack= x+1,同时返回seq = y,ACK=1,服务端进入SYN-RCVD。(其中SYN = 1表示建立连接,ACK=1的条件下才表示ack = x+1有效),客户端收到服务端返回的数据后,返回ACK=1,ack=y+1,seq=x+1。客户端进入ESTAB-LISHED,服务端收到客户端的响应包后,也进入ESTAB-LISHED状态。第一二次握手:客户端确认建立连接,第二三次握手:服务端确认建立连接。
  • 四次挥手:第一次挥手:客户端发送FIN=1,seq=u,表示客户端没有数据再传给服务端,客户端进入FIN-WAIT-1状态,服务端收到数据后,由于可能还有数据要传给客户端,不能结束连接,所以只返回一个应答包给客户端,表示收到客户端的断开连接请求。第二次挥手:server返回ACK=1,ack=u+1,seq=m,表示收到请求包,服务端进入:CLOSE-WAIT状态,当客户端收到响应包后进入:FIN-WAIT-2状态,之后,服务端继续将未传完的数据传给客户端。传完之后。第三次挥手:server返回FIN=1,ACK=1,seq=w,ack=u+1,服务端进入:LAST_ACK状态,客户端接受响应。第四次挥手:客户端发送ACK=1,ack=w+1,seq=u+1。客户端进入TIME-WAIT状态,服务端接收到数据后断开连接,客户端经过2MSL后断开(客户端防止最后一个应答包响应失败)。由于TCP全双工模式,所以断开连接时:第一二次挥手客户端确认没有数据传送给服务端。但是要让服务端把数据响应完,第三四次挥手,服务端确保没有数据响应,并确保服务端断开连接成功。
  • TCP协议通过滑动窗口和拥塞控制来控制传输速率。
    滑动窗口:接收方告诉发送发自己的窗口大小,从而控制发送方的发送速度。发送方发送1-8这些字节给接收方,接收方响应ACK表示要传第几个字节,同时返回接收方窗口大小n,表示,发送方下次传数据不能超过的范围。ACK序号之前的字节表示都已经响应过,则滑动窗口右移。
    拥塞控制:慢开始、拥塞避免、快重传、快恢复。慢开始:从1开始,每次扩大两倍。拥塞避免:超过慢开始门限后每次+1,发生超时响应,门限减半,传输速度从1开始。
    快重传:接收到失序的报文段后立即发出重复确认,当连续收到三个重复确认时,慢开始门限减半,传输速度=慢开始门限进行传输。

应用层:定义各种各样的协议来规范数据格式,常见HTTP(超文本)、FTP(文件)、SMTP(简单邮件)

2、HTTP协议

2.1 HTTP协议简介

  • HTTP协议(超文本传输协议),基于TCP/IP通信协议来传递数据,在这之上可以封装HTTPS,HTTP协议目前包含1.0、1.1、2.0版本。

2.2 HTTP协议特点

  • 快速简单,通过请求方法(get、post、head)+路径即可与服务器通信。
  • 灵活:允许传输任意对象,Content-Type用来标记当前传输的对象,Accept表示能接收的对象。
  • 无状态:没有事物处理记忆能力,后序请求需要前面的信息,则必须重传。

2.3 HTTP报文结构

请求报文:

  • 请求行:请求方法+请求URI+空格+HTTP版本+回车
  • 请求头:如accept:xx,cache-control:xx,content-type:xx。
  • 请求体:可不传

响应报文:

  • 响应行:报文版本,状态码和描述
  • 响应头:多个属性组成
  • 响应体:可不传

2.4 HTTP各个版本区别

HTTP1.0
1、Content-Type:声明自己传递数据的类型。
2、Accept:声明自己接受数据的类型。
3、Content-Encoding:数据压缩算法。
4、Accept-Encoding:自己接受那些压缩算法。
HTTP1.1
1、Connection:keep-alive:持久连接
2、管道机制:一个TCP连接里,可以发多个请求,按请求顺序返回。
3、Content-Length:指定回传的数据包大小,不同请求做区分。
4、新增:PUT、OPTIONS、DELETE、PATCH、HEAD方法。
5、HOST:将请求发往同一台服务器的不同网站,虚拟主机。
HTTP2.0
1、多工:在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了"队头堵塞"。
2、数据流:标记数据流ID,区分属于哪一个数据流。
3、头信息压缩:头信息使用gzip或compress压缩后再发送,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号。
4、 服务器推送:server可以向client推送数据,比如访问HTML,推回对应的CSS与JS。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章