了解 TCP/IP协议族
计算机与网络设备之间相互通信的规则协议,这些协议集合总称为TCP/IP。例如包括(HTTP、TCP、FTP、IP、UDP、DNS、SNMP、FDDI等等)。
TCP/IP分层:
降低耦合,每层之间根据规定好的接口通讯,层次内部能够自由改动、结构清晰。
应用层:向用户提供应用服务,FTP、DNS、HTTP...
传输层:对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。TCP、UDP
网络层:处理网络上流动的数据包(数据包是网络传输的最小数据单位),并选择一条将数据包传送到目标计算机的一条传输路径。
链路层:处理网络连接的硬件部分(操作系统、网卡、光线等)
- 举例:
用HTTP举例来说,首先客户端再应用层(HTTP协议)发出一个想看某个web页面的HTTP请求。
接着,为了传输方便,在传输层(TCP协议)把从应用层收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号和端口号后转发给网络层。
在网络层(IP协议),增加通信目的地(Mac地址)后转发给链路层。这样一来,发往网络的通信请求就准备完毕了,进行网络请求。
服务器在链路层接收到数据,依次往上层发送,当传输到应用层,才能真正接收到从客户端发送的HTTP请求。
发送端在层与层之间传输数据时,每层必定会打上一个该层所属的首部信息。反之,接收端没经过一层时会把对应的首部信息去除。
与HTTP关系密切的协议:IP、TCP和DNS
- 负责传输的IP协议
IP协议的作用是把各种数据包传送给对方。需要满足各类条件,其中两个重要的条件是IP地址和MAC地址。
IP地址指明节点被分配的地址,MAC地址指网卡的固定地址。IP地址可以和MAC地址配对,IP可变换,MAC地址基本不会更改。
使用ARP协议(Address Resolution Protocol)凭借MAC地址进行通信,ARP是用以解析地址的协议,根据通信方的IP地址就可反查出对应的MAC地址。
在到达通信目标前的中转过程中,计算机和路由器等网络设备只能获取很错略的传输路线,这种机制称为路由选择。
- 确保可靠性的TCP协议
TCP协议为了更容易传送大数据才把数据分割,且TCP协议能够确认数据最终是否送达到对方。
TCP协议采用三次握手策略,确保数据能准确无误送达目标。
握手过程(使用了TCP的标志-SYN和ACK):发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包确认信息。最后发送端再回传一个带ACK标志的数据包,代表“握手”结束。
除上述三次握手,TCP协议还有其他各种手段来保证通信的可靠性。
负责域名解析的DNS
图解IP协议、TCP协议和DNS服务在使用HTTP协议的通信过程中发挥的作用:
HTTP协议结构
简介
1. 无状态协议
HTTP是不保存状态的协议,即无状态协议。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。
为了实现保持状态功能,引入了cookie技术。有了cookie再用HTTP协议通信,就可以管理状态了。
2. 持久连接节省通信量
在HTTP协议初始版本中,没进行一次HTTP通讯就要断开一次TCP连接。会造成无谓的TCP连接建立和断开,增加通信录的开销。
持久连接:只要任意一端没有明确提出断开连接,则保持TCP连接状态。减少开销,减轻服务器端的负载,web显示速度也相应提高。
3.管线化
从前发送请求后需等待并收到响应,才能发送下一个请求。
管线化后,可同时并行发送多个请求,请求数越多,时间差就越明显。
4.Cookie状态管理
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
从服务器端发送的响应报文内的叫做Set-Cookie
的首部字段信息,通知客户端保存Cookie。下次客户端往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务端发现客户端发送的报文有Cookie后,对比服务器上的记录,最后得到之前的状态信息。
例子:
1.请求报文(没有Cookie信息的状态)
GET /reader/ HTTP/1.1
HostL: hackr.jp
2.响应报文(服务器端生成Cookie)
HTTP/1.1 200 OK
Date: Thu, 12 Jul 2012 07:12:20 GMT
Server: Apache
<Set-Cookie: sid=1234455;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= 1234455
请求报文
请求报文是由请求方法、请求URI、协议版本、可选请求首部字段和内容实体构成。
响应报文
响应报文基本上由协议版本、状态码、解释状态码的原因短语、可选响应首部字段、响应主体构成。
GET
GET方法用于请求访问已被URI识别的资源。指定的资源经服务器端解析后返回响应内容。
例子:
请求:GET /index.html HTTP/1.1
Host: www.xxx.jp
响应:返回index.html的页面资源
请求:GET /index.html HTTP/1.1
Host: www.xxx.jp
If-Modified-Since:Thu,12 Jul 2012 07:30:00 GMT
响应:仅返回2012年7月12日7点30分以后更新过的index.html页面资源。如果未有内容更新,则以状态码304 Not Modified 作为响应返回
POST
POST方法用来传输实体的主体。
例子:
请求:POST /submit.cgi HTTP/1.1
HOST: www.hackr.jp
Content_Length: 1560(1560字节的数据)
HEAD
HEAD方法和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。
请求: HEAD /index.html HTTP/1.1
Host: www.hackr.jp
响应:返回index.html有关的响应首部
OPTIONS
OPTIONS方法用来查询针对请求URI指定的资源支持的方法。
请求:OPTIONS * HTTP/1.1
Host: www.hackr.jp
响应: HTTP/1.1 200 OK
Allow: GET,POST,HEAD,OPTIONS(返回服务器支持的方法)
PUT 、DELETE
PUT方法用来传输文件。鉴于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般的web网站不使用该方法。
DELETE 方法用来删除文件。不带验证机制,所以一般web网站不使用DELETE方法。
当配合Web应用程序的验证机制,或遵守REST标准时还是有可能开放使用PUT、DELETE的。
TRACE
追踪路径:TRACE是让Web服务器端将之前的请求通信环回给客户端的方法。
不怎么常用,容易引发XST-跨站追踪攻击,就更不会用到了。
CONNECT
CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。
格式 CONNECT 代理服务器名:端口号 HTTP版本
请求: CONNECT proxy.hackr.jp:8080 HTTP/1.1
Host:proxy.hackr.jp
响应:HTTP/1.1 200 OK (之后进入网络隧道)