HTTP-HTTPS-TCP/IP协议


1. HTTP协议

HTTP 协议, 是应用最广泛的一种网络协议,是无状态协议,是基于 TCP/IP 通信协议来传输数据。 客户机可以通过URL向HTTP服务端(服务器)发送请求,然后服务端响应该请求,之后关闭这个连接。

  • 支持客户/服务器模式
  • 简单快速
  • 灵活
  • 无连接
  • 无状态

无连接?

-> 含义是限制每次连接只处理一次请求。服务器处理完客户端请求,并收到客户端的应答之后,立即断开连接。以此可以节省传输时间

无状态?

-> HTTP协议即无状态协议,即协议对事务处理没有记忆能力,服务器无法区别是否已响应过用户的请求。 而++每次发送http请求时,客户端都要发起一个到服务端的TCP连接++,TCP的建立又涉及“三次握手”的过程。对于大流量的服务器来说这个过程的开销是十分大的。因此出现了“++短连接++”、“++长连接++” 的设计。

HTTP工作过程 ?

  1. 地址解析:浏览器从URL中解析出协议吗,主机名,端口,对象路径等,域名系统DNS解析域名得到主机IP地址
  2. 封装HTTP请求数据包:将以上部分结合本机自己的信息,打包成一个HTTP请求包
  3. 封装TCP包,建立TCP连接:发送HTTP请求数据包前,客户端需要通过网络与服务器建立连接,该连接是通过TCP来完成的,而TCP需要和IP来共同构建Internet(TCP/IP网络),即TCP/IP协议。构建成功之后才可以发起HTTP协议
  4. 建立连接后,客户机向服务端发起一个请求,格式为:URL,协议版本号,MIME信息,客户机信息等
  5. 服务器响应:响应信息包括,状态行,信息协议版本号,成功、错误的代码,MIME信息,服务器信息,实体信息等
  6. 服务器关闭TCP连接:通常,当服务器响应客户端返回数据时,它就要关闭TCP连接了

TCP 长短连接?

  • 短连接(Persistent Connection):客户机发送一个HTTP请求,会先发起一个TCP连接,待服务端响应请求之后,立即关闭TCP链接

  • 长连接(Keep-Alive) :客户机发送一个HTTP请求,发起一个TCP连接,服务端响应之后,保持TCP连接打开,在相同的客户机和服务器之间的后续请求和响应报文则通过相同的TCP连接来通信,不需要再次建立TCP

2. TCP/IP

  • 四层协议
C T
应用层 TELNET FTP HTTP SMTP DNS等
传输层 TCP UDP
网络层 IP ICMP ARP RARP
网络接口层 物理通信接口
  • 一个TCP的连接,需要经过“三次握手”才能建立起来。
    -> 主机A向主机B发送请求数据包(ACK=0,SYN=1,seq=x),主机B向主机A发送同意连接和要求同步(SYN=1,ACK=1,seq=x,ack=x+1),主机A在向主机B发送一个数据包确认B主机的同步要求(ACK=1,seq=x+1,ack=y+1)

  • A为什么会再确认一次呢,主要是为了防止已失效的连接请求报文段又突然传送给B,从而产生了错误

  • 为什么建立连接是三次握手,断开连接是四次握手? 因为当Server收到Client的SYN连接请求后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。 而断开连接时,当Server端收到FIN请求报文时,很可能不会立即关闭SOCKET,所以只能先回复一个ACK报文告诉Client已经收到了FIN报文,只有等Server端所有的数据都发送完了之后,才能发送FIN报文,因此需要四次握手

3. HTTPS

HTTPS = SSL/TLS + HTTP; 安全的一种HTTP传输协议。

  • Client 发起HTTPS请求时,在TCP连接建立的过程中,Server返回非对称加密公钥(证书)给Client,Client生成对称加密秘钥,并使用公钥进行加密,然后将加密的对称秘钥发送给Server。开始进行密文传输