从TCP/IP看HTTP

217 阅读4分钟

大话HTTP协议

HTTP是构建在TCP/IP协议之上的,是TCP/IP协议的一个自己

  • TCP/IP协议是一系列与互联网相关联的协议集合起来的总称。
  • 分层管理是TCP/IP协议的重要特征

TCP的四层协议

  1. 应用层(HTTP)

    应用层一般是我们编写的应用程序,决定了向用户提供的应用服务。通过系统调用与传输层进行通信。

    如FTP、DNS、HTTP等

  2. 传输层(TCP)

    通过系统调用向应用层提供处于网络连接中的两台计算机之间的数据传输功能。

    在传输层有两个性质不同的协议:TCP(面向连接),UDP(面向无连接)。这就决定了TCP虽然可靠,但需要建立连接导致效率低,UDP则反之。

  3. 网络层(IP)

    网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。盖层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传输给对方。

  4. 数据链路层(网络)

    链路层用来处理连接网络的硬件部分,包括控制操作系统、硬件设备驱动、NIC(Network Interface Card,网络适配器)以及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。

数据包的封装过程

IMG 2189(20200702 234117)

上层协议通过封装沿着协议栈从上往下进行传递

每层协议都会在上层协议的基础上加上自己的头部信息,链路层还会加上尾部信息,以此实现数据封装,最终为到达网络提供所有的数据信息

HTTP数据传输过程

IMG 2190(20200703 001907)

发送端:从上至下,在报文上打上头部信息(标记序号、端口号)

接收端:从下至上,删除下层的头部信息

传输层——TCP三次握手

使用TCP协议进行通信的双方必须先建立连接,然后才能开始传输数据。为了确保连接双方可靠性,在双方建立连接时,TCP协议采用了三次握手策略。

IMG 2191(20200703 112433)

  • 第一次握手

    客户端发送带有SYN标志(同步序列编号)的连接请求报文段,然后进入SYN_SEND状态,等待服务端的确认。

  • 第二次握手

    服务端接收到客户端的SYN报文段后,需要发送ACK信息(确认字符)对这个SYN报文段进行确认。同时,还要发送自己的SYN请求信息。

    服务端会将上述的信息放到一个报文段(SYN+ACK报文段)中,一并发给客户端,此时服务端将会进入SYN_RECV状态

  • 第三次握手

    客户端接收到服务端的SYN+ACK报文段后,会向服务端发送ACK确认报文段,这个报文段发送完毕后,客户端和服务端都进入ESTABLISHED状态,完成TCP三次握手。

三次握手的必要性

客户端和服务端进行连接通信,需要确认自己和对方的收发能力都是正常的。

想要建立连接,最少需要三次握手。

DNS

访问一个网站,使用的是主机名或者域名来进行访问,因为相对IP地址,域名更容易让人记住。但是TCP/IP协议使用的是IP地址进行访问的,所以由DNS提供域名到IP地址之间的解析服务。

访问网站的过程:

  • 输入域名,发送给DNS服务器
  • 返回该域名的IP地址给客户端
  • 请求该IP地址的WEB服务器

DNS解析层次

就近原则

本地电脑会将经常使用的域名和响应的IP的地址建立一个映射关系,并保存到系统文件当中。

  1. 在进行DNS解析时,系统会优先在本机HOST文件中查找对应的IP地址
  2. 若没找到,在本地的DNS服务器(8.8.8.8/114.114.114.114)中继续查找对应的IP地址
  3. 若没找到,本地的DNS服务器会一层一层地向上层DNS服务器发送请求,直到DNS根服务器,找到的话再进行回传,返回给浏览器

回溯HTTP事务处理过程

  1. 通过DNS服务查询到域名的IP地址
  2. 浏览器生成HTTP请求通过TCP/IP协议发送给web服务器
  3. web服务器根据请求生成响应内容,并通过TCP/IP协议返回给客户端