天天看点

TCP/IP协议族与HTTP相关的协议、方法

《图解HTTP》——chaptor1、2

一、TCP/IP协议族:

  1. 应用层:决定了向用户提供应用服务时通信的活动。预存了各类通用的应用服务,例如FTP(File Transfer Protocol,文件传输协议)和DNS(Domain Name System,域名系统),HTTP(Hyper Text Transfer Protocol,超文本传输协议)协议也处于该层。
  1. 传输层:传输层对上层应用层提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和UDP(User Data Protocol,用户数据报协议)。
  2. 网络层:处理在网路上流动的数据包,数据包是网络传输的最小数据单位。该层定义了通过怎样的路径(所谓的传输路线)到达对方的计算机,并把数据包传给对方。与多台计算机或者网络设备传输时,网络层的的作用是在众多的选项中选择一条传输路线。
  3. 数据链路层:处理连接网络的硬件部分。包括硬盘的设备驱动、NIC(Network Interface Card,网络适配器,即网卡)、光纤等一切传输媒介。硬件上的范畴均在链路层的作用范围之内。
TCP/IP协议族与HTTP相关的协议、方法

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

用HTTP举例,首先作为发送端的客户端在应用层发出请求访问某个Web页面的HTTP请求。接着,为了传输方便,在传输层把从应用层接收到的数据进行分割,并在各个报文打上标记序号及端口号后转发给网络层。在网络层增加作为通信目的地的MAC地址(Media Access Control Address)后转发给数据链路层。

接收端的服务器在数据链路层收到数据,按分层顺序往上传输,当传输到应用层,才算真正接收到由客户端发送过来的HTTP请求。

TCP/IP协议族与HTTP相关的协议、方法

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

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

1)IP

按层次分,IP(Internet Protocol,国际协议)位于网络层,作用是将各种数据包传送给对方,要确保数据准确无误的传输,其中两个重要的条件是IP地址和MAC地址。

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

使用ARP协议(Address Resolution Protocol)凭借MAC地址进行通信

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

没有人能全面掌握互联网中的传输状况

在到达通信目标前的中转过程中,那些计算机和路由器等网络设备只能获悉很粗略的传输路线。这种机制被称为路由选择。

TCP/IP协议族与HTTP相关的协议、方法

2)TCP

按层次分,TCP位于传输层,提供可靠的字节流服务。所谓的字节流服务是指为了方便传输将大块数据分割成以报文段为单位的数据包进行管理。而可靠的服务是指能够将数据准确可靠的传输给对方。

确保数据能到达目标

TCP协议采用三次握手(three-wayhandshaking)策略保证数据准确无误的传输。用TCP把数据包发送出去后,TCP不会对发送出去的数据包置之不理,它一定会向对方确认数据包是否成功送达。握手过程中使用TCP的标志——SYN(synchronize)和ACK(acknowledgement)。

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

TCP/IP协议族与HTTP相关的协议、方法

3)DNS

DNS(Domain Name System)服务是和HTTP协议一样处于应用层的协议。它提供域名到IP地址之间的解析服务。DNS既可以通过域名查找IP地址,也可以逆向从IP地址反查域名。

TCP/IP协议族与HTTP相关的协议、方法

三、URI和URL

与URI(统一资源标识符)相比,我们更熟悉URL(Uniform Resource Locator,统一资源定位符)。URL正是使用Web浏览器等访问Web页面时需要输入的网页地址。

URI是Uniform Resource identifier的缩写。RFC2396分别对这三个单词进行了如下定义:

  1. Uniform:规定统一的格式可方便处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。另外,加入新增的协议方案(http:或ftp:)也更容易。
  2. Resource:资源的定义是“可识别的任何东西”。不仅文档文件,图像或服务等其他所有能区别于其他类型的,都可作为资源。另外,资源不仅可以是单一的,也可以是多数的集合。
  3. Identifier:表示可标识的对象,也称为标识符。

综上所述,URI就是由某个协议方案表示的资源的定位资源符。协议方案是指访问资源时使用的协议类型名。标准的URI协议有30种左右,由隶属于国际互联网资源管理的非营利社团ICANN的IANA管理颁布。

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

四、HTTP协议

HTTP协议和TCP/IP协议族内的其他众多协议相同,用于客户端和服务端的通信。请求访问资源的一端称为客户端,提供资源响应的一端称为服务器。

1)请求与响应

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

TCP/IP协议族与HTTP相关的协议、方法

请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。接收到请求的服务器会将请求内容的处理结果以响应的形式返回。

TCP/IP协议族与HTTP相关的协议、方法

响应报文基本由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。

TCP/IP协议族与HTTP相关的协议、方法

2)不保存状态的HTTP协议

HTTP协议自身不对请求和响应之间的通信状态进行保存。使用HTTP协议每当有新的请求就会有新的对应响应产生。这是为了更快的处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成如此简单的。

可是,随着Web的不断发展,因为无状态而导致业务处理变得棘手的状况增多了,例如,用户登录一个网站,当他跳转到该站的其他网页时,也需要继续保持登陆状态。针对这个案例,网站为了能够掌握是谁送出的请求,需要保存用户的状态。

HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了Cookie技术。

3)请求URI定位资源

当客户端请求访问资源而发送请求时,URI需要作为请求报文中的请求URI包含在内。除此之外,如果不是访问特定资源而是对服务器本身发起请求,可以用一个*来代替请求URI。

TCP/IP协议族与HTTP相关的协议、方法

4)HTTP方法(区分大小写,注意要用大写字母)

  1. GET:用来请求访问已被URI识别的资源。指定的资源经服务器解析后返回响应内容。
    TCP/IP协议族与HTTP相关的协议、方法
    TCP/IP协议族与HTTP相关的协议、方法
  2. POST:用来传输实体的主体。虽然GET方法也可以传输实体的主体,但一般用POST方法。
    TCP/IP协议族与HTTP相关的协议、方法
  3. PUT:用来传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的地址。自身不带验证机制,存在安全问题,一般的Web网站不使用。
    TCP/IP协议族与HTTP相关的协议、方法
  4. HEAD:用于获取报头,以确认URI的有效性和资源更新的日期等。和GET方法一样,只是不返回报文的主体。
    TCP/IP协议族与HTTP相关的协议、方法
  5. DELETE:用来删除文件,是与POST相反的方法。和PUT方法一样不带验证机制,一般的Web网站也不使用。
    TCP/IP协议族与HTTP相关的协议、方法
  6. OPTIONS:用来查询针对请求URI指定的资源支持的方法。
    TCP/IP协议族与HTTP相关的协议、方法
    TCP/IP协议族与HTTP相关的协议、方法
  7. TRACE:是让Web服务器将之前的请求通信环返回给客户端的方法,主要用于测试或诊断。发送请求时,在Max-Forwards首部字段中加入数值,每经过一个服务器数值就减一,数值为零时停止传输,最后收到请求的服务器端返回状态码200 OK的响应。因为TRACE方法不常用而且容易引发XST(Cross-Site Tracing,跨站追踪)攻击,所以通常更不会用了。
    TCP/IP协议族与HTTP相关的协议、方法
  8. CONNECT:要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer ,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密经网络隧道传输。
    TCP/IP协议族与HTTP相关的协议、方法
    TCP/IP协议族与HTTP相关的协议、方法

5)持久连接和管线化

HTTP的初始版本每进行一次通信就要断开一次TCP连接,随着HTTP的普及,这种做法无疑会增加通信的开销。。

TCP/IP协议族与HTTP相关的协议、方法

为了解决这个问题,HTTP/1.1和HTTP/1.0想出了持久连接(HTTP Persistent Connections/HTTP keep-alive/HTTP connection reuse)的方法,持久连接的特点是只要任意一端没有明确提出中断连接,则保持TCP连接状态。

TCP/IP协议族与HTTP相关的协议、方法

持久连接使得管线化成为可能,从前发送请求后需等待响应才能发出下一个请求,管线化技术出现后可以实现并行发送多个请求。请求数越多,时间优势越明显。

6)Cookie

HTTP协议的无状态特征无法进行状态的管理(不记录已登陆的状态),于是引入了Cookie技术,通过在请求和响应报文中加入Cookie信息来控制客户端的状态。

Cookie会根据从服务端发送的响应报文内一个叫Set-Cookie的首部报文信息通知客户端保存Cookie信息,下次客户端向该服务器发送请求时会自动在请求报文中加入Cookie发送出去。

TCP/IP协议族与HTTP相关的协议、方法
TCP/IP协议族与HTTP相关的协议、方法

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

GET /reader/ HTTP/1.1
Host: hackr.jp
*首部字段内没有Cookie的相关信息
           

响应报文(服务端生成Cookie信息)

HTTP/1.1200 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
           

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

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

继续阅读