架构师之路计算机网络iOS之框架架构

了解 HTTP 协议

2018-03-13  本文已影响253人  要上班的斌哥

《图解 HTTP》 读书笔记

HTTP 在哪里

网络设备之间,包括计算机与网络设备之间要互相通信,那么双方必须要基于相同的协议。如何探测到通信目标,如何发起通信,怎么传递通信信息,怎么样结束通信等这些规则要事先约定,这些规则称为协议(protocol)。

我们通常使用的网络是在 TCP/IP 协议族的基础上运作的,而 HTTP 属于它的一个子集。


TCP/IP 是互联网相关的各类协议族的总称

TCP/IP 分层

TCP/IP 协议族按层次划分可以分为 4 个层次,分别是应用层、传输层、网络层和数据链路层。

  1. 应用层决定了向用户提供应用服务时通信的活动。TCP/IP 协议族里面有不少应用服务,比如 FTP (File Transfer Protocol,文件传输协议)和 DNS (Domain Name System,域名服务系统),HTTP 协议也是在应用层。
  2. 传输层位于应用层之下,提供处于网络连接中的两台网络设备之间的数据传输。传输层有 2 个常见的协议, TCP (Transmission Control Protocol,传输控制协议)和 UDP (User Data Protocol,用户数据报协议)。
  3. 网络层用来处理网络上流动的数据包。数据包是网络传输的最小数据单位,该层规定了数据包通过怎么样的传输路线到达对方。通常情况下 2 台计算机之间会有数量不定的各类网络设备或者计算机,网络层的作用就是在众多传输路径中选择一条合适的传输线路。
  4. 链路层用来处理了解网络的硬件部分。包括硬件的设备驱动,网卡,光纤及连接器等一切传输媒介。

把 TCP/IP 分层是有好处的,各层之间的接口部分规划好之后,每个层次的内部设计可以自由变动而无需考虑上层和下层的任务。处理应用层上的应用只需考虑应用层面的问题,而无需考虑下层的 TCP 协议或者 UDP 协议,也无需考虑数据包是如何到达对方,更无需考虑网络的硬件部分构成。

TCP/IP 通信传输流

TCP/IP 通信传输流

利用 TCP/IP 协议族进行通信时,会通过分层结构与对方通信。对于发送端从应用层向下走到网络层,对于接收端则从网络层向上走到应用层。

HTTP 请求
以应用层的 HTTP 协议为例,客户端在应用层首先发出一个查看 www.baidu.com Web 页面的 HTTP 请求。接着到了传输层,TCP 协议从应用层处收到的HTTP报文进行分割,并在各个分割的报文加上传输层相关的 TCP 首部后转发给网络层。在网络层,给报文加上网络层相关的 IP 首部后转发给链路层,最后链路层给报文添加上以太网首部,并发送数据包。流程如上图左边部分所示。
接收端的服务器在链路层接收到数据之后,数据按序往上层发送,直到应用层。当接收端的应用层收到数据的时候,服务器才算真正接收到客户端发送的 HTTP 请求。流程如上图右边部分所示。
发送端在层与层之间传输数据时,每经过一层都会被加上属于该层的首部信息。接收端在层与层之间传输数据时,每经过一层都会把该层对应的首部去掉。

IP 协议

  1. IP 协议。IP (Internet Protocol)协议位于网络层,IP 协议的作用是把各种数据包传送给对方。为了保证数据包的正常传输,IP 协议规定了 2 个重要的条件,一个是 IP 地址,一个是 MAC 地址(Media Access Control Address)。IP 地址指明了网络节点被分配到的地址,MAC 地址则是网卡的固定地址。IP 地址可以变换,MAC 地址则是烧录在硬件里面,通常情况下无法更改。
  1. ARP 协议。网络上的通信依赖于设备的 MAC 地址,网络上通信的双方不可能在通信开始前都彼此了解双方的 MAC 地址,但是通信的发送端肯定是了解接收方的 IP 地址。为了解决获取通信接收方的MAC 地址这个问题,网络设计人员设计了一个 ARP 协议(Address Resolution Protocol),这个 ARP 协议可以根据通信方的 IP 地址查出对应的 MAC 地址。
  1. routing 机制。网络传输线路千变万化,没有人能够全面掌握网络中的实时传输状况。为了能够让参与传输过程的计算机,路由器等网络设备粗略的了解传输线路。设计人员设计了一个叫做路由(routing)的机制。就像快递公司的送货过程,寄快递的人只要将自己的货物送到快递集散中心,就可以知道快递公司是否肯收件发货,该快递集散中心检查货物的地址,明确下一站该送往哪个区域的集散中心。接着,下一站的集散中心自己会判断货物的下一个线路。
发送数据包

如上图所示。发送端想往 IP 地址为 192.0.43.10 的地方发送数据包,步骤如下。

  1. 使用 ARP 协议解析出该 IP 地址对应的 MAC 地址。
  2. 将数据包发送给路由器,路由器根据 routing 机制转发数据包
  3. IP 地址为 192.0.43.10 的设备收到数据包

TCP 协议

按 TCP/IP 分层结构来看,TCP 协议位于传输层。设计人员设计 TCP 协议是为了在不可靠网络中,提供可靠字节流传输服务。TCP 协议为了更容易传输大数据将大数据分割成以报文段(segment)为单位的数据包进行管理,而且TCP 在数据包发送出去之后,会向对方确认是否成功送达。为了确保数据能够到达目标, TCP 协议设计了三次握手策略(three-way handshaking),除了三次握手之外,TCP 协议还有其他的各种手段来保证通行的可靠性。


三次握手策略
  1. 发送端首先发送一个带 SYN 标志的数据包给对方
  2. 接收端收到后,回传一个带有 SYN/ACK 的数据包表示数据包确认收到。
  3. 发送端收到 SYN/ACK 之后,再发送一个带 ACK 标志的数据包。
  4. 握手结束

DNS 服务

用户通常使用域名来访问一些提供服务的服务器,而不是直接通过 IP 地址。比如,我们要访问百度的主页,通常情况下我们会使用域名而不是 IP 来访问。设计人员为这个使用情景设计了一个 DNS 服务(Domain Name Server),DNS 提供了域名到 IP 地址之间的解析服务。

DNS 服务
  1. 发送端想访问 www.hackr.jp 这个网页
  2. 发送端使用 DNS 来查询 www.hackr.jp 的 IP 地址
  3. 发送端取得 IP 地址之后,发起请求

HTTP 请求的基本流程

HTTP 与以上提到的几个协议的关系可以用下面这张图来概括。


HTTP 协议与其他协议关系
  1. 客户端想浏览 http://hackr.jp/xss/ 这个 web 页面
  2. 客户端使用 DNS 服务获取域名 hackr.jp 对应的 IP 地址
  3. 客户端利用应用层 HTTP 协议发起 HTTP 请求
  4. 客户端利用传输层 TCP 协议将 HTTP 请求报文分割成报文段,添加 TCP 头部信息
  5. 网络层利用 IP 协议和 Routing 机制传送数据包
  6. 服务端传输层的 TCP 协议重组请求报文
  7. 服务端应用层的 HTTP 协议处理客户端请求
  8. 服务端将请求结果返回
上一篇 下一篇

猜你喜欢

热点阅读