计算机网络(基于图解HTTP)学习笔记——Day01

计算机网络(基于图解Http)

1、了解Web及网络基础

1.1、使用Http协议访问Web

根据 Web 浏览器地址栏中指定的 URL,Web 浏览器从 Web 服务器端获取文件资源(resource)等信 息,从而显示出 Web 页面。如图所示:

客户端:像这种通过发送请求获取服务器资源的web浏览器等。都可称之为客户端(client)。

服务器端:提供响应资源给Web浏览器的一端,称之为服务器端。

Web 使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。也就是说,Web是建立在HTTP协议上通信的。

1.2、HTTP的诞生

由CERN(欧洲核子研究组织)的蒂姆 • 伯纳斯 - 李(Tim BernersLee) 博士提出了一种能让远隔两地的研究者们共享知识的设想。最初的理念是:借助多文档之间相互关联形成的超文本 (HyperText),连成可相互参阅的 WWW(World Wide Web,万维网)。

WWW:以前是Web浏览器用来浏览超文本的客户端应用程序的名称。现在用来表示这一系列的集合,也可简称为Web。

现在已经提出的三项WWW构建技术:

  • 把 SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标记语言的 HTML(HyperText Markup Language,超文本标记语言)。

  • 作为文档传递协议的 HTTP。

  • 指定文档所在地址的 URL(Uniform Resource Locator,统一资源定位符)。

1.3、网络基础TCP/IP

我们通常使用的网络基本上都是基于TCP/IP协议族的基础上运行的。而HTTP则是属于它内部的一个子集。

1.3.1、TCP/IP协议族

协议(protocol):不同的硬件、操作系统之 间的通信,所有的这一切都需要一种规则。我们把这一种规则统称为协议。

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

把与互联网相关联的协议集合起来总称为 TCP/IP。也有说法 认为,TCP/IP 是指 TCP 和 IP 这两种协议。还有一种说法认为,TCP/ IP 是在 IP 协议的通信过程中,使用到的协议族的统称。

1.3.2、TCP/IP的分层管理

TCP/IP 协议族按层次分别分:应用层、传输层、网络层和数据链路层。

分层的优点好处:

  • 把各层之间的接口部分规划好之 后,每个层次内部的设计就能够自由改动了。

  • 设计变的更为简单。

各层的作用如下:

应用层:层决定了向用户提供应用服务时通信的活动。

TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP(File Transfer Protocol,文件传输协议)和 DNS(Domain Name System,域 名系统)服务就是其中两类。 HTTP 协议也处于该层。

传输层:对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。

在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报协议)。

网络层(网络互连层):用来处理在网络上流动的数据包。

数据包是网络传输的最小数 据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计 算机,并把数据包传送给对方。 与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所 起的作用就是在众多的选项内选择一条传输路线。

链路层(数据链路层,网络接口层):用来处理连接网络的硬件部分。

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

1.3.3、TCP/IP通信传输流

 

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

首先作为发送端的客户端在应用层 (HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求。 接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的数 据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端 口号后转发给网络层。 在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链 路层。这样一来,发往网络的通信请求就准备齐全了。 接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用 层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP 请求。

 

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该 层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层 时会把对应的首部消去。 这种把数据信息包装起来的做法称为封装(encapsulate)。

1.4、与 HTTP 关系密切的协议 : IP、TCP 和 DNS

1.4.1、负责传输的IP协议

IP(Internet Protocol)网际协议位于网络层。几乎所有使用网络的系统都会用到 IP 协议。

IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方 那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)。

IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定 地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改。

ARP协议

ARP 是一种用以解析地址的协议,根据通信方 的 IP 地址就可以反查出对应的 MAC 地址。IP 间的通信依赖 MAC 地址。在网络上,通信的双方在同一局域网 (LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转 才能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。

路由选择

没有人能够全面掌握互联网中的传输状况 在到达通信目标前的中转过程中,那些计算机和路由器等网络设备只 能获悉很粗略的传输路线。 这种机制称为路由选择(routing)。

例:有点像快递公司的送货过程,想要寄快递的人,只要将自己的货物送到集散中心,就可以知道快递公司是否肯收件发货,该快递公司的集散中心检查货物的送达地址,明确下站该送往哪个区域的集散中心。接着,那个区域的集散中心自会判断是否能送到对方的家中。

 

1.4.2 确保可靠性的 TCP 协议

TCP 位于传输层,提供可靠的字节流服务。

所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大 块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。

TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。 确保数据能到达目标为了准确无误地将数据送达目标处,TCP 协议采用了三次握手 (three-way handshaking)策略。用 TCP 协议把数据包送出去后,TCP 不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize) 和 ACK(acknowledgement)。

发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后, 回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发 送端再回传一个带 ACK 标志的数据包,代表“握手”结束。 若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发 送相同的数据包。

 

当然,除了上述三次握手,TCP 协议还有其他各种手段来保证通信的可靠性。

1.4.3、负责域名解析的 DNS 服务

DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。

DNS 协议提供通过域名 查找 IP 地址,或逆向从 IP 地址反查域名的服务。如图所示:

 

1.5、各种协议与HTTP协议的关系

通过这张图来了解下 IP 协议、TCP 协议和 DNS 服务在使用 HTTP 协议的通信过程中各自发挥了哪些作用。

 

1.6、URI 和 URL

URI( Uniform Resource Identifier):统一资源标识符

URL(Uniform Resource Locator):统一资源定位符

1.6.1、URI统一资源标识符

Uniform 规定统一的格式可方便处理多种不同类型的资源,而不用根据上下文 环境来识别资源指定的访问方式。另外,加入新增的协议方案(如 http: 或 ftp:)也更容易。

Resource 资源的定义是“可标识的任何东西”。除了文档文件、图像或服务(例 如当天的天气预报)等能够区别于其他类型的,全都可作为资源。另 外,资源不仅可以是单一的,也可以是多数的集合体。

Identifier 表示可标识的对象。也称为标识符。

综上所述,URI 就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。

URI 用字符串标识某一互联网资源,而 URL表示资源的地点(互联网上所处的位置)。可见 URL是 URI 的子集。

1.6.2、URI格式

 

使用 http: 或 https: 等协议方案名获取访问资源时要指定协议类型。不 区分字母大小写,最后附一个冒号(:)。 也可使用 data: 或 javascript: 这类指定数据或脚本程序的方案名。

登录信息(认证):指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份 认证)。此项是可选项。

服务器地址:使用绝对 URI 必须指定待访问的服务器地址。地址可以是类似 hackr.jp 这种 DNS 可解析的名称,或是 192.168.1.1 这类 IPv4 地址 名,还可以是 [0:0:0:0:0:0:0:1] 这样用方括号括起来的 IPv6 地址名。

服务器端口号:指定服务器连接的网络端口号。此项也是可选项,若用户省略则自动 使用默认端口号。

带层次的文件路径:指定服务器上的文件路径来定位特指的资源。这与 UNIX 系统的文件 目录结构相似。

查询字符串:针对已指定的文件路径内的资源,可以使用查询字符串传入任意参 数。此项可选。

片段标识符:使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个 位置)。但在 RFC 中并没有明确规定其使用方法。该项也为可选项。

2、简单的HTTP协议

2.1、HTTP 协议用于客户端和服务器端之间 的通信

HTTP协议主要用于客户端和服务器之间的通信。

请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一 端称为服务器端。

在两台计算机之间使用 HTTP 协议通信时,在一条通信线路上必定有 一端是客户端,另一端则是服务器端。有时候,按实际情况,两台计算机作为客户端和服务器端的角色有可 能会互换。但就仅从一条通信路线来说,服务器端和客户端的角色是 确定的,而用 HTTP 协议能够明确区分哪端是客户端,哪端是服务器端。

2.2、通过请求和响应的交换达成通信

HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。

请求必定先有客户端发出,服务器在没有收到请求之前不会发出响应

 

2.3、HTTP 是不保存状态的协议

HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议自 身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理。主要是为了更快的处理大量的事务,确保协议的可伸缩性。

HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了 Cookie 技术进行管理缓存。有了Cookie 再用 HTTP 协议通信,就可以管理状态了。

2.4、请求URI定位资源

HTTP 协议使用 URI 定位互联网上的资源。正是因为 URI 的特定功 能,在互联网上任意位置的资源都能访问到。

当客户端请求访问资源而发送请求时,URI 需要将作为请求报文中的 请求 URI 包含在内。指定请求 URI 的方式有很多。

除此之外,如果不是访问特定资源而是对服务器本身发起请求,可以 用一个 * 来代替请求 URI。

 

2.5 告知服务器意图的 HTTP 方法

GET方法: 获取资源。用来请求访问已被 URI 识别的资源。指定的资源经服务器 端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保 持原样返回;如果是像 CGI(Common Gateway Interface,通用网关接 口)那样的程序,则返回经过执行后的输出结果。

POST方法: 传输实体主体。用来传输实体的主体。 虽然用 GET 方法也可以传输实体的主体,但一般不用 GET 方法进行 传输,而是用 POST 方法。虽说 POST 的功能与 GET 很相似,但 POST 的主要目的并不是获取响应的主体内容。

PUT方法:传输文件。用来传输文件。就像 FTP 协议的文件上传一样,要求在请 求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置。但是,鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人都可以 上传文件 , 存在安全性问题,因此一般的 Web 网站不使用该方法。若 配合 Web 应用程序的验证机制,或架构设计采用 REST(REpresentational State Transfer,表征状态转移)标准的同类 Web 网站,就可能会开放使用 PUT 方法。

HEAD:获得报文首部。HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认 URI 的有效性及资源更新的日期时间等。

DELETE:删除文件。用来删除文件,是与 PUT 相反的方法。DELETE 方法按 请求 URI 删除指定的资源。但是,HTTP/1.1 的 DELETE 方法本身和 PUT 方法一样不带验证机 制,所以一般的 Web 网站也不使用 DELETE 方法。当配合 Web 应用 程序的验证机制,或遵守 REST 标准时还是有可能会开放使用的。

OPTIONS:询问支持的方法。用来查询针对请求 URI 指定的资源支持的方法。

TRACE:追踪路径。TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方 法。客户端通过 TRACE 方法可以查询发送出去的请求是怎样被加工修改 / 篡改的。这是因为,请求想要连接到源目标服务器可能会通过代理 中转,TRACE 方法就是用来确认连接过程中发生的一系列操作。 但是,TRACE 方法本来就不怎么常用,再加上它容易引发 XST(Cross-Site Tracing,跨站追踪)攻击,通常就更不会用到了。

CONNECT:要求用隧道协议连接代理。CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协 议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接 层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容 加 密后经网络隧道传输。

CONNECT 方法的格式: CONNECT 代理服务器名:端口号 HTTP版本

2.6 使用方法下达命令

方法的作用在于,可以指定请求的资源按期望产生某种行为。方法中 有 GET、POST 和 HEAD 等。

方法名区分大 小写,注意要用大写字母。

 

其中LINK 和 UNLINK 已被 HTTP/1.1 废弃,不再支持。

2.7 持久连接节省通信量

HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接。

 

2.7.1 持久连接

持久连接的特点是,只要任意一端 没有明确提出断开连接,则保持 TCP 连接状态。

 

持久连接旨在建立 1 次 TCP 连接后进行多次请求和响应的交互。

持久连接的好处:

  • 减少了 TCP 连接的重复建立和断开所造成的额 外开销,减轻了服务器端的负载。

  • 减少开销的那部分时间,使 HTTP 请求和响应能够更早地结束,这样 Web 页面的显示速度也就相 应提高了。

2.7.2 管线化

持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从 前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。

 

2.8 使用 Cookie 的状态管理

HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。这样做可以减少服务器的 CPU 及内存资源的消耗。

为了保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入 了 Cookie 技术。Cookie 技术通过在请求和响应报文中写入 Cookie 信 息来控制客户端的状态。Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的 首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器 发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出 去。 服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一 个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前 的状态信息。

  • 没有Cookie信息状态下的请求 

 

 

  • 第二次以后(存有Cookie信息状态)的请求

上图展示了发生 Cookie 交互的情景,HTTP 请求报文和响应报文的内容如下。

  1. 请求报文(没有 Cookie 信息的状态)

 GET /reader/ HTTP/1.1 
 Host: hackr.jp 
 *首部字段内没有Cookie的相关信息
  1. 响应报文(服务器端生成 Cookie 信息)

 HTTP/1.1 200 OK
 Date: Thu, 12 Jul 2012 07:12:20 GMT
 Server: Apache
 <Set-Cookie: sid=1342077140226724; path=/; expires=Wed, 10-Oct-12 07:12:20 GMT>
 Content-Type: text/plain; charset=UTF-8 

3.请求报文(自动发送保存着的 Cookie 信息)

  GET /image/ HTTP/1.1
  Host: hackr.jp
  Cookie: sid=1342077140226724

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值