了解 HTTP 协议

《图解 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. 服务端将请求结果返回
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,034评论 6 174
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,051评论 0 8
  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 5,941评论 1 13
  • 同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍。 一、 计算机网络体系结构分层 二、 TCP/IP 基础...
    涤生_Woo阅读 64,891评论 38 1,038
  • 目前做iOS开发以来,使用的都是HTTP协议,所幸现在接触到的东西还是之前的知识储备所能够应付的,正好趁着还没有入...
    猿鹿说阅读 671评论 0 2